for, for..in, in, for...of的区别

  for是ES5里做数组循环里最常用的

        for (var i = 0; i < array.length; i++) {
            // todo
        }

  for...in是ES5里用来遍历对象属性用的

var obj = {a:1, b:2, c:3};
    
for (var prop in obj) {
  console.log("obj." + prop + " = " + obj[prop]);
}

  注意,数组索引只是具有整数名称的枚举属性,并且与通用对象属性相同。不能保证for ... in将以任何特定的顺序返回索引。for ... in循环语句将返回所有可枚举属性,包括非整数类型的名称和继承的那些。

因为迭代的顺序是依赖于执行环境的,所以数组遍历不一定按次序访问元素。因此当迭代访问顺序很重要的数组时,最好用整数索引去进行for循环(或者使用 Array.prototype.forEach() 或 for...of 循环)。

       in是用来判断某变量是否是对象的属性key-value的key的

    var obj = {
        w: 'wen',
        j: 'jian'
    }

    var result = ("j" in obj);  //true

  for...of是ES6新增的,用来遍历具有Iterator接口的数据结构。

参考资料:

http://sunct.iteye.com/blog/1709017

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/for...in

原文地址:https://www.cnblogs.com/zhansu/p/7799087.html