es6數(shù)組includes()用法實例分析
本文實例講述了es6數(shù)組includes()用法。分享給大家供大家參考,具體如下:
Array.prototype.includes方法返回一個布爾值,表示某個數(shù)組是否包含給定的值,與字符串的includes方法類似。ES2016引入了該方法。
[1, 2, 3].includes(2) // true [1, 2, 3].includes(4) // true [1, 2, NaN].includes(NaN) // true
該方法的第二個參數(shù)表示搜索的起始位置,默認(rèn)為0。如果第二個參數(shù)為負(fù)數(shù),則表示倒數(shù)的位置,如果這時它大于數(shù)組長度(比如第二個參數(shù)為-4, 但數(shù)組長度為3),則會重置為0開始。
[1, 2, 3].includes(3, 3); // false [1, 2, 3].includes(3, -1); // true
沒有該方法之前,我們通常使用數(shù)組的indexOf方法,檢查是否包含某個值。
if (arr.indexOf(el) !== -1) { // ... }
indexOf方法有兩個缺點,一是不夠語義化,它的含義是找到參數(shù)值的第一個出現(xiàn)位置,所以要去比較是否不等于-1,表達(dá)起來不夠直觀。二是,它內(nèi)部使用嚴(yán)格相等運算符進(jìn)行判斷,這會導(dǎo)致對NaN的誤判。
[NaN].indexOf(NaN) // -1
includes使用的是不一樣的判斷算法,就沒有這個問題。
[NaN].includes(NaN) // true
下面代碼用來檢查當(dāng)前環(huán)境是否支持該方法,如果不支持,部署一個簡易的替代版本。
const contains = (() => Array.prototype.includes ? (arr, value) => arr.includes(value) :(arr, value) => arr.some(el => el === value) )()
另外,Map和Set數(shù)據(jù)結(jié)構(gòu)有一個has方法需要注意與includes區(qū)分。
-Map結(jié)構(gòu)的has方法,是用來查找鍵名的,比如Map.prototype.has(key),
WeakMap.prototype.has(key), Reflect.has(target, propertyKey)
-Set結(jié)構(gòu)的has方法,是用來查找值的,比如Set.prototype.has(value),
WeakSet.prototype.has(value)
感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運行工具:http://tools.jb51.net/code/HtmlJsRun測試上述代碼運行效果。
更多關(guān)于JavaScript相關(guān)內(nèi)容可查看本站專題:《javascript面向?qū)ο笕腴T教程》、《JavaScript錯誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運算用法總結(jié)》
希望本文所述對大家JavaScript程序設(shè)計有所幫助。
相關(guān)文章
ES6學(xué)習(xí)筆記之字符串、數(shù)組、對象、函數(shù)新增知識點實例分析
這篇文章主要介紹了ES6學(xué)習(xí)筆記之字符串、數(shù)組、對象、函數(shù)新增知識點,結(jié)合實例形式分析了ES6字符串、數(shù)組、對象、函數(shù)新增知識點、使用技巧與操作注意事項,需要的朋友可以參考下2020-01-01JS前端面試必備——基本排序算法原理與實現(xiàn)方法詳解【插入/選擇/歸并/冒泡/快速排序】
這篇文章主要介紹了JS前端面試基本排序算法原理與實現(xiàn)方法,結(jié)合實例形式詳細(xì)分析了JS常見的基本排序算法相關(guān)原理、實現(xiàn)方法、時間復(fù)雜度及操作注意事項,需要的朋友可以參考下2020-02-02JavaScript中l(wèi)ocalStorage對象存儲方式實例分析
這篇文章主要介紹了JavaScript中l(wèi)ocalStorage對象存儲方式,結(jié)合實例形式分析了localStorage對象存儲數(shù)據(jù)的原理及操作技巧,需要的朋友可以參考下2017-01-01