Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将属性设置为阵列是否符合标准?_Javascript_Arrays - Fatal编程技术网

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

所以,今天我偶然发现可以将属性设置为数组,这很有意义,因为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
有人能解释一下这是怎么回事吗?为什么
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
属性专门用于迭代数组中的元素,而不是数组的所有属性。

数组是具有长度属性和其他一些方法的对象。数组的可能副本是具有长度属性和其他一些属性的对象方法。可能重复的