[英]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.