Skip to content

迭代

do...while

do...while 语句创建一个执行指定语句的循环,直到 condition 值为 false。 在执行 statement 后检测 condition,所以指定的 statement 至少执行一次。

js
var arr = [1, 2, 3];
var i = 0;
do {
	console.log(arr[i]);
	i++;
} while (i < arr.length);
var arr = [1, 2, 3];
var i = 0;
do {
	console.log(arr[i]);
	i++;
} while (i < arr.length);

for

for 语句用于创建一个循环,它包含了三个可选的表达式,这三个表达式被包围在圆括号之中, 使用分号分隔,后跟一个用于在循环中执行的语句(通常是一个块语句)。

js
var arr = [1, 2, 3];
for (let i = 0; i < arr.length; i++) {
	console.log(arr[i]);
}
var arr = [1, 2, 3];
for (let i = 0; i < arr.length; i++) {
	console.log(arr[i]);
}

for...in 可枚举对象

for...in 语句以任意顺序迭代一个对象的除 Symbol 以外的可枚举属性,包括继承的可枚举属性。

js
var obj = { a: 1, [Symbol("b")]: 2 };

Object.getPrototypeOf(obj).c = 3;
Object.getPrototypeOf(obj)[Symbol("d")] = 4;

for (var key in obj) {
    if (obj.hasOwnProperty(key)) {
        console.log(`自身属性名称:{${key}: ${obj[key]}}`);
    } else {
        console.log(`继承属性名称:{${key}: ${obj[key]}}`);
    }
}

console.log('keys', Object.keys(obj));
console.log('getOwnPropertySymbols', Object.getOwnPropertySymbols(obj));
// 自身属性名称:{a: 1}
// 继承属性名称:{c: 3}
// keys [ 'a' ]
// getOwnPropertySymbols [ Symbol(b) ]
var obj = { a: 1, [Symbol("b")]: 2 };

Object.getPrototypeOf(obj).c = 3;
Object.getPrototypeOf(obj)[Symbol("d")] = 4;

for (var key in obj) {
    if (obj.hasOwnProperty(key)) {
        console.log(`自身属性名称:{${key}: ${obj[key]}}`);
    } else {
        console.log(`继承属性名称:{${key}: ${obj[key]}}`);
    }
}

console.log('keys', Object.keys(obj));
console.log('getOwnPropertySymbols', Object.getOwnPropertySymbols(obj));
// 自身属性名称:{a: 1}
// 继承属性名称:{c: 3}
// keys [ 'a' ]
// getOwnPropertySymbols [ Symbol(b) ]

for...of 可迭代对象

for...of 语句在可迭代对象上创建一个迭代循环,调用自定义迭代钩子,并为每个不同属性的值执行语句

js
// 可迭代对象包括 Array,Map,Set,String,TypedArray,arguments 对象等等
// 实现了可迭代协议 *.prototype[@@iterator]()
// 支持 [...target]和 for...of 循环
// 以插入顺序返回 value

var arr = ['a', 'b', 'c'];
for (const value of arr) {
	console.log(value); // 'a', 'b', 'c'
}
// 可迭代对象包括 Array,Map,Set,String,TypedArray,arguments 对象等等
// 实现了可迭代协议 *.prototype[@@iterator]()
// 支持 [...target]和 for...of 循环
// 以插入顺序返回 value

var arr = ['a', 'b', 'c'];
for (const value of arr) {
	console.log(value); // 'a', 'b', 'c'
}

while

while 语句可以在某个条件表达式为真的前提下,循环执行指定的一段代码, 直到那个表达式不为真时结束循环。

js
let n = 0;
while (n < 3) {
	n++; // 0 1 2
}
let n = 0;
while (n < 3) {
	n++; // 0 1 2
}

forEach

js
Array.prototype.forEach((element, index, array), thisArg);

Map.prototype.forEach((element, index, map), thisArg);

Set.prototype.forEach((element, index, set), thisArg);

NodeList.prototype.forEach((element, index, nodeList), thisArg);

URLSearchParams.prototype.forEach((element, index, nodeList), thisArg);
Array.prototype.forEach((element, index, array), thisArg);

Map.prototype.forEach((element, index, map), thisArg);

Set.prototype.forEach((element, index, set), thisArg);

NodeList.prototype.forEach((element, index, nodeList), thisArg);

URLSearchParams.prototype.forEach((element, index, nodeList), thisArg);

递归

js
(function loop(n) {
	if (n < 3) {
		console.log(n); // 0 1 2
		loop(n + 1);
	}
})(0);
(function loop(n) {
	if (n < 3) {
		console.log(n); // 0 1 2
		loop(n + 1);
	}
})(0);

拓展知识

༼ つ/̵͇̿̿/’̿’̿ ̿ ̿̿ ̿̿◕ _◕ ༽つ/̵͇̿̿/’̿’̿ ̿ ̿̿ ̿̿ ̿̿