本章描述了ECMAScript 2016的特征: “Array.prototype.includes” 方法(作者Domenic Denicola和Rick Waldron)
> ['a', 'b', 'c'].includes('a')
true
> ['a', 'b', 'c'].includes('d')
false
数组方法includes有以下定义:
Array.prototype.includes(value : any) : boolean
includes方法用来判断一个数组是否包含一个指定的值,如果是,返回true否则返回false。
> ['a', 'b', 'c'].includes('a')
true
> ['a', 'b', 'c'].includes('d')
false
includes方法与 indexof方法相似 -- 下面两个表达式几乎相等
arr.includes(x)
arr.indexOf(x) >= 0
最主要的不同在于includes()方法可以查找 NaN ,而indexOf()方法不行:
> [NaN].includes(NaN);
true
> [NaN].indexOf(NaN)
-1
includes不能区分 +0 和 -0 (几乎所有的JavaScript都是如此工作):
> [-0].includes(+0)
true
类型化数组(Typed Arrays)也有 includes() 方法:
let tarr = Uint8Array.of(12, 5, 3);
console.log(tarr.includes(5)); // true
经常问的问题
为什么这个方法称为 includes 而不是 contains ?
 后者(称为contains)是最初的选择,但是这将会破坏网络上的代码(MooTools将这个方法添加到 Array.prototype)。
为什么这个方法称为 include 而不是 has?
 has已经被用于关键字了(Map.prototype.has),includes 已经用于元素(element)(String.prototype.includes).集合的元素可以被看作为键和值,这就是为什么会有一个 Set.prototype.has方法(而没有 includes).
ES6方法 String.prototype.includes 适用于字符串,而不是字符。那么对于 Array.prototype.includes 方法而言,是不是存在不一致问题?
 如果数组的 includes 方法和字符串的 includes 方法工作机制一样,它应该接受数组,而不是单个元素。但是两个 includes 方法与 indexOf 方法的例子保持一致;作为一般情况,字符被视为特殊情况和任意长度的字符串。
Array.prototype.includes (Domenic Denicola, Rick Waldron)

扫码关注w3ctech微信公众号
共收到0条回复