为什么空数组上的indexOf不返回-1?

时间:2015-03-14 21:41:49

标签: javascript arrays

我正在尝试检查数组是否包含给定值:

var arr = [];

if (arr.indexOf(2)) {
    console.log('yes');
}

Fiddle

为什么始终符合if条件,但arr不包含值2?它不应该返回-1,因此不应记录任何内容吗?

3 个答案:

答案 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:false0"",{ {1}},nullundefined

答案 2 :(得分:1)

它确实返回-1但Javascript中的-1被视为" truthy"。

尝试这一点,看它确实正在返回-1:

var i = arr.indexOf(2);
console.log(i);

您需要在条件中明确地将不相等性与-1进行比较。

这是你的jsfiddle的更新版本:
http://jsfiddle.net/bmj8y8bj/