3

可能重复:
JavaScript 比较数组

​var x = [""]
if (x === [""]) { alert(​​"True!") }​​ 
else { alert("False!") }

出于某种原因,这会提醒False. 我似乎无法弄清楚为什么。我该怎么做才能发出此警报True

4

5 回答 5

4

如果两个对象引用完全相同的对象,则它们是相等的。在您的示例中, x 是一个 Object 而 [""] 是另一个。您不能以这种方式比较对象。这个链接可能有用。

于 2013-01-03T16:58:54.913 回答
2

比较值而不是整个数组

...因为它们是对象,并且您在这里使用隐式引用。一个对象存储在您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];
...
于 2013-01-03T16:53:53.163 回答
1

除非它们引用相同的对象,否则无法以这种方式可靠地比较数组。改为这样做:

if ( x[0] == "" )

或者如果你希望它是一个数组:

if ( x.length && x[0] == "" )
于 2013-01-03T16:54:25.297 回答
0

在这种情况下,您可以使用 toString。小心,有一些异常值是行不通的。

var x = [""]
alert(x.toString() == [""].toString()) // true
于 2013-01-03T16:54:37.373 回答
0

在 JavaScript 中,两个对象只有在引用同一个对象时才相等。甚至[] == []false

一个可能缓慢但通用的解决方案是比较两个对象的字符串表示:

JSON.stringify(a1) == JSON.stringify(a2)
于 2013-01-03T16:56:20.330 回答