可能重复:
JavaScript 比较数组
var x = [""]
if (x === [""]) { alert("True!") }
else { alert("False!") }
出于某种原因,这会提醒False
. 我似乎无法弄清楚为什么。我该怎么做才能发出此警报True
?
可能重复:
JavaScript 比较数组
var x = [""]
if (x === [""]) { alert("True!") }
else { alert("False!") }
出于某种原因,这会提醒False
. 我似乎无法弄清楚为什么。我该怎么做才能发出此警报True
?
如果两个对象引用完全相同的对象,则它们是相等的。在您的示例中, x 是一个 Object 而 [""] 是另一个。您不能以这种方式比较对象。这个链接可能有用。
...因为它们是对象,并且您在这里使用隐式引用。一个对象存储在您x
试图(通过引用)与就地创建的对象(具有空字符串元素的数组)进行比较的变量中。这是两个对象,每个对象都有自己的引用,因此不相等。
我已经更改了您的示例以执行您的操作,同时还提供了在数组中包含任意数量的空字符串的可能性:
if (x.length && x.join && x.join("") === "")
{
alert("True!")
}
else
{
alert("False!")
}
这将返回True!对于任何数组,例如:
var x = [];
var x = [""];
var x = [null];
var x = [undefined];
var x = ["", null, undefined];
...
除非它们引用相同的对象,否则无法以这种方式可靠地比较数组。改为这样做:
if ( x[0] == "" )
或者如果你希望它是一个数组:
if ( x.length && x[0] == "" )
在这种情况下,您可以使用 toString。小心,有一些异常值是行不通的。
var x = [""]
alert(x.toString() == [""].toString()) // true
在 JavaScript 中,两个对象只有在引用同一个对象时才相等。甚至[] == []
是false
。
一个可能缓慢但通用的解决方案是比较两个对象的字符串表示:
JSON.stringify(a1) == JSON.stringify(a2)