[英]Why does indexOf on an empty array does not return -1?
我试图检查数组是否包含给定值:
var arr = [];
if (arr.indexOf(2)) {
console.log('yes');
}
为什么始终满足if条件,尽管arr
不包含值2
? 不应该返回-1
,因此不记录任何内容?
你的病情应该是:
if (arr.indexOf(2) >= 0)
因为在JavaScript中,当合并为布尔值时0
为false
,而任何其他数字都被认为是true
。
因此...... -1
合并为true
。
alert(!!-1)
如果您在浏览器的控制台中运行此代码,您将看到它确实返回-1。 但是,在JavaScript if语句中,-1是真实的,因此警报将执行。 正如这个优秀的JavaScript相等表中所详述的那样,只有很少的值会在if语句中评估为false: false
, 0
, ""
, null
, undefined
和NaN
。
它确实返回-1但Javascript中的-1被认为是“truthy”。
试试这个,看它确实返回-1:
var i = arr.indexOf(2);
console.log(i);
您需要在条件中明确地将非相等性与-1进行比较。
这是你的jsfiddle的更新版本:
http://jsfiddle.net/bmj8y8bj/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.