[TOC] #### 1. for 结束循环 --- 众所周知,在 for 循环语句中,遇到 break 会结束循环。但是如何在数组方法 `array.forEach()` 中如何结束循环呢 ? ```javascript const arr = ['html', 'css', 'js', 'vue', 'php'] for (let i = 0; i < arr.length; i++) { // 第一次循环输出: html // 第二次循环输出: css // 第三次循环输出: js console.log(arr[i]); // 第三次循环时,条件成立,停止循环 if (arr[i] == 'js') break; } ``` #### 2. forEach 结束循环 --- forEach 本身无法跳出循环,但是我们可以通过系统的一些强制性方法使其结束循环,如下所示: ```javascript try { arr.forEach(item => { if (item == 'js') throw new Error('结束循环'); }) } catch (error) { console.log(error.message); } ``` 上面写法存在问题,当循环中有一些其他异常时,理应抛出异常,而不是认为是结束循环的异常。改进后: ```javascript try { arr.forEach(item => { console.log(item); if (item == 'css') item + a; // a is not defined if (item == 'js') throw new Error('结束循环'); }) } catch (error) { if (error.message !== '结束循环') { throw error; } } ``` #### 3. 利用高阶函数进行循环 --- Array.some() 方法用于检测数组中的元素是否满足指定条件,有一个满足就停止循环,然后返回 true 也就是闭包函数的返回值为 true 时,停止循环。利用这一特性,可以控制循环中何时返回 true,进行控制何时结束循环 ```javascript const arr = ['html', 'css', 'js', 'vue', 'php'] arr.some(item => { // 循环三次,依次输出 html css js console.log(item); if (item == 'js') { return true } }) ``` Array.every() 方法用于检测数组中的所有元素是否满足指定条件,有一个不满足就停止循环,然后返回 false 同理,通过控制返回值,一样能控制何时结束循环 ```javascript const arr = ['html', 'css', 'js', 'vue', 'php'] arr.every(item => { // 循环三次,依次输出 html css js console.log(item); if (item == 'js') { return false } return true }) ``` #### 4. 开发中到底应该使用哪种方式 --- 开发中,遇到需要循环一个数组,并且当循环到某一个元素时要跳出循环,建议书写方式如下所示: ```javascript const arr = ['html', 'css', 'js', 'vue', 'php'] // 推荐方式一 for (let i = 0; i < arr.length; i++) { if (arr[i] == 'js') { break; } } // 推荐方式二 arr.some(item => { if (item == 'js') { return true } }) ```