设置属性是否符合数组标准?

时间:2017-02-08 16:54:27

标签: javascript arrays

所以,今天偶然发现你可以将属性设置为数组,这是有道理的,因为Javascript中的所有内容都是一个对象。

此外,当与常见的数组迭代方法结合使用时,这会表现出某些有趣的行为:

let arr = ['a', 'b', 'c'];
arr.test = 'Test';

arr.map(el => console.log(el));

//output:
//a
//b
//c

arr.forEach(el => console.log(el));

//output:
//a
//b
//c

for(let x in arr){
  console.log(arr[x]);
}

//output:
//a
//b
//c
//Test

有人能解释一下这里发生了什么吗?为什么mapforEach会忽略该属性,但for会输出该属性?为什么可以首先将属性设置为数组?这是一个符合标准的做法,我应该在生产中做些什么?

2 个答案:

答案 0 :(得分:1)

  

为什么map和forEach忽略属性

它们是数组方法,设计用于数组,并且意识到唯一的"真实"数组中的数据具有数字属性名称。

  

但输出

for ... in循环将遍历所有可迭代属性,并且默认情况下任何新属性都是可迭代的。

  

为什么可以首先将属性设置为数组?

正如你所说:因为它们是对象。

  

这是一项符合标准的实践

标准说数组是对象......所以是的。

  

我应该在制作中做些什么?

一般不是。它可能会使维护代码的人感到困惑。

答案 1 :(得分:1)

for/in循环用于循环对象属性。这就是您在使用它时获得test属性的原因。

计数的for循环用于数组,因为计数器用于获取数组索引并排除属性(在遍历数组时,您不希望迭代长度属性吗? )。

.map.forEachArray.prototype属性,专门用于迭代数组中的元素而不是所有数组的属性。