【问题标题】:Difference between "empty' and "undefined" in Javascript? [duplicate]Javascript中“空”和“未定义”之间的区别? [重复]
【发布时间】:2023-03-15 10:42:01
【问题描述】:

根据 ECMAScript,除了其他数据类型之外,还有 nullundefined 数据类型。 但最近我看到了一个叫empty 的东西。让我们先重新生成它(我将从基本开始):

let a = new Array() //返回[]length=0

let b = new Array(3) //返回[empty*3]length=3

let c = new Array(3).fill()//返回[undefined,undefined,undefined]length=3

现在,什么? 看到所有定义的元素都是未定义的,它们应该是

  • a[0]=undefined
  • b[0]=undefined
  • c[0]=undefined

主要内容: 如果假设在@​​987654336@的位置5添加一个元素,即a[5]=4 那么c 将是[undefined,undefined,undefined,empty,4]

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

[这里]建议的答案:What's the difference between empty items in a JavaScrip array and undefined? 没有正确解释它到底是什么。是的,它不能是undefined,因为undefined 是一个值,但是null 又如何呢?如果不是null,为什么empty 不是数据类型?

【问题讨论】:

  • Node.js 在很大程度上只是 V8,这使得它在纯 JavaScript 方面与 Chrome 非常相似。
  • 是的,Node.js 的行为方式类似。我说的浏览器控制台是spidermonkey。反正结果是一样的。
  • empty 实际上并不是 JavaScript 中的“事物”。您的控制台吐出empty 的原因是它试图清楚地表示sparse array。 JS 控制台不受任何标准约束,因此不同的控制台可能会以不同的方式表示数组中的这些孔
  • 例如repl.it控制台返回[ undefined, undefined, undefined, <1 empty item>, 4 ]

标签: javascript arrays


【解决方案1】:

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

  [undefined,undefined,undefined,empty,4]

可以写成这样的对象:

 {
  0: undefined,
  1: undefined,
  2: undefined,
  // 3 doesnt exist at all
  4: 4,
  length: 5,
 }

所以undefined 实际上是一个存在并保存一个值的槽,而3 甚至不是键值对。访问不存在的密钥会导致 undefined 没有现实世界的差异:

    array[2] // undefined
    array[3] // undefined

但是使用map 和其他数组迭代一个数组会跳过空数组,所以你应该在迭代之前使用.fill

检测差异的唯一方法是检查密钥是否存在:

  2 in array // true
  3 in array // false

要将empty 转为undefined,您可以设置密钥:

  array[3] = undefined;

要将undefined 转换为empty,您必须移除密钥:

  delete array[3]

但这很少有关系。

【讨论】:

    【解决方案2】:

    empty 不是类型。这只是一种描述那里什么都没有的方式。不是undefinednull。这是完全没有价值的。只有当它试图向您显示数组的表示时,您才会看到这一点。如果您实际查看这些索引,它将返回 undefined

    【讨论】:

      猜你喜欢
      • 2011-03-26
      • 2010-10-06
      • 2015-09-03
      • 2011-05-23
      • 1970-01-01
      • 2017-04-11
      • 2017-06-25
      • 2013-01-28
      相关资源
      最近更新 更多