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
。