精华内容
下载资源
问答
  • 版权声明:转载请注明作者(独孤尚良dugushangliang)...JavaScript的for in循环for of循环挺有意思的,不过这两个都和python的for in循环有区别也有联系。 JavaScript的数组是python的列表,称谓不同而已。下...

    版权声明:转载请注明作者(独孤尚良dugushangliang)出处: https://blog.csdn.net/dugushangliang/article/details/89086893

     

    JavaScript的for in循环和for of循环挺有意思的,不过这两个都和python的for in循环有区别也有联系。

    JavaScript的数组是python的列表,称谓不同而已。下面举例说明这三者的区别。

    a=['a','b','c','d']
    
    #下面的代码依次输出上面的python列表的值:abcd
    for i in a:
        print(i)
    
    #下面的代码依次输出上面的python列表的索引:0123
    for i in range(len(a)):
        print(i)

    上面是python代码,下面是JavaScript代码。

    var a=['a','b','c','d'];
    
    //下面的代码依次输出上面的JavaScript数组的值:abcd
    for(var i of a){
        document.write(i);
    }
    
    //下面的代码依次输出上面的JavaScript数组的值:abcd
    for(var i in a){
        document.write(a[i]);
    }
    
    //下面的代码依次输出上面的JavaScript数组的索引:0123
    for(var i in a){
        document.write(i);
    }

    我们可以看到JavaScript的for in和for of都可以输出数组的值,只是表现形式不一样。那么这两种的结果是否完全相同呢?

    看下面这个代码。

    var a = new Array();
    var x;
    a[0] = 'a';
    a[3] = 'b';
    a[4] = 'c';
    a[10] = 'd';
    
    for( x in a ){
      document.write(x+' ');    // 依次显示出 0 3 4 10
    } 
    
    for( x in a ){
      document.write(a[x]+' ');   // 依次显示出 a b c d
    } 
    
    for( x of a ){
      document.write(x+' ');  // 依次显示出 a undefined undefined b c undefined undefined undefined undefined undefined d
    } 
    

    这是因为for in会自动跳过没有赋值的元素,而for of不会,对于没有赋值的元素,其值是undefined。

     

    独孤尚良dugushangliang——著

    展开全文
  • for循环和for in循环

    千次阅读 2018-02-12 10:02:14
    var arr=[11,12,13]var obj={a:12,b:13...------12数组既可以是for循环,也可以是for in循环json对象只能用for in循环,因为没有length属性for(var i in obj){ alert(i+"="+obj[i]);//i为属性名}// a=12...

    var arr=[11,12,13]

    var obj={a:12,b:13,c:14}

    alert(obj['a']);-------12

    alert(obj.a);------12

    数组既可以是for循环,也可以是for in循环

    json对象只能用for in循环,因为没有length属性

    for(var i in obj){

        alert(i+"="+obj[i]);//i为属性名

    }//  a=12  b=13   c=14

    展开全文
  • for in 循环详解

    千次阅读 2019-11-25 15:49:35
    for in循环 for...in 语句以任意顺序遍历一个对象的除 Symbol 以外的可枚举属性。 for...in 循环只遍历可枚举属性。像 Array和 Object 使用内置构造函数所创建的对象都会继承自Object.prototype和String.prototype...

    for in循环

    • for...in 语句以任意顺序遍历一个对象的除 Symbol 以外的可枚举属性。
    • for...in 循环只遍历可枚举属性。像 Array和 Object 使用内置构造函数所创建的对象都会继承自Object.prototype和String.prototype的不可枚举属性,例如 String 的 indexOf()  方法或 Object的toString()方法。循环将遍历对象本身的所有可枚举属性,以及对象从其构造函数原型中继承的属性
    • 语法:for (variable in object)    variable:在每次迭代时,variable会被赋值为不同的属性名。 object:非Symbol类型的可枚举属性被迭代的对象。
    • 最好不要用for...in去迭代一个数组。
    var obj = {a:1, b:2, c:3};
        
    for (var prop in obj) {
      console.log("obj." + prop + " = " + obj[prop]);
    }
    
    // Output:
    // "obj.a = 1"
    // "obj.b = 2"
    // "obj.c = 3"

    可以循环遍历数组

    var arr = ['nick','freddy','mike','james'];
    
    for(var index in arr){	
        console.log(index +'. ' + arr[index]);
    }
    // 0. nick
    // 1. freddy
    // 2. mike
    // 3. james

    for in 与 for of 它们之间的主要区别在于它们的迭代方式

    • for...in 语句以任意顺序迭代对象的可枚举属性,会遍历手动添加的其他键,甚至包括原型链上的键,只能获得对象的键名,不能直接获取键,为遍历对象而设计。
    • for...of 语句遍历可迭代对象定义要迭代的数据,允许遍历获得键值,数组的遍历器接口只返回具有数字索引的属性,不同于forEach方法,它可以与breakcontinuereturn配合使用。提供了遍历所有数据结构的统一操作接口。
    Object.prototype.objCustom = function() {};
    Array.prototype.arrCustom = function() {}; 
    
    let iterable = [3, 5, 7]; 
    iterable.foo = 'hello';
    

    每个对象将继承objCustom属性,并且作为Array的每个对象将继承arrCustom属性,因为将这些属性添加到Object.prototype和Array.prototype。由于继承和原型链,对象iterable继承属性objCustom和arrCustom。

    for (let i in iterable) {
      console.log(i); // 0, 1, 2, "foo", "arrCustom", "objCustom" 
    }
    

    此循环仅以原始插入顺序记录iterable 对象的可枚举属性。它不记录数组元素3, 5, 7 或hello,因为这些不是枚举属性。但是它记录了数组索引以及arrCustom和objCustom。

    for (let i in iterable) {
      if (iterable.hasOwnProperty(i)) {
        console.log(i); // 0, 1, 2, "foo"
      }
    }
    

    这个循环类似于第一个,但是它使用hasOwnProperty() 来检查,如果找到的枚举属性是对象自己的(不是继承的)。如果是,该属性被记录。记录的属性是0, 1, 2和foo,因为它们是自身的属性(不是继承的)。属性arrCustom和objCustom不会被记录,因为它们是继承的。

    for (let i of iterable) {
      console.log(i); // 3, 5, 7 
    }
    

    for of循环迭代并记录iterable作为可迭代对象定义的迭代值,这些是数组元素 3, 5, 7,而不是任何对象的属性。

    对于对象

    对于普通的对象,for...of结构不能直接使用,会报错,必须部署了 Iterator 接口后才能使用。但是,这样情况下,for...in循环依然可以用来遍历键名。

    let es6 = {
      edition: 6,
      committee: "TC39",
      standard: "ECMA-262"
    };
    
    for (let e in es6) {
      console.log(e);
    }
    // edition
    // committee
    // standard
    
    for (let e of es6) {
      console.log(e);
    }
    // TypeError: es6[Symbol.iterator] is not a function
    

    上面代码表示,对于普通的对象,for...in循环可以遍历键名,for...of循环会报错。

    一种解决方法是,使用Object.keys方法将对象的键名生成一个数组,然后遍历这个数组。

    for (var key of Object.keys(someObject)) {
      console.log(key + ': ' + someObject[key]);
    }
    

    另一个方法是使用 Generator 函数将对象重新包装一下。

    function* entries(obj) {
      for (let key of Object.keys(obj)) {
        yield [key, obj[key]];
      }
    }
    
    for (let [key, value] of entries(obj)) {
      console.log(key, '->', value);
    }
    // a -> 1
    // b -> 2
    // c -> 3
    

    展开全文
  • JavaScript中for循环for in 循环的区别

    千次阅读 2017-07-05 16:48:51
    JavaScript中for循环for in 循环的区别
    //在遍历数组上的异同
    var arr = ['a','b','c'];
    for(var i = 0;i < arr.length;i++){
    	console.log(typeof(i));//number
    	console.log(arr[i]);//a,b,c
    }
    
    var att = ['a','b','c'];
    for(var j in att){
    	console.log(typeof(j));//string
    	console.log(att[j]);//a,b,c
    }

    for循环和for in循环都可以遍历获取到数组的内容;

    for循环获取数组下标的typeof类型为number;

    for in 循环获取数组下标的typeof类型为string;


    //在遍历对象上的异同
    var obj = new Object({
    	name:"Simon",
    	age:"16",
    	city:"BJ"
    });
    
    console.log(obj.length);//undefined
    for(var i = 0;i < obj.length;i++){
    	console.log(i);//空的
    	console.log(obj[i]);//空的
    }
    
    for(var j in obj){
    	console.log(j);//name,age,city
    	console.log(obj[j]);//simon,16,BJ
    }

    for循环不能用于循环对象,因为for循环无法获取obj.length,所以for循环只能用于数组操作;

    for in 循环可以获取对象的键值,可以操作数组,还可操作对象;

    -----------------------------------------分割线-----------------------------------------------------------

    但是:在操作数组的性能上:for循环的性能要高于for in 循环;



    贺师俊老师在知乎说到(链接:https://www.zhihu.com/question/38472789/answer/76649492):

    for...in 效率是最低的。这是因为 for...in 有一些特殊的要求,包括:
    1. 遍历所有属性,不仅是 own properties 也包括原型链上的所有属性。
    2. 忽略 enumerable 为 false 的属性。
    3. 必须按特定顺序遍历,先遍历所有数字键,然后按照创建属性的顺序遍历剩下的。




    展开全文
  • IOS的forin循环和for循环

    千次阅读 2015-06-13 14:37:05
    其实forin循环for循环的功能都是差不多的,这2个区别大家都是知道是i下标符的区别,但是还有一个区别,相对于我目前来说,forin在循环一个数组时候,对数组不能进行改动。否则会出差的。具体原因可能是forin用了...
  • json 的for in循环

    千次阅读 2017-01-04 13:28:06
    json的for in循环
  • 首先得先介绍一下什么是for 循环,什么是for in循环for循环语法: for (设置初始值;设置循环执行的条件;步长累加){ //条件成立,执行循环体中的内容(循环体中存放的就是我们需要重复处理的事情)。 }第一步:设置...
  • js for in 循环的坑

    2019-08-23 10:17:26
    这样使用for in循环时可能会有一种bug for(var item in list) 原因:forin循环会把某个类型的原型(prototype)中方法与属性给遍历出来,所以这可能会导致代码中出现意外的错误 解决办法: 1)使用for(var i=0;i<...
  • OC 中 for循环和for in循环的区别

    千次阅读 2018-06-20 14:36:17
    关于OC的for in 循环机制。 废话少说直接上代码 如下的代码在运行时是会报错的 错误信息是(&lt;__NSArrayM: 0xa4fc000&gt; was mutated while being enumerated.)NSMutableArray* arr = [NSMutableArray...
  • for in循环与break.contiue

    千次阅读 2019-08-06 20:20:22
    for in循环的本质是一种foreach循环,主要作用有两个: 遍历数组里的所有元素; 遍历javascript对象的所有属性; 语法格式如下: for (index in object) { statement } 当遍历数组时。for in循环的循环计时器是...
  • python使用for in循环输出菱形 刚开始接触python有点不太适应,之前都是熟悉点java,是在校大学生,发出来也是希望大家看看我自己的理解同时能够得到大家一些指导帮助。(这里谢谢大家) 接触这个题目时第一想法就是...
  • python中的for in 循环

    万次阅读 2018-10-05 09:17:21
    for in 循环 说明:也是一种循环结构,常用于遍历可迭代的对象,如:字符串、列表、元组、字典、集合 执行流程:x依次表示y中的一个元素,遍历完所有元素后结束循环 可迭代对象:列表、元组、字典等都是可迭代...
  • shell ——for in 循环

    万次阅读 2013-11-21 11:25:41
    shell ——for in 循环 2013-03-28 18:06:29 标签:for 循环  shell 编程——for in 循环   -------for in 格式-------     for 无$变量 in 字符串 do $变量 done    一简单的字符串...
  • For循环是按顺序的,for in 循环是不一定按顺序的。 用 for in 循环对象,循环出来的属性顺序并不可靠,所以不要在 forin 中做依赖对象属性顺序的逻辑判断 for in 循环遍历的规律: 先遍历出(非负)整数属性...
  • for in 循环

    2012-07-18 11:08:10
    in 操作符一样,for in 循环同样在查找对象属性时遍历原型链上的所有属性。 注意: for in 循环不会遍历那些 enumerable 设置为 false 的属性;比如数组的 length 属性。 [code="java"]// 修改 ...
  • * 关于for循环和for in循环需要注意 * * for in 循环 使用与数组或者是对象中,但是对于nodelist来说,在火狐下面没有问题,但是在ie下面会有问题 * 这时候我们需要使用一般for循环进行过滤 * * 比如...
  • 1、for in循环实质是一种foreach循环 2、作用 (1)遍历数组里的所有数组元素 (2)遍历JavaScript对象的所有属性 3、语法格式  for(index in object)  {  statements  }
  • 用普通循环就可以 ...用 for in 循环就报错 ![图片说明](https://img-ask.csdn.net/upload/201906/08/1559961356_361632.jpg) ![图片说明](https://img-ask.csdn.net/upload/201906/08/1559961390_404609.jpg)
  • 前端性能优化:for in循环的优化

    千次阅读 2016-07-03 10:15:45
    for in循环非常慢,但有时候却不能不使用,那有没有方法改进呢?for in循环之所以慢,就是因为需要不停的遍历原型链,如果知道能够减少原型链的遍历就可以改进。改进方法,就是需要遍历的属性明确列出来:代码: ...
  • for in循环遍历和for循环的区别

    千次阅读 2019-10-08 15:01:52
    JS中用来遍历的方法不是已经有for循环了吗?为什么又多出一个for in来呢? 还是用示例来看下这两者到底有什么区别吧。 <ul id="ul"> <li>111</li> <li>222</li> <li>333<...
  • JavaScript 中 for in 循环和数组的问题

    千次阅读 2018-07-24 17:17:25
    javascript中for in循环时遇到一个问题。 JavaScript的forin循环用于迭代访问对象中的可枚举(enumerable)属性: var tMinus = { two: "Two", one: "One", zero: "Blast off!"...
  • for in 循环不要用来遍历数组!

    千次阅读 2018-04-08 15:47:49
    1.for in循环会遍历到数组中的原型链中的属性 只有具有 Enumerable (可枚举)属性的属性才能被 for … in 遍历。例如constructor 便是最常见的不可枚举属性之一。 let arr=[1,2,3] Array.prototype.xxx=1231235 ...
  • 再说for in循环

    千次阅读 2019-07-29 14:09:44
    for (var idx in moviesDouban.subjects) { var subject = moviesDouban.subjects[idx];//主要是这段代码不清除,以为对moviesDouban.subjects循环就能得到数组中的每一个对象,其实得到的只是下标/索引,0、1、2....
  • js for in 循环

    千次阅读 2018-09-06 10:56:45
    For...In 声明用于对数组或者对象的属性进行循环/迭代操作。 写法格式:for(var v in arrObj){...} 当arrObj是数组时,v代表索引 当arrObj是对象时,v代表属性 例子: var arr = []; arr.push("121"...
  • javascript for...in 语句 for...in 语句用于对数组或者对象的属性进行循环操作...Tip:for-in循环应该用在非数组对象的遍历上,使用for-in进行循环也被称为“枚举”。 语法: for (变量 in 对象) { 在此执行代码 }
  • js里的for in循环定义如下:  for(var variable in obj) { ... }  obj可以是一个普通的js对象或者一个数组。如果obj是js对象,那么variable在遍历中得到的是对象的属性的名字,而不是属性对应的值。如果obj是数组...
  • 语法格式:for 变量 in 范围 | 元素 | 集合等:for循环语法结构列如序列或迭代器作为其参数每次迭代其中一个元素。 与while循环一样,支持break,continue,else语句。 一般情况下,循环次数未知采用while循环循环...
  • 1.使用 for in 循环遍历对象的属性时,原型链上的所有属性都将被访问: Object.prototype.say="cgl"; // 修改Object.prototype var person ={ age: 18 }; for (var key in person) { console.log(key, person...
  • 关于for in 循环会遍历原型链上的属性的问题 for in可遍历原型链上扩展的属性,Object.keys() 只遍历自身属性 1.使用 for in 循环遍历对象的属性时,原型链上的所有属性都将被访问: Object.prototype.say="cgl"; /...
  • python for in循环遍历

    2019-01-18 11:06:10
    ![图片说明](https://img-ask.csdn.net/upload/201901/18/1547780708_372453.png) print(i[0:1])不是应该是打印出先两个嘛?为什么还是会全部打出来?

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 37,653
精华内容 15,061
关键字:

forin循环