根据 ECMAScript,除了其他数据类型之外,还有null和undefined数据类型。但最近我看到了一个叫做empty. 让我们先重新生成它(我将从基本开始):
let a = new Array() //返回[]长度=0
let b = new Array(3) //返回[empty*3]长度=3
let c = new Array(3).fill() //返回[undefined,undefined,undefined]长度=3
怎么办?查看所有定义的元素都是未定义的,它们应该是
a[0]=undefinedb[0]=undefinedc[0]=undefined 主要的东西:如果假设加入到一个元素c在5位即a[5]=4
再c会[undefined,undefined,undefined,empty,4]
这中间的空东西是什么?如果一切都相同,那么开始初始化b和c(我说的是[empty*3]& [undefined,undefined,undefined])有什么区别。
答案建议 [此处]:JavaScrip 数组中的空项和未定义项之间有什么区别?没有正确解释它到底是什么。是的,它不能undefined作为undefined一个值,但怎么样null,如果没有null,为什么空不是数据类型?
数组是对象。这意味着你的数组
[undefined,undefined,undefined,empty,4]
Run Code Online (Sandbox Code Playgroud)
可以写成这样一个对象:
{
0: undefined,
1: undefined,
2: undefined,
// 3 doesnt exist at all
4: 4,
length: 5,
}
Run Code Online (Sandbox Code Playgroud)
所以undefined实际上是一个存在并保存值的插槽,而3它甚至不是键值对。由于访问不存在的密钥导致undefined没有现实世界的差异:
array[2] // undefined
array[3] // undefined
Run Code Online (Sandbox Code Playgroud)
但是迭代一个数组map和其他人会跳过空的,所以你应该.fill在迭代之前使用。
检测差异的唯一方法是检查密钥是否存在:
2 in array // true
3 in array // false
Run Code Online (Sandbox Code Playgroud)
要打开empty来undefined,你可以设置的关键:
array[3] = undefined;
Run Code Online (Sandbox Code Playgroud)
并undefined变成empty你必须移除钥匙:
delete array[3]
Run Code Online (Sandbox Code Playgroud)
然而,这很少重要。