JavaScript if以[“”](一个包含空字符串的数组)失败

JavaScript if fails with [""] (an array containing an empty string)

本文关键字:一个 包含空 字符串 失败 数组 if JavaScript      更新时间:2023-09-26

可能重复:
JavaScript比较数组

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

出于某种原因,这会提醒False。我似乎不明白为什么。如何使此警报成为True

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

比较值而不是整个数组

因为它们是对象,您在这里使用隐式引用。一个对象存储在x validable中,您正试图将其与就地创建的对象(具有空字符串元素的数组(进行比较(通过引用(。这是两个对象,每个对象都有自己的引用,因此不等于

我已经更改了您的示例,以执行您想要的操作,同时还提供了在数组中具有任意数量的空字符串的可能性:

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)