JavaScript 数组中的空项和未定义项有什么区别? [重复]

问题描述 投票:0回答:2

考虑以下 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 ]
> 

当我创建一个空数组时,我会得到“空项目”,其行为似乎与

undefined
不同。有人可以解释一下有什么区别吗?

javascript arrays undefined
2个回答
12
投票

当我创建一个空数组时,我会得到“空项目”,这似乎 行为与未定义不同。有人可以解释一下什么是 区别?

那是因为

Array(10)
没有填充数组。但它只是将 length 属性设置为
10
。因此,使用
Array
构造函数创建的数组只是一个具有 length 属性的对象,但没有填充任何项目。


11
投票

那是因为

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
函数枚举原始数组中的值并返回相同长度的数组,因此对 10 个空槽的数组没有影响。

请注意,空槽在不同浏览器中的命名不同。

© www.soinside.com 2019 - 2024. All rights reserved.