在 ECMAScript 2016 中,新增了 Array.prototype.includes()
方法,该方法用于判断一个数组是否包含某个元素。该方法是对 ES5 中 Array.prototype.indexOf()
方法的补充,它解决了 indexOf()
方法的一些不足之处,同时也更加简单易用。
语法
---------------------------- -----------
searchElement
:要搜索的元素。fromIndex
:可选参数,搜索的起始位置。如果省略该参数,则从数组的起始位置开始搜索。如果该参数是负数,则从数组的末尾开始搜索。
返回值
如果数组中包含指定的元素,则返回 true
,否则返回 false
。
示例代码
----- --- - --- -- -- -- --- ----------------------------- -- ---- ----------------------------- -- ----- --------------------------- ---- -- ----- --------------------------- ----- -- ----
从示例代码中可以看出,includes()
方法非常简单易用,可以轻松地判断一个数组是否包含指定的元素。
深入理解
与 indexOf()
方法相比,includes()
方法的优势在于,它可以正确地处理 NaN
值和 -0
值。在 indexOf()
方法中,如果数组中包含 NaN
值或者 -0
值,会出现一些问题。
处理 NaN 值
在 indexOf()
方法中,如果数组中包含 NaN
值,则无法正确地判断,因为在 JavaScript 中,NaN
不等于任何值,包括它自己。例如:
----- --- - --- -- ---- -- --- ------------------------------ -- --
可以看到,indexOf()
方法无法正确地判断数组中是否包含 NaN
值。而 includes()
方法则可以正确地处理 NaN
值。例如:
----- --- - --- -- ---- -- --- ------------------------------- -- ----
处理 -0 值
在 JavaScript 中,-0
和 +0
是不同的值,但是它们在一些情况下是相等的。在 indexOf()
方法中,如果数组中包含 -0
值,则无法正确地判断,因为 -0
和 +0
在 indexOf()
方法中被认为是相等的。例如:
----- --- - --- -- --- -- --- ----------------------------- -- - ----------------------------- -- -
可以看到,indexOf()
方法无法正确地判断数组中是否包含 -0
值。而 includes()
方法则可以正确地处理 -0
值。例如:
----- --- - --- -- --- -- --- ------------------------------ -- ---- ------------------------------ -- ----
指导意义
Array.prototype.includes()
方法的出现,使得我们在判断一个数组是否包含某个元素时更加方便。同时,它也解决了 indexOf()
方法在处理 NaN
值和 -0
值时的问题,让我们的代码更加健壮。
在实际开发中,我们可以使用 includes()
方法来判断一个数组中是否包含某个元素,从而避免使用 indexOf()
方法时出现的一些问题。例如:
-- ----------------------- - -- -- --------- -
同时,我们也可以使用 includes()
方法来判断一个数组中是否包含重复的元素,例如:
----- --- - --- -- -- -- --- -- ----------- --- --- -------------- - -------------------------- -
结论
Array.prototype.includes()
方法是 ECMAScript 2016 中的一个新特性,它用于判断一个数组是否包含某个元素。与 indexOf()
方法相比,includes()
方法更加简单易用,同时也可以正确地处理 NaN
值和 -0
值,让我们的代码更加健壮。在实际开发中,我们可以使用 includes()
方法来判断一个数组中是否包含某个元素,从而避免使用 indexOf()
方法时出现的一些问题。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/672804382e7021665e1ed17f