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

IT技术 javascript arrays undefined
2021-03-20 08:08:04

考虑以下 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. 有人可以解释一下有什么区别吗?

2个回答

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

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

那是因为undefined是一个值,而当你创建一个数组时,例如:

var array = [];
array.length = 10;
console.log(array);
>(10) [empty × 10] // in google chrome

创建了 10 个空槽。空槽与 undefined 值不同,最重要的区别是空槽不是 Enumerable。

var mappedArray = array.map(x => 1);
console.log(mappedArray);
>(10) [empty × 10] // in google chrome

由于map函数枚举原始数组中的值并返回相同长度的数组,因此它对10个空槽的数组没有影响。

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

2021-05-14 08:08:04