Javascript 将属性设置为阵列是否符合标准?
所以,今天我偶然发现可以将属性设置为数组,这很有意义,因为Javascript中的所有内容都是对象 此外,当与常见的数组迭代方法相结合时,这表现出某些有趣的行为:Javascript 将属性设置为阵列是否符合标准?,javascript,arrays,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
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
有人能解释一下这是怎么回事吗?为什么map
和forEach
忽略属性,而for
输出它?为什么首先可以将属性设置为数组?这是符合标准的做法吗?我应该在生产中做些什么
为什么map和forEach忽略该属性
它们是数组方法,设计用于处理数组,并且知道数组中唯一的“真实”数据具有数字属性名称
但对于它的输出
用于。。。在
中,循环将循环所有iterable属性,默认情况下,任何新属性都是iterable
为什么首先可以将属性设置为数组
正如你所说:因为它们是对象
这是符合标准的做法吗
标准上说数组是对象…所以是的
我应该在生产中做些什么
通常不会。这可能会让维护代码的人感到困惑
为什么map和forEach忽略该属性
它们是数组方法,设计用于处理数组,并且知道数组中唯一的“真实”数据具有数字属性名称
但对于它的输出
用于。。。在
中,循环将循环所有iterable属性,默认情况下,任何新属性都是iterable
为什么首先可以将属性设置为数组
正如你所说:因为它们是对象
这是符合标准的做法吗
标准上说数组是对象…所以是的
我应该在生产中做些什么
通常不会。这可能会让维护代码的人感到困惑。for/in循环意味着循环对象属性。这就是为什么在使用
test
属性时会得到它
计数的for
循环用于数组,因为计数器用于获取数组索引和排除属性(在遍历数组时,您不希望迭代长度属性,是吗?)
.map
和.forEach
是数组。prototype
属性专门设计用于迭代数组中的元素,而不是数组的所有属性。for/in循环用于循环对象属性。这就是为什么在使用test
属性时会得到它
计数的for
循环用于数组,因为计数器用于获取数组索引和排除属性(在遍历数组时,您不希望迭代长度属性,是吗?)
.map
和.forEach
是数组。prototype
属性专门用于迭代数组中的元素,而不是数组的所有属性。数组是具有长度属性和其他一些方法的对象。数组的可能副本是具有长度属性和其他一些属性的对象方法。可能重复的