当前位置:  开发笔记 > 编程语言 > 正文

为什么..在获取所有属性,但是...的...没有得到所有的值?

如何解决《为什么..在获取所有属性,但是的没有得到所有的值?》经验,为你挑选了1个好方法。

我测试了以下代码:

arr = [3, 5, 7];

arr.foo = "hello";

arr["boo"] ="moo"


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

for (i of arr) {
   console.log(i); 
}

for .. in获取数组的所有属性.

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

收益:

0 
1 
2 
foo 
boo

但是因为...没有得到所有的价值观

  for (i of arr) {
       console.log(i); 
    }

收益:

3
5
7

这种差异的技术原因是什么?为什么这种明显的不一致性被接受为默认行为?



1> Sam Hanley..:

for (... in ...)语法可用于任何物体上,因此将遍历该对象的所有属性.从技术上讲,这个循环将遍历内部定义的对象中的任何属性,其[[Enumerbale]]属性设置为true.

for (... of ...)ES6 的语法是新的,并且特定于集合,而不是所有对象.它提供了一种迭代方法来迭代集合的元素,而不必使用带索引的普通forwhile循环.它将以这种方式迭代任何具有[Symbol.iterator]属性的集合的元素.

这不是"不一致",它们是两个不同的运营商,旨在用于两个不同的目的.我可以理解它可能看起来像是在arr["boo"] ="moo"为数组添加一个元素 - 因为你可以通过类似的语法访问数组的元素,如arr[0].但很容易确认那些实际上并不相同 - arr["boo"] ="moo"你创建的属性也可以被访问arr.boo,但是试图通过比较来访问数组的元素arr.0会是语法错误,因为它们是与属性不同.

推荐阅读
手机用户2502851955
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有