JavaScript如果失败,带[“”](包含空字符串的数组)

时间:2013-01-03 16:49:11

标签: javascript arrays conditional

  

可能重复:
  JavaScript compare arrays

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

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

5 个答案:

答案 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)