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

Javascript 为什么空数组上的indexOf不返回-1?,javascript,arrays,Javascript,Arrays,我试图检查数组是否包含给定值: var arr = []; if (arr.indexOf(2)) { console.log('yes'); } 尽管arr不包含2的值,但为什么总是满足if条件?它不应该返回-1,因此不应该记录任何内容吗?您的情况应该是: if (arr.indexOf(2) >= 0) 因为在JavaScript中,0在合并为布尔值时为false,任何其他数字都被视为true 因此-1合并为true 警报(!!-1)如果在浏览器控制台中运行此代码,您

我试图检查数组是否包含给定值:

var arr = [];

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


尽管
arr
不包含
2
的值,但为什么总是满足if条件?它不应该返回
-1
,因此不应该记录任何内容吗?

您的情况应该是:

if (arr.indexOf(2) >= 0)
因为在JavaScript中,
0
在合并为布尔值时为
false
,任何其他数字都被视为
true

因此<代码>-1合并为
true


警报(!!-1)
如果在浏览器控制台中运行此代码,您将看到它返回-1。但是,在JavaScript if语句中,-1是真实的,因此将执行警报。正如这篇优秀的文章中所详述的,在if语句中只有极少数的值会被评估为false:
false
0
null
undefined
NaN
,它确实返回-1,但在Javascript中-1被认为是“truthy”

试试看,它确实返回了-1:

var i = arr.indexOf(2);
console.log(i);
您需要在条件中显式地将非相等项与-1进行比较

下面是您的JSFIDLE的更新版本:

在JavaScript中,布尔(-1)==true
,因此
布尔([].indexof(2))==true
,但
布尔([2].indexof(2))==false