通过单词意思也能看出来,此方法用来判断元素是否存在于一个数组中,存在返回true,否则返回false。
['a', 'b', 'c'].includes('a')
['a', 'b', 'c'].includes('d')
与includes非常类似的一个方法是indexOf,比如下面两种用法实现的作用是一样的。
arr.includes(x)
arr.indexOf(x) >= 0
includes方法还可以查找NaN。
indexOf方法却不行。
includes方法不能区分+0和-0。
类型化数组中也同样存在一个includes方法。
let tarr = Uint8Array.of(12, 5, 3);
console.log(tarr.includes(5));
FAQ
- 为什么此方法会被命名为
includes,而不是contains?
contains确实是最初的选择,但是后来某些代码库(MooTools)有了同名的实现,就被放弃了。
因为has方法用于判断键值对(Map.prototype.has),而includes通常用于判断元素(String.prototype.includes)。一个集合(Set)的所有元素是可以通过key和value分别查看的,这也是为什么Set中也没有includes方法了。
String.prototype.includes方法的工作机制是基于字符串,而不是基于字符的。可这是不是就和Array.prototype.includes方法的工作机制不一致了?如果数组的includes方法和String上的保持一致,那么数组的includes方法参数接受的应该是一个数组,而不能是一个单一元素。但是,这两个对象上的includes方法又是模仿的indexOf方法。字符是一种特定情况,字符串一般情况下都是拥有一定的长度。
通过单词意思也能看出来,此方法用来判断元素是否存在于一个数组中,存在返回
true,否则返回false。与
includes非常类似的一个方法是indexOf,比如下面两种用法实现的作用是一样的。includes方法还可以查找NaN。indexOf方法却不行。includes方法不能区分+0和-0。类型化数组中也同样存在一个
includes方法。FAQ
includes,而不是contains?contains确实是最初的选择,但是后来某些代码库(MooTools)有了同名的实现,就被放弃了。has呢?因为
has方法用于判断键值对(Map.prototype.has),而includes通常用于判断元素(String.prototype.includes)。一个集合(Set)的所有元素是可以通过key和value分别查看的,这也是为什么Set中也没有includes方法了。String.prototype.includes方法的工作机制是基于字符串,而不是基于字符的。可这是不是就和Array.prototype.includes方法的工作机制不一致了?如果数组的includes方法和String上的保持一致,那么数组的includes方法参数接受的应该是一个数组,而不能是一个单一元素。但是,这两个对象上的includes方法又是模仿的indexOf方法。字符是一种特定情况,字符串一般情况下都是拥有一定的长度。