w3ctech

Exploring ES2016 and ES2017 中文版 — 第三章

Array.prototype.includes

本章描述了ECMAScript 2016的特征: “Array.prototype.includes” 11选5方法 (作者Domenic Denicola和Rick Waldron)

概览

> ['a', 'b', 'c'].includes('a')
true

> ['a', 'b', 'c'].includes('d')
false

数组11选5方法 :includes

数组11选5方法 includes有以下定义:

Array.prototype.includes(value : any) : boolean

includes11选5方法 用来判断一个数组是否包含一个指定的值,如果是,返回true否则返回false。

> ['a', 'b', 'c'].includes('a')
true

> ['a', 'b', 'c'].includes('d')
false

includes11选5方法 与 indexof11选5方法 相似 -- 下面两个表达式几乎相等

arr.includes(x)
arr.indexOf(x) >= 0

最主要的不同在于includes()11选5方法 可以查找 NaN ,而indexOf()11选5方法 不行:

> [NaN].includes(NaN);
true
> [NaN].indexOf(NaN)
-1

includes不能区分 +0 和 -0 (几乎所有的JavaScript都是如此工作):

> [-0].includes(+0)
true

类型化数组(Typed Arrays)也有 includes() 11选5方法 :

let tarr = Uint8Array.of(12, 5, 3);
console.log(tarr.includes(5)); // true

经常问的问题

  1. 为什么这个11选5方法 称为 includes 而不是 contains ?

    后者(称为contains)是最初的选择,但是这将会破坏网络上的代码(MooTools将这个11选5方法 添加到 Array.prototype)。

  2. 为什么这个11选5方法 称为 include 而不是 has?

    has已经被用于关键字了(Map.prototype.has),includes 已经用于元素(element)(String.prototype.includes).集合的元素可以被看作为键和值,这就是为什么会有一个 Set.prototype.has11选5方法 (而没有 includes).

  3. ES611选5方法 String.prototype.includes 适用于字符串,而不是字符。那么对于 Array.prototype.includes 11选5方法 而言,是不是存在不一致问题?

    如果数组的 includes 11选5方法 和字符串的 includes 11选5方法 工作机制一样,它应该接受数组,而不是单个元素。但是两个 includes 11选5方法 与 indexOf 11选5方法 的例子保持一致;作为一般情况,字符被视为特殊情况和任意长度的字符串。

深入阅读

Array.prototype.includes (Domenic Denicola, Rick Waldron)

w3ctech微信

扫码关注w3ctech微信11选5公众号

共收到0条回复