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

ES2016 新特性:Array.prototype.includes

小编推荐:掘金是一个高质量的技术社区,从 ECMAScript 6 到 Vue.js,性能优化到开源类库,让你不错过前端开发的每一个技术干货。各大应用市场搜索「掘金」即可下载APP,技术干货尽在掌握..

本章介绍由 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

正文完。下面还有一个推广让最好的人才遇见更好的机会!

互联网行业的年轻人,他们面对着怎样的职业瓶颈、困惑与未来选择?过去,这鲜有人关心。资深的职场人,也多半优先选择熟人去推荐机会。

100offer致力于改变现状,帮互联网行业最好的人才发现更好的机会。使用 100offer.com 或 100offer App ,可以一周内获得中国、美国等数千家优质企业的工作机会。

马上去遇见更好的机会
推广结束

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

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

发表评论

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