Js數組includes()


Array.prototype.includes方法返回一個布爾值,表示某個數組是否包含給定的值,與字符串的includes方法類似。該方法屬於 ES7 ,但 Babel 轉碼器已經支持。

[1, 2, 3].includes(2); // true
 
[1, 2, 3].includes(4); // false
 
[1, 2, NaN].includes(NaN); // true

該方法的第二個參數表示搜索的起始位置,默認為 0 。如果第二個參數為負數,則表示倒數的位置,如果這時它大於數組長度(比如第二個參數為 -4 ,但數組長度為 3 ),則會重置為從 0 開始。

[1, 2, 3].includes(3, 3); // false
 
[1, 2, 3].includes(3, -1); // true

 

沒有該方法之前,我們通常使用數組的indexOf方法,檢查是否包含某個值。

if (arr.indexOf(el) !== -1) {
 
// ...
 
}

indexOf方法有兩個缺點,一是不夠語義化,它的含義是找到參數值的第一個出現位置,所以要去比較是否不等於 -1 ,表達起來不夠直觀。二是,它內部使用嚴格相當運算符( === )進行判斷,這會導致對NaN的誤判。

[NaN].indexOf(NaN)
 
// -1
 
includes使用的是不一樣的判斷算法,就沒有這個問題。
 
[NaN].includes(NaN)
 
// true

 

下面代碼用來檢查當前環境是否支持該方法,如果不支持,部署一個簡易的替代版本。

const contains = (() =>
 
Array.prototype.includes
 
? (arr, value) => arr.includes(value)
 
: (arr, value) => arr.some(el => el === value)
 
)();
 
contains(["foo", "bar"], "baz"); // => false

另外, Map 和 Set 數據結構有一個has方法,需要注意與includes區分。
Map 結構的has方法,是用來查找鍵名的,比如Map.prototype.has(key)、WeakMap.prototype.has(key)、Reflect.has(target, propertyKey)。
Set 結構的has方法,是用來查找值的,比如Set.prototype.has(value)、WeakSet.prototype.has(value)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM