我正在尝试检查数组是否包含给定值:
var arr = [];
if (arr.indexOf(2)) {
console.log('yes');
}
为什么始终符合if条件,但arr
不包含值2
?它不应该返回-1
,因此不应记录任何内容吗?
答案 0 :(得分:3)
你的病情应该是:
if (arr.indexOf(2) >= 0)
因为在JavaScript中,0
在合并为布尔值时为false
,而任何其他数字都被视为true
。
因此...... -1
合并为true
。
alert(!!-1)

答案 1 :(得分:3)
如果您在浏览器的控制台中运行此代码,则会看到 返回-1。但是,在JavaScript if语句中,-1是真实的,因此警报将执行。正如此优秀JavaScript equality table中所详述的那样,只有极少数值会在if语句中评估为false:false
,0
,""
,{ {1}},null
和undefined
。
答案 2 :(得分:1)
它确实返回-1但Javascript中的-1被视为" truthy"。
尝试这一点,看它确实正在返回-1:
var i = arr.indexOf(2);
console.log(i);
您需要在条件中明确地将不相等性与-1进行比较。
这是你的jsfiddle的更新版本:
http://jsfiddle.net/bmj8y8bj/