【一些有趣的问题】05,for..in 与 for..of

ped-Yc Lv2

以下语句会如何输出?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
let arr = [3, 5, 7];
arr.foo = "hello";
// 此时 arr 对象的结构:[3,5,7,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 的输出没有出现 "hello"

for...in

  • 循环一个指定的变量来循环一个对象所有可枚举的属性。JavaScript 会为每一个不同的属性执行指定的语句。
  • 深入一点

for...of

  • 在可迭代对象(包括 Array、Map、Set、arguments 等等)上创建了一个循环,对值的每一个独特属性调用一次迭代。
  • 首先会在向访问对象请求一个迭代器对象,然后通过调用迭代器对象的 next() 方法来遍历所有返回值。

Symbol.iterator

  • 为每一个对象定义了默认的迭代器。该迭代器可以被 for…of 循环使用。
  • 可以通过 Symbol.iterator 来访问可迭代对象的@@iterator 属性
    1
    2
    var myArray = [1,2,3];
    var it = myArray[Symbol.iterator]();
  • 标题: 【一些有趣的问题】05,for..in 与 for..of
  • 作者: ped-Yc
  • 创建于 : 2021-03-20 11:15:54
  • 更新于 : 2024-09-11 16:35:08
  • 链接: https://ped-yc.github.io/2021/03/20/someInterestingQuestions05/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论
目录
【一些有趣的问题】05,for..in 与 for..of