var x = [""]
if (x === [""]) { alert("True!") }
else { alert("False!") }
由于某种原因,此警报False
。我似乎无法弄清楚为什么。我该怎么做才能发出此警报True
?
答案 0 :(得分:4)
如果两个对象引用完全相同的对象,则它们是相等的。在您的示例中,x是一个Object而[“”]是另一个。你不能用这种方式比较对象。 This link可能有用。
答案 1 :(得分:2)
...因为它们是对象而你在这里使用隐式引用。一个对象存储在您试图比较(通过引用)的x
valiable中与就地创建的对象(具有空字符串元素的数组)。这些是两个对象,每个对象都有自己的引用,因此不等于。
我已经改变了你的例子来做你正在做的事情,同时也提供了在数组中有任意数量的空字符串的可能性:
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];
...
答案 2 :(得分:1)
除非引用相同的对象,否则无法以这种方式可靠地比较数组。这样做:
if ( x[0] == "" )
或者如果你想让它成为一个数组:
if ( x.length && x[0] == "" )
答案 3 :(得分:0)
在这种情况下你可以使用toString。小心,有一些异常值,这是行不通的。
var x = [""]
alert(x.toString() == [""].toString()) // true
答案 4 :(得分:0)
在JavaScript中,只有两个对象引用同一个对象时它们才相等。即使[] == []
为false
。
一个可能很慢但通用的解决方案是比较两个对象的字符串表示:
JSON.stringify(a1) == JSON.stringify(a2)