Deprecation Guide for Enumerable#contains
The Enumerable#contains and Array#contains methods were deprecated in favor of Enumerable#includes and Array#includes
to stay in line with ES standards. See RFC for details.
contains and includes have similar behaviors. A notable exception is how NaN values are handled.
contains uses Strict equality comparison algorithm
for testing inclusion while includes uses SameValueZero algorithm.
Before:
var arr = ['a', 'b', 'c', NaN, undefined, null];
arr.contains('b'); // true
arr.contains('d'); // false
arr.contains(NaN); // false
arr.contains(null); // false
arr.contains(undefined); // false
After:
var arr = ['a', 'b', 'c', NaN, undefined, null];
arr.includes('b'); // true
arr.includes('d'); // false
arr.includes(NaN); // true
arr.includes(null); // true
arr.includes(undefined); // true
includes also allows a second optional parameter startAt to specify the index at which to begin searching:
var arr = ['a', 'b', 'c', NaN];
arr.includes('c', 2); // true
arr.includes('c', -2); // true
Note that the second startAt parameter is only available for Ember.Array because Ember.Enumerable does not rely on index-ordered access.
Enumerable#without and MutableEnumerable#addObject use now internally includes instead of contains. This leads to some minor breaking changes:
Before:
var arr = ['a', 'b'];
arr.addObject(NaN); // ['a', 'b', NaN]
arr.addObject(NaN); // ['a', 'b', NaN, NaN]
arr.without(NaN); // ['a', 'b', NaN, NaN]
After:
var arr = ['a', 'b'];
arr.addObject(NaN); // ['a', 'b', NaN]
arr.addObject(NaN); // ['a', 'b', NaN]
arr.without(NaN); // ['a', 'b']
Addon authors should use ember-runtime-enumerable-includes-polyfill to fix the deprecation in a backwards-compatible way.
Added in PR #13553.