小编典典

JavaScript中的for语句和for语句之间有什么区别?

javascript

我知道什么是for... in循环(对键进行迭代),但是第一次听说for... of(对值进行迭代)。

我对for... of循环感到困惑。我没有形容词。这是下面的代码:

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

for (var i in arr) {
  console.log(i); // logs "0", "1", "2", "foo"
}

for (var i of arr) {
  console.log(i); // logs "3", "5", "7"
  // it is does not log "3", "5", "7", "hello"
}

我得到的是,for... of遍历属性值。那么,为什么它不记录(返回)"3", "5", "7", "hello"而不是"3", "5", "7"?但是for... in循环遍历每个键("0", "1", "2", "foo")。在这里,for... in循环还会遍历foo键。但是for... of不会迭代foo财产的价值,即"hello"。为什么会这样呢?

总而言之:

在这里,我控制台for... of循环。它应该记录,"3", "5", "7","hello"但是在这里记录"3", "5", "7"。为什么呢


阅读 337

收藏
2020-04-25

共2个答案

小编典典

for in 遍历对象的可枚举属性名称。

for of(ES6中的新增功能)确实使用了特定于对象的迭代器,并循环了由该对象生成的值。

2020-04-25
小编典典

无论for..offor..in语句叠代列表; 但是,迭代的值不同,它for..in返回要迭代的对象上的键的列表,而for..of返回要迭代的对象的数字属性的值的列表。

这是一个展示这种区别的示例:

let list = [4, 5, 6];

for (let i in list) {
   console.log(i); // "0", "1", "2",
}

for (let i of list) {
   console.log(i); // "4", "5", "6"
}

另一个区别是for..in可对任何对象进行操作;它用作检查此对象属性的一种方法。for..of另一方面,主要关注可迭代对象的值。内置对象(例如MapSet implement Symbol.iterator属性)允许访问存储的值。

let pets = new Set(["Cat", "Dog", "Hamster"]);
pets["species"] = "mammals";

for (let pet in pets) {
   console.log(pet); // "species"
}

for (let pet of pets) {
    console.log(pet); // "Cat", "Dog", "Hamster"
}
2020-04-27