了解 ES7 中的 Array.prototype.includes 方法的常见问题
在ES7中,引入了一些新的数组特性,其中Array.prototype.includes方法就是其中之一。该方法主要用于判断一个数组是否包含某个指定的元素,并返回一个布尔值表示是否包含该元素。但是在实际使用过程中,很容易在数组中出现一些常见的问题,下面将详细介绍这些问题及解决方案。
问题一:数组索引不稳定导致结果不准确
由于数组在使用过程中会发生添加、删除、替换等操作,所以在使用Array.prototype.includes方法时需要注意,如果数组的索引不稳定,可能会导致结果不准确。例如:
const arr = ['a', 'b', 'c']; arr.splice(1, 1); console.log(arr.includes('b')); // false
在上面的示例中,我们使用 splice 方法删除了数组中索引为 1 的元素,原来的数组为 ['a', 'b', 'c'],但是在删除之后,数组中的 'c' 会向前移动一个位置,变成 ['a', 'c'],所以结果会返回 false。为了避免这种情况,我们可以使用 indexOf 方法来替代 includes 方法,这样就不会受到索引不稳定的影响了。
问题二:NaN 不被判断为相同元素导致结果不准确
在使用 includes 方法判断数组中是否包含 NaN 时需要注意,在 JavaScript 中,NaN 与任何值都不相等,包括它自己。例如:
console.log(NaN === NaN); // false
如果数组中包含 NaN,则使用 includes 方法时就会出现误判的情况,请看下面的示例:
const arr = [NaN]; console.log(arr.includes(NaN)); // false
为了避免出现误判的情况,我们可以使用 indexOf 方法来进行判断:
const arr = [NaN]; console.log(arr.indexOf(NaN) !== -1); // true
问题三:includes 方法的第二个参数不是索引位置
includes 方法的第二个参数可以指定搜索的起始位置,但是它不是索引位置,而是搜索的位置。例如:
const arr = ['a', 'b', 'c']; console.log(arr.includes('a', 1)); // false
在上面的示例中,我们指定从索引 1 开始搜索,但是实际上它从数组中的第 2 个元素开始搜索,而不是从索引为 1 的元素开始搜索。正确的做法应该是:
const arr = ['a', 'b', 'c']; console.log(arr.includes('a', 2)); // false
在上面的示例中,我们指定从索引 2 开始搜索,结果确实是 false。
总结:
在实际使用过程中,我们需要注意到数组的索引是否稳定,以及包含 NaN 的情况,避免出现误判的情况;同时,我们需要正确使用 includes 方法的第二个参数,不要把它当成索引位置使用。通过以上方法的正确应用,我们可以更好地应用ES7中的Array.prototype.includes方法,并取得更好的效果。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64730066968c7c53b0088e98