【问题标题】:Is an empty array strictly equal to anything in JavaScript?空数组是否严格等于 JavaScript 中的任何内容?
【发布时间】:2016-11-27 15:37:03
【问题描述】:

我对不同的数组值做了一系列测试:

测试:

x === 0
x === ''
x === false
x === undefined
x === NaN
x === null
x === []
x === {}
x == 0
x == ''
x == false
x == undefined
x == NaN
x == null
x == []
x == {}

结果:

如果 x 是:

[NaN]
[false]

它没有通过所有测试。

如果 x 是:

[null]
[]
[[]]
[[[yep, no matter how deep]]]
[undefined]
['']

通过了:

x==0
x==''
x==false

如果 x 是:

[0]
[{}]

通过了

x==0
x==false

我错过了什么吗?是否有一个空数组 [] 严格等于 (===)?

另外,对于这些值:[NaN],[false], [null], [], [[]], [undefined], [''], [0], [{}],只有 [].length 等于 0

关于如何检查数组是否为空[] 的最佳实践是什么?如果存在相互竞争的最佳实践,在哪些情况下最好使用它们?

【问题讨论】:

  • What are the best practices on how to check if an array is emptyarray.length==0 怎么样?

标签: javascript arrays


【解决方案1】:

一个空数组严格等于它自己。更准确地说,一个对某个特定空数组的引用求值的表达式仅严格等于对同一数组的另一个引用。

这适用于任何类型的对象,不仅仅是数组,也不仅仅是空数组。没有内置方法可以为与 === 的相等比较提供您自己的特殊行为。

== 的比较是另一回事,因为隐式执行的类型转换。然而,即使使用==(即不执行类型转换)进行对象比较,它仍然是正确的:对一个对象的引用只等于对同一对象的另一个引用。

还要注意

[] === []

false,因为它们是两个不同的空数组。同样,

[1, 2] === [1, 2]

false,原样

{a: "hello"} === {a: "hello"}

每个数组或对象初始化表达式都会创建一个唯一的对象,因此即使它们看起来相同,但在 JavaScript === 比较规则下它们并不相等。

【讨论】:

  • 感谢您简洁明了的回答。我会和emptyArray.length == 0一起去检查数组是否为空。
  • 把它扔掉 - 因为“0”在 JavaScript 中是错误的,你也可以检查 if (!emptyArray.length)
猜你喜欢
  • 2017-03-17
  • 2012-06-26
  • 2023-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-08
  • 2015-12-24
相关资源
最近更新 更多