携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第9天,点击查看活动详情
这两天在刷算法题的时候,要写一个简单的for循环,但是不需要写每次循环到最后要执行的表达式,一时对该循环包含的表达式的用法有些模糊,还需要查看文档。因此对经常需要使用的for循环做下总结区分,加深认识。
for循环
通过初始条件、结束条件和递增条件来循环执行语句块一定的次数。 常用于遍历数组或类数组
// 遍历数组,根据下标获取到对应元素
const arr = [1, 2, 3]
for (let i = 0; i < arr.length; i++) {
console.log(arr[i]); // '1' '2' '3'
}
//可以用于遍历对象 由于对象没有长度,所以使用 Object.keys() 获取对象的所有属性,以数组形式返回
const obj = {
name: '猫',
sound: '喵喵喵',
}
for (let i = 0, keys = Object.keys(obj); i < keys.length; i++) {
console.log(obj[keys[i]]) //'猫' '喵喵喵'
}
i = 0初始条件,变量声明或者变量赋值语句
i < arr.length结束条件,用于确定每一次循环是否能被执行。满足时继续循环,不满足退出循环。如果忽略不写,默认为真,就必须使用break语句退出循环,否则就是死循环
i++递增条件,每次循环的最后要执行的表达式注:这三个条件表达式都是可选的
for...in
循环遍历对象的属性
const obj = {
name: '猫',
sound: '喵喵喵',
}
for (let key in obj) {
console.log(key) //'name' 'sound'
}
const arr = [7, 8, 9]
for (let index in arr) {
console.log(index); //'0', '1', '2'
}
注: Array 也是一个对象,for ... in循环可以直接循环出Array的索引。 Array 的索引被视为对象的属性,循环得到索引值是String类型而不是Number类型
for...of(ES6新增的循环)
可以用于遍历数组,类数组对象(比如arguments对象、DOM NodeList 对象)和可迭代对象(比如Map 和 Set)。
const arr = [7, 8, 9]
for (let val of arr) {
console.log(val); //'7', '8', '9'
}
forEach
对数组的每个元素执行一次给定的callback函数。用于遍历数组
const arr = [7, 8, 9]
arr.forEach((data,index,arr) => {
console.log(data); //'7', '8', '9'
});
callback 函数的三个参数
data:数组当前项的值
index:数组当前项的索引(可选)
arr:数组对象本身(可选)
引申:循环控制语句
- break
跳出当前循环,继续执行循环后面的语句。如果循环有多层,则break只能跳出一层。
- continue
跳过本次循环,继续执行下一次循环(在for循环,continue之后执行的语句,是循环变量更新语句i++)
注: forEach 不能正确响应 break、continue 语句。