for
- 数组/类数组/字符串
- break终止全部循环
- continue终止本次循环,
- return终止全部循环,但必须要在函数内,否则会报错。
for (let i = 0; i < 10; i++) {
if (i === 5) {
continue
}
console.log(i)
}
function a() {
for (let i = 0; i < 10; i++) {
console.log(i) 0 1 2
if (i === 2) {
return i
}
}
}
console.log(a())
for in
- 数组/字符串/对象
- 遍历key,数组是index,对象为键名
- 遍历所有可枚举属性,包括从原型上继承来的
- 同for, 支持break,continue
- es6方法
const obj = {
name: 123,
}
Object.defineProperties(obj, { age: { value: 18 } })
for (const key in obj) {
if (obj.hasOwnProperty(key)) {
console.log(key + ': ' + obj[key]);
}
}
for of
- 数组/类数组/字符串/Map/Set
- 遍历值
- 同for,支持break,contuine,return
- 普通对象不可以,不是可迭代对象
- 可迭代对象
- es6方法
const arr = [1, 2, 3]
for (const value of arr) {
if (value === 2) continue
console.log(value)
}
for (const item of "sfsfsdf") {
console.log(item)
}
forEach 数组
- 不支持contine break
- return 终止本次循环进入下一次循环,不用放在函数内(与for不同)
- 没有返回值
const arr = [1, 2, 3, 4, 5, 6]
arr.forEach((item, index) => {
if (item === 2) {
return
}
console.log(item)
})
every/some
let arr = [1, 2, 3, 4, 5];
let allPositive = arr.every(function(item) {
return item > 0;
});
console.log(allPositive);
let hasNegative = arr.some(function(item) {
return item < 0;
});
console.log(hasNegative);
map
let arr = [1, 2, 3, 4, 5];
let squares = arr.map(function(item) {
return item * item;
});
console.log(squares);
let arr2 = [{a:1},{a:2}]
console.log(arr.map(i => i.a))
filter
let arr = [1, 2, 3, 4, 5];
let evenNumbers = arr.filter(function(item) {
return item % 2 === 0;
});
console.log(evenNumbers);
reduce/reduceRight
- 遍历累加
- reduce从左到右,reduceRight从右往左
- 第一个参数为执行函数,第二个参数为累加结果
- 累加结果可为字符串,数组,数组都可以
- 执行函数4个参数分别为累加结果,当前项,原数组,当前索引
let arr = [1, 2, 3, 4, 5];
let sum = arr.reduce(function(accumulator, currentValue) {
return accumulator + currentValue;
}, 0);
console.log(sum);
Object.keys()
let obj = {
name: 'John',
age: 30,
job: 'developer'
};
let keys = Object.keys(obj);
console.log(keys);
Object.values()
let obj = {
name: 'John',
age: 30,
job: 'developer'
};
let values = Object.values(obj);
console.log(values);
Object.entries()
let obj = {
name: 'John',
age: 30,
job: 'developer'
};
let entries = Object.entries(obj);
console.log(entries);
while/ do while 乱入这里
- while满足条件才可执行,可能一次都不执行。
- do while必会先执行一次。
- 注意:必须要在代码块内将i改变,不变会无限循环卡死。
let i = 0
while (i < 10) {
console.log(i)
i = i + 2
}
do {
console.log(i)
i = i + 2
} while (i < 10)