for...in / for...of
for ... in   (枚举)
  • 枚举对象
var obj = {
  a: 1,
  b: [],
  c: function () {}
};
for (var key in obj) {
   console.log(key);
}

输出结果:a  b  c

  • 枚举数组
var arr = [3, 5, 7];
for (var i in arr) {
   console.log(i);
}

输出结果:0  1  2

var arr = [3, 5, 7];
for (var i in arr) {
   console.log(i, arr[i]);
}

输出结果:0 3     1 5     2 7

  • 枚举数组的原型对象,以及数组对象本身属性值
Object.prototype.objCustom = function() {}; 
Array.prototype.arrCustom = function() {};

var arr = [3, 5, 7];
arr.foo = 'hello';

for (var i in arr) {
   console.log(i);
}
输出结果:0  1  2  foo  arrCustom  objCustom



hasOwnProperty: 判断对象是否包含特定的自身(非继承)属性

Object.prototype.objCustom = function() {}; 
Array.prototype.arrCustom = function() {};

var arr = [3, 5, 7];
arr.foo = 'hello';

for (var i in arr) {
   if (arr.hasOwnProperty(i)) {
    console.log(i);
  }
}

for ... of   (迭代)
  • 迭代数组
var arr = [3, 5, 7];
for (var i of arr) {
   console.log(i);
}

输出结果:3  5  7

张鑫旭——for...in/for...of

遗漏点补充
JSRUN前端笔记, 是针对前端工程师开放的一个笔记分享平台,是前端工程师记录重点、分享经验的一个笔记本。JSRUN前端采用的 MarkDown 语法 (极客专用语法), 这里属于IT工程师。