在 ES6 之前,我们经常使用数组的 indexOf()
方法来查找某个元素在数组中的下标位置,但是在 ES9 中,这个方法出现了一些问题,可能会带来一些错误。
indexOf() 方法的问题
当传入的查找元素不在数组中存在时,indexOf()
方法会返回 -1
。但是,在 ES9 中,当传入的查找元素为 NaN
时,却会返回错误的下标位置,而不是 -1
。
例如:
const arr = [1, 2, NaN, 4]; console.log(arr.indexOf(NaN)); // 2
在这个例子中,我们期望会返回 -1
,因为 NaN
不在数组中存在。但实际上返回了 2
,这可能会导致一些难以发现和解决的错误。
解决方法
为了避免在 ES9 中出现这种错误,最好的解决方法是使用 Array.prototype.includes()
方法来检查数组中是否包含某个元素。
const arr = [1, 2, NaN, 4]; console.log(arr.includes(NaN)); // true
当查找元素不在数组中存在时,includes()
方法会返回 false
,而不是 -1
。同时,includes()
方法对于 NaN
的处理也是正确的,返回 true
。
示例代码
-- -------------------- ---- ------- -- -- --- --- ----- ---- - --- -- ---- --- ------------------------------- -- - -------------------------------- -- ---- -- --- --- --- ----- ---- - --- -- -- --- ------------------------------- -- -- -------------------------------- -- -----
结论
使用 Array.prototype.includes()
方法来代替 Array.prototype.indexOf()
方法,可以避免在 ES9 中出现查找 NaN
时返回错误的下标位置的问题。这是更加安全、可靠的做法。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/66f7dae9c5c563ced5af00b2