考虑以下JavaScript代码(在节点REPL中):
> let a = new Array(10)
undefined
> a
[ <10 empty items> ]
> a.map(e => 1)
[ <10 empty items> ]
> let b = new Array(10).fill(undefined)
undefined
> b
[ undefined,
undefined,
undefined,
undefined,
undefined,
undefined,
undefined,
undefined,
undefined,
undefined ]
> b.map(e => 1)
[ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
>
当我创建一个空数组时,我会得到空白项目&#39;它似乎与undefined
的行为不同。有人可以解释一下有什么区别吗?
答案 0 :(得分:6)
当我创建一个空数组时,我会得到“空项目” 表现与undefined不同。有人可以解释一下是什么 差?
那是因为Array(10)
没有填充数组。但它只是将长度属性设置为10
。因此,使用Array
构造函数创建的数组只是一个具有length属性的对象,但没有填充任何项目。
答案 1 :(得分:1)
那是因为undefined
是一个值,而当您创建一个数组时,例如:
var array = [];
array.length = 10;
console.log(array);
>(10) [empty × 10] // in google chrome
创建了10个空插槽。 空槽与未定义的值不同,最重要的区别是空槽不是Enumerable。
var mappedArray = array.map(x => 1);
console.log(mappedArray);
>(10) [empty × 10] // in google chrome
由于map
函数枚举了orriginal数组中的值并返回相同长度的数组,因此它对10个空插槽的数组没有影响。
请注意,在不同的浏览器中,空插槽的名称会有所不同。