ES7在ES6的基礎(chǔ)上添加了三項內(nèi)容:求冪運算符(**)Array.prototype.includes()方法、函數(shù)作用域中嚴格模式的變更。
1.Array.prototype.includes()方法
includes()的作用,是查找一個值在不在數(shù)組里,若在,則返回true,反之返回false。 基本用法:
['a', 'b', 'c'].includes('a')// true
['a', 'b', 'c'].includes('d')// false
Array.prototype.includes()方法接收兩個參數(shù):要搜索的值和搜索的開始索引。當?shù)诙€參數(shù)被傳入時,該方法會從索引處開始往后搜索(默認索引值為0)。若搜索值在數(shù)組中存在則返回true,否則返回false。 請看下面示例代碼:
['a', 'b', 'c', 'd'].includes('b')? ? ? ? // true
['a', 'b', 'c', 'd'].includes('b', 1)? ? ?// true
['a', 'b', 'c', 'd'].includes('b', 2)? ? // false
那么,我們會聯(lián)想到ES6里數(shù)組的另一個方法indexOf,下面的示例代碼是等效的:
['a', 'b', 'c'].includes('a')? ? ? ? ? ? ?//true
['a', 'b', 'c'].indexOf('a') > -1? ? ? //true
比較兩者的優(yōu)缺點和使用場景:
? ? 簡便性:
? ? ? ?從這一點上來說,includes略勝一籌。熟悉indexOf的都知道,indexOf返回的是某個元素在數(shù)組中的下標值,若想判斷某個元素是否在數(shù)組里,我們還需要做額外的處理,即判斷該返回值是否>-1。而includes則不用,它直接返回的便是Boolean型的結(jié)果。
? ? ?精確性:
? ? ? ?兩者使用的都是 === 操作符來做值的比較。但是includes()方法有一點不同,兩個NaN被認為是相等的,即使在NaN === NaN結(jié)果是false的情況下。這一點和indexOf()的行為不同,indexOf()嚴格使用===判斷。請看下面示例代碼:
let? demo= [1, NaN, 2, 3]
demo.indexOf(NaN)? ? ? ? //-1? ? 找到就返回-1
demo.includes(NaN)? ? ? ?//true
2.求冪運算符(**)
? ?基本用法:
? ? ? ? 3 ** 2? ? ? ? ? // 9
? ?效果同:
? ? ? ? ?Math.pow(3, 2)? ? ? ?// 9
**的意思是什么?
? ? ? ?** 是一個用于求冪的中綴算子,比較可知,中綴符號比函數(shù)符號更簡潔,這也使得它更為可取。?