认识
if
for
操作
-
终止本次循环
-
通过 continue
for (let i = 0; i < 5; i++) {
if (i == 3) {
continue;
}
console.log(i);
} -
通过 return
let array = [2, 3, 4, 5, 6];
array.forEach((val) => {
if (val == 3) {
return;
}
console.log(val);
});
-
-
终止整个循环
-
通过 break
for (let i = 0; i < 6; i++) {
if (i == 3) {
break;
}
console.log(i);
}
-
-
终止执行(与函数连用)
-
通过 return
function fun() {
for (let i = 0; i < 6; i++) {
if (i == 3) {
return;
}
console.log(i);
}
}
fun();
-
with
with语句 扩展一个语句的作用域链。
语法
with (expression) {
statement
}
- expression: 将给定的表达式添加到在评估语句时使用的作用域链上。表达式周围的括号是必需的。
- statement: 任何语句。要执行多个语句,请使用一个块语句 (
{ ... }
)对这些语句进行分组。
应用场景
-
给一个函数扩充作用域
const obj = {name:'obj'};
function foo(){
const name = 'foo';
with(obj){
console.log(name); // 优先从 with 指定的对象作用域寻找 ---> 其次从函数作用域寻找 ---> 最后从全局作用域寻找
}
}
while
语法
优雅写法一: 当 b
为真时,执行a=b--
和循环体
let a ;
let b = 4;
while((a = b--)){
console.log(a);
}
// 相当于
// let a ;
// let b = 4;
// while(b){
// a = b--;
// console.log(a);
// }
for-in
for-in
语法
for(let key in 数据){
}
用法
对象
for(let key in {}){
key 为 遍历获得键名
}
数组
for(let index in []){
index 为 遍历获得索引
}
特点
对比
for-in
vs for-of
vs forEach
vs Map
-
map
: 只能遍历数组,不能中断,返回值是修改后的数组; -
forEach
: 只能遍历数组; 没有返回值(或认为返回值是undefined
); 无法中途跳出forEach
循环,break
命令或return
命令都不能奏效; -
for...in
循环: 遍历获得键名,且遍历的结果都是字符串(尽管数组元素索引值为Number
类型); 遍历对象自身的和继承的可枚举的属性; 中途可以跳出循环; -
for...of
循环: 遍历获得键值; 中途可以跳出循环; 提供了遍历所有数据结构的统一操作接口, 一个数据结构只要在Symbol.iterator
属性上部署了Iterator
接口, 就可以用for...of
循环遍历它的成员;
for-of
for-of
用于循环遍历数据结构。 一个数据结构只要在Symbol.iterator
属性上部署了Iterator
接口, 就可以用for...of
循环遍历它的成员。也就是说,for...of
循环内部调用的是数据结构的Symbol.iterator
方法。
语法
for(let value of 数据){
}
用法
数组
for(let value of []){
value 为 遍历获得键值
}
特点
对比
for-in
vs for-of
vs forEach
vs Map
-
map
: 只能遍历数组,不能中断,返回值是修改后的数组; -
forEach
: 只能遍历数组; 没有返回值(或认为返回值是undefined
); 无法中途跳出forEach
循环,break
命令或return
命令都不能奏效; -
for...in
循环: 遍历获得键名,且遍历的结果都是字符串(尽管数组元素索引值为Number
类型); 遍历对象自身的和继承的可枚举的属性; 中途可以跳出循环; -
for...of
循环: 遍历获得键值; 中途可以跳出循环; 提供了遍历所有数据结构的统一操作接口, 一个数据结构只要在Symbol.iterator
属性上部署了Iterator
接口, 就可以用for...of
循环遍历它的成员;
switch
do-while
try/catch/finally
语法
try{
console.log('代码正确时执行的')
}catch(error){
console.log('代码报错时执行的')
}finally{
console.log('代码正确和错误都会执行')
}