Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.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_Undefined - Fatal编程技术网

什么';JavaScript数组中的空项和未定义项之间的区别是什么?

什么';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 ] > 当我创建一个空数组时,我将得到“空项”,它们的行为似乎与未定义的不同。有人能解释一下有什么区别吗 当我创

考虑以下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 ]
> 
当我创建一个空数组时,我将得到“空项”,它们的行为似乎与未定义的
不同。有人能解释一下有什么区别吗

当我创建一个空数组时,我将得到“空项”,它似乎是 与未定义的行为不同。有人能解释一下是什么原因吗 区别


这是因为
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