for…in和for…of

for…in

遍历对象

获得对象的键名

for...in是为遍历对象而设计的,不适用于遍历数组。

遍历数组的缺点
  • 数组的键名是数字,但是for…in循环是以字符串作为键名“0”、“1”、“2”等等。
  • for…in循环不仅遍历数字键名,还会遍历手动添加的其他键,甚至包括原型链上的键。
  • 某些情况下,for…in循环会以任意顺序遍历键名。
语法

for (variable in object) {...}

for…in语句以任意顺序遍历一个对象自有的、继承的、可枚举的、非Symbol的属性。对于每个不同的属性,语句都会被执行。

for…in遍历哪些属性?

  • 自有的:自带的属性
  • 继承的:原型链上的属性(如果不需要继承的属性可用Object.keys()方法)
  • 可枚举的
  • 非Symbol的属性

for…of

获得键值

let arr = ['a', 'b', 'c', 'd'];
 
for (let a of arr) {
  console.log(a); // a b c d
}

可遍历包括数组、Set 和 Map 结构、某些类似数组的对象(比如arguments对象、DOM NodeList 对象)、后文的 Generator 对象,以及字符串。

for...of可以响应breakcontinuereturn语句

不可遍历普通对象(报错:obj is not iterable(obj不可迭代))

for...of循环调用遍历器接口,数组的遍历器接口只返回具有数字索引的属性。这一点跟for...in循环也不一样。

例:

let arr = [3, 5, 7];
arr.foo = 'hello';
 
for (let i in arr) {
  console.log(i); // "0", "1", "2", "foo"
}
 
for (let i of arr) {
  console.log(i); //  "3", "5", "7"
}

for…of 循环(ES6)_zhangbin0027的博客-CSDN博客

JavaScript对象遍历 – SegmentFault 思否

彻底搞清楚 Iterator(遍历器)接口_毛小星的博客-CSDN博客

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注