我对不同的数组值进行了一系列测试:
试验:
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
关于如何检查数组是否为空[]
的最佳做法是什么?如果存在竞争性最佳实践,在哪种情况下最好使用它们?
答案 0 :(得分:10)
空数组仅与其自身严格相等。更准确地说,求值为某个特定空数组的引用的表达式仅严格等于对该相同数组的另一个引用。
这适用于任何类型的对象,而不仅仅是数组,而不仅仅是空数组。没有内置的方法来提供您自己的特殊行为,以便与===
进行平等比较。
与==
的比较是另一个故事,因为隐式执行的类型转换。然而,与对象比较相比,即使使用==
(也就是说,当没有执行类型转换时)遵循相同的规则,它仍然是正确的:对对象的引用仅等于对对象的另一引用对象
另请注意
[] === []
是false
,因为它们是两个不同的空数组。类似地,
[1, 2] === [1, 2]
是false
,原样是
{a: "hello"} === {a: "hello"}
每个数组或对象初始值设定项表达式都会创建一个唯一对象,因此即使它们看起来相同,它们在JavaScript ===
比较规则下也不相等。