ES2016 feature: Array.prototype.includes
Array.prototype.includes is an ECMAScript proposal by Domenic Denicola and Rick Waldron. It is at stage 4 (finished) and part of ECMAScript 2016.
The Array method includes
The Array method includes has the following signature:
Array.prototype.includes(value : any) : boolean
It returns true if value is an element of its receiver (this) and false, otherwise:
> ['a', 'b', 'c'].includes('a')
true
> ['a', 'b', 'c'].includes('d')
false
includes is similar to indexOf – the following two expressions are mostly equivalent:
arr.includes(x)
arr.indexOf(x) >= 0
The main difference is that includes() finds NaN, whereas indexOf() doesn’t:
> [NaN].includes(NaN)
true
> [NaN].indexOf(NaN)
-1
includes does not distinguish between +0 and -0 (which is how almost all of JavaScript works):
> [-0].includes(+0)
true
Typed Arrays will also have a method includes():
let tarr = Uint8Array.of(12, 5, 3);
console.log(tarr.includes(5)); // true
Frequently asked questions
Why is the method called
includesand notcontains?
The latter was the initial choice, but that broke code on the web (MooTools adds this method toArray.prototype).Why is the method called
includesand nothas?hasis used for keys (Map.prototype.has),includesis used for elements (String.prototype.includes). The elements of a Set can be viewed as being both keys and values, which is why there is aSet.prototype.has(and noincludes).
- The ES6 method
String.prototype.includesworks with strings, not characters. Isn’t that inconsistent w.r.t.Array.prototype.includes?
If Arrayincludesworked exactly like stringincludes, it would accept arrays, not single elements. But the twoincludesfollow the example ofindexOf; characters are seen as a special case and strings with arbitrary lengths as the general case.
Further reading
Array.prototype.includes(Domenic Denicola, Rick Waldron)
Comments
Post a Comment