JavaScript if以[“”](一个包含空字符串的数组)失败
JavaScript if fails with [""] (an array containing an empty string)
可能重复:
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)
相关文章:
- Angular js-返回一个包含类似
- 如何创建一个包含许多数组和数据的json对象
- HTML提交表单,同时包含空字段检查和按钮隐藏
- jQuery.load()是另一个包含prism.js的页面
- 在Django中,可以在视图中创建一个包含js的变量,然后在循环模板标记中使用它
- 在Knockout js中创建一个包含多行的表,而不需要推送
- 使用video-js构建一个包含字符串的HTML视频
- 如何使用d3.layout.cloud.js创建一个包含单词及其权重的csv的单词云
- 如何使用Typescript创建一个包含对象的字段的新对象
- 如果上一个
为空,则向上移动表数据 d - 从chrome扩展创建一个包含POST数据的链接
- Angular Meteor教程ng包含空
- Javascript:如何制作一个包含4个具有相同属性的对象的数组
- 如果“上一个”为空,则清除下一个嵌套的选择标记
- JS函数返回一个包含对象的数组
- 编写一个包含一个大写字母和六个数字的javascript表达式
- 我正在从API提取一个包含视频的Object标签.如何在javascript中暂停视频
- 我该如何在Rails中使下拉列表重定向到另一个包含特定信息的页面
- 将两个唯一对象推到一个空数组中会产生一个包含两个等效对象的数组
- JavaScript if以[“”](一个包含空字符串的数组)失败