Javascript中“空”和“未定义”之间的区别?

5 javascript arrays

根据 ECMAScript,除了其他数据类型之外,还有nullundefined数据类型。但最近我看到了一个叫做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]=undefined
  • b[0]=undefined
  • c[0]=undefined

主要的东西:如果假设加入到一个元素c在5位即a[5]=4c[undefined,undefined,undefined,empty,4]

这中间的空东西是什么?如果一切都相同,那么开始初始化bc(我说的是[empty*3]& [undefined,undefined,undefined])有什么区别。

答案建议 [此处]:JavaScrip 数组中的空项和未定义项之间有什么区别?没有正确解释它到底是什么。是的,它不能undefined作为undefined一个值,但怎么样null,如果没有null,为什么空不是数据类型?

Jon*_*lms 8

数组是对象。这意味着你的数组

  [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)

要打开emptyundefined,你可以设置的关键:

  array[3] = undefined;
Run Code Online (Sandbox Code Playgroud)

undefined变成empty你必须移除钥匙:

  delete array[3]
Run Code Online (Sandbox Code Playgroud)

然而,这很少重要。