您的位置:首页 » 分类: JavaScript & ES2015 (ES6) » 文章: ES2016 新特性:Array.prototype.includes

ES2016 新特性:Array.prototype.includes

小编推荐:掘金是一个面向程序员的高质量技术社区,从 一线大厂经验分享到前端开发最佳实践,无论是入门还是进阶,来掘金你不会错过前端开发的任何一个技术干货。

本章介绍由 Domenic Denicola 和 Rick Waldron 提议的 ECMAScript 2016 新特性 Array.prototype.includes

概述

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

数组方法 includes

数组方法 includes 有以下签名:

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

如果某个数组中包含 value 这个元素,则返回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

TypedArray 同样有 includes() 方法:

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

常见问题

  • 为什么这个方法叫做 includes 而不是 contains ?
    后者(即:contains)是最初的选择,但是这将破坏了网上现有的代码( 例如:MooTools 将此方法添加到了 Array.prototype 中)。
  • 为什么这个方法叫做 includes 而不是 has ?
    has 已被用作关键字了(Map.prototype.has),
    includes 用于元素(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)

原文链接:http://exploringjs.com/es2016-es2017/ch_array-prototype-includes.html

关注WEB前端开发官方公众号

关注国内外最新最好的前端开发技术干货,获取最新前端开发资讯,致力于打造高质量的前端技术分享公众号

发表评论

电子邮件地址不会被公开。 必填项已用*标注