什么';JavaScript数组中的空项和未定义项之间的区别是什么?
考虑以下JavaScript代码(在节点REPL中):什么';JavaScript数组中的空项和未定义项之间的区别是什么?,javascript,arrays,undefined,Javascript,Arrays,Undefined,考虑以下JavaScript代码(在节点REPL中): >让a=新数组(10) 未定义 >a [ ] >a.map(e=>1) [ ] >设b=新数组(10)。填充(未定义) 未定义 >b [未定义, 未定义, 未定义, 未定义, 未定义, 未定义, 未定义, 未定义, 未定义, 未定义] >b.map(e=>1) [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ] > 当我创建一个空数组时,我将得到“空项”,它们的行为似乎与未定义的不同。有人能解释一下有什么区别吗 当我创
>让a=新数组(10)
未定义
>a
[ ]
>a.map(e=>1)
[ ]
>设b=新数组(10)。填充(未定义)
未定义
>b
[未定义,
未定义,
未定义,
未定义,
未定义,
未定义,
未定义,
未定义,
未定义,
未定义]
>b.map(e=>1)
[ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
>
当我创建一个空数组时,我将得到“空项”,它们的行为似乎与未定义的不同。有人能解释一下有什么区别吗
当我创建一个空数组时,我将得到“空项”,它似乎是
与未定义的行为不同。有人能解释一下是什么原因吗
区别
这是因为Array(10)
不会填充数组。但是它只是将length属性设置为10
。因此,使用array
构造函数创建的数组只是一个具有length属性的对象,但没有填充任何项。这是因为undefined
是一个值,而创建数组时,例如:
var array = [];
array.length = 10;
console.log(array);
>(10) [empty × 10] // in google chrome
创建10个空插槽。
空槽与未定义的值不同,最重要的区别是空槽不可枚举
var mappedArray = array.map(x => 1);
console.log(mappedArray);
>(10) [empty × 10] // in google chrome
由于map
函数枚举原始数组中的值并返回相同长度的数组,因此它对包含10个空插槽的数组没有影响
请注意,在不同的浏览器中,空槽的名称不同。在第一种情况下,可能只设置了长度。空槽不会在数组对象上设置“索引键”,因此某些方法不会出现。@Mihai您的编辑不会反映原始问题的标题或正文。正式名称为省略号
var mappedArray = array.map(x => 1);
console.log(mappedArray);
>(10) [empty × 10] // in google chrome