在不同浏览器(Chrome、Firefox)和 needle item 位置(在数组开头、中间、结尾)上,Array.prototype.includes() 和 Array.prototype.indexOf() 是否有任何优势?没有特定于浏览器的信息,也没有特定于数组位置的信息,我不询问 NaN 值。 Array.prototype.includes vs. Array.prototype.indexOf。
includes
方法现在已经和 indexOf
方法一样快了。 - Seblorincludes()
比indexOf
更快。
JSperf
在我看来,我更喜欢写if (arr.includes(el)) {}
,因为它比if (arr.indexOf(el) !== -1) {}
更清晰易懂且更易维护。这里有一个JSperf用于比较includes和indexOf方法,它们非常接近,但在最新的Chrome浏览器中,includes()方法将比indexOf更快。
我的理解是,并非所有浏览器都支持includes()方法,尽管这个API更易于理解和维护。
includes
。否则,在使代码更清晰且不需要特定索引时可以使用它。这不是一种你期望有任何有意义差别的情况,includes
只是避免了显式检查返回值的需要。在算法上,两个选项都没有任何优劣之分(浏览器对其中任何一个的优化随时可能改变),因此应该选择清晰易懂的方式。 - ShadowRanger.indexOf()
操作需要检查每个索引的存在(检测空洞),而.includes()
则不需要。但即使如此,也没有任何保证。 - user8897421