一个空数组是否严格等于JavaScript中的任何内容?

jpl*_*s93 4 javascript arrays

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

测试:

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 == {}
Run Code Online (Sandbox Code Playgroud)

结果:

如果x是:

[NaN]
[false]
Run Code Online (Sandbox Code Playgroud)

它没有通过所有测试.

如果x是:

[null]
[]
[[]]
[[[yep, no matter how deep]]]
[undefined]
['']
Run Code Online (Sandbox Code Playgroud)

它通过:

x==0
x==''
x==false
Run Code Online (Sandbox Code Playgroud)

如果x是:

[0]
[{}]
Run Code Online (Sandbox Code Playgroud)

它过去了

x==0
x==false
Run Code Online (Sandbox Code Playgroud)

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

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

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

Poi*_*nty 14

空数组仅与其自身严格相等.更准确地说,求值为某个特定空数组的引用的表达式仅严格等于对该相同数组的另一个引用.

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

==由于隐式执行的类型转换,与另一个故事进行比较是另一个故事.但是,与对象比较相比,它仍然是正确的==(即,当没有执行类型转换时)遵循相同的规则:对对象的引用仅等于对同一对象的另一个引用.

另请注意

[] === []
Run Code Online (Sandbox Code Playgroud)

false因为那些是两个不同的空数组.同样的,

[1, 2] === [1, 2]
Run Code Online (Sandbox Code Playgroud)

就是false这样

{a: "hello"} === {a: "hello"}
Run Code Online (Sandbox Code Playgroud)

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

  • 把它扔掉——因为“0”在 JavaScript 中是假的,你也可以检查 `if (!emptyArray.length)` (3认同)
  • 感谢您简洁明了的回答。我将使用`emptyArray.length == 0`来检查数组是否为空。 (2认同)