JS中Array.includes()函数是否会遍历全部数组元素?
关于Array.includes()在目标元素位于数组开头时的遍历行为
嘿,这个问题问得很到位!直接给你答案:不会遍历整个数组,Array.includes()是短路求值的,一旦找到匹配的元素就会立刻停止遍历。
为什么会这样?
includes()方法的工作逻辑是从数组的第一个元素(索引0)开始,逐个用**严格相等(===)**的规则检查元素是否和目标值匹配。只要找到第一个符合条件的元素,它就会马上返回true,不会再继续检查后面的元素了——这就像你找东西,第一个抽屉就找到了,肯定不会再翻后面的抽屉对吧?
结合你的代码来看
你的代码里,调用search(['alaa','ali','ammar','omar','alia'],'alaa')时,includes()会先检查索引0的元素'alaa',发现正好匹配目标值,直接返回true,后面的'ali'、'ammar'这些元素根本不会被遍历到。
另外顺便提一句,你的search函数其实可以简化,因为includes()本身就返回布尔值,不用多此一举写if-else:
function search(array, requiredItem) { return array.includes(requiredItem); }
怎么验证这个行为?
如果你想亲眼确认,可以写个小测试,给数组元素加个访问监听,看看哪些元素被访问了:
const testArray = [ // 第一个元素,访问时打印日志 Object.defineProperty({}, 'valueOf', { get() { console.log('检查了第一个元素'); return 'alaa'; } }), // 第二个元素 Object.defineProperty({}, 'valueOf', { get() { console.log('检查了第二个元素'); return 'ali'; } }) ]; testArray.includes('alaa'); // 控制台只会输出"检查了第一个元素",说明第二个元素没被遍历到
内容的提问来源于stack exchange,提问作者ammar ammary
相关产品推荐
相关产品推荐

