Baseline Widely available
for...of
è¯å¥æ§è¡ä¸ä¸ªå¾ªç¯ï¼è¯¥å¾ªç¯å¤çæ¥èªå¯è¿ä»£å¯¹è±¡çå¼åºåãå¯è¿ä»£å¯¹è±¡å
æ¬å
置对象çå®ä¾ï¼ä¾å¦ Array
ãString
ãTypedArray
ãMap
ãSet
ãNodeList
ï¼ä»¥åå
¶ä» DOM éåï¼ï¼è¿å
æ¬ arguments
对象ãç±çæå¨å½æ°çæççæå¨ï¼ä»¥åç¨æ·å®ä¹çå¯è¿ä»£å¯¹è±¡ã
const array1 = ["a", "b", "c"];
for (const element of array1) {
console.log(element);
}
// Expected output: "a"
// Expected output: "b"
// Expected output: "c"
è¯æ³
for (variable of iterable)
statement
variable
æ¯æ¬¡è¿ä»£æ¶ä»åºåæ¥æ¶ä¸ä¸ªå¼ãå¯ä»¥æ¯ç¨ const
ãlet
æ var
声æçåéï¼ä¹å¯ä»¥æ¯èµå¼ç®æ ï¼ä¾å¦ä¹å声æçåéãå¯¹è±¡å±æ§æè§£ææ¨¡å¼ï¼ãä½¿ç¨ var
声æçåéä¸ä¼å±éäºå¾ªç¯å
é¨ï¼å³å®ä»¬ä¸ for...of
å¾ªç¯æå¨çä½ç¨åç¸åã
iterable
å¯è¿ä»£å¯¹è±¡ãå¾ªç¯æä½çåºåå¼çæ¥æºã
statement
æ¯æ¬¡è¿ä»£åæ§è¡çè¯å¥ãå¯ä»¥å¼ç¨ variable
ãå¯ä»¥ä½¿ç¨åè¯å¥æ¥æ§è¡å¤ä¸ªè¯å¥ã
for...of
å¾ªç¯æé¡ºåºé个å¤çä»å¯è¿ä»£å¯¹è±¡è·åçå¼ã循ç¯å¯¹å¼çæ¯æ¬¡æä½è¢«ç§°ä¸ºä¸æ¬¡è¿ä»£ï¼èå¾ªç¯æ¬èº«è¢«ç§°ä¸ºè¿ä»£å¯è¿ä»£å¯¹è±¡ãæ¯æ¬¡è¿ä»£é½ä¼æ§è¡å¯è½å¼ç¨å½ååºåå¼çè¯å¥ã
å½ for...of
循ç¯è¿ä»£ä¸ä¸ªå¯è¿ä»£å¯¹è±¡æ¶ï¼å®é¦å
è°ç¨å¯è¿ä»£å¯¹è±¡ç Symbol.iterator]()
æ¹æ³ï¼è¯¥æ¹æ³è¿åä¸ä¸ªè¿ä»£å¨ï¼ç¶åéå¤è°ç¨çæå¨ç next()
æ¹æ³ï¼ä»¥çæè¦åé
ç» variable
çå¼çåºåã
for...of
循ç¯å¨è¿ä»£å¨å®ææ¶éåºï¼å³è¿ä»£å¨ç next()
æ¹æ³è¿åä¸ä¸ªå
å« done: true
ç对象ï¼ãä½ ä¹å¯ä»¥ä½¿ç¨æ§å¶æµè¯å¥æ¥æ¹åæ£å¸¸çæ§å¶æµç¨ãbreak
è¯å¥éåºå¾ªç¯å¹¶è·³è½¬å°å¾ªç¯ä½åçç¬¬ä¸æ¡è¯å¥ï¼è continue
è¯å¥è·³è¿å½åè¿ä»£çå©ä½è¯å¥ï¼ç»§ç»è¿è¡ä¸ä¸æ¬¡è¿ä»£ã
妿 for...of
å¾ªç¯æåéåºï¼ä¾å¦éå° break
è¯å¥ææåºé误ï¼ï¼åä¼è°ç¨è¿ä»£å¨ç return()
æ¹æ³æ¥æ§è¡ä»»ä½æ¸
çä»»å¡ã
for...of
ç variable
é¨åå¯ä»¥æ¥åä»»ä½å¨ =
è¿ç®ç¬¦ä¹åçå
容ãåªè¦å¨å¾ªç¯ä½å
é¨ä¸éæ°èµå¼ï¼å¯ä»¥å¨è¿ä»£ä¹é´æ´æ¹ï¼å 为å®ä»¬æ¯ä¸¤ä¸ªç¬ç«çåéï¼ï¼ä½ å¯ä»¥ä½¿ç¨ const
æ¥å£°æåéãå¦åï¼ä½ å¯ä»¥ä½¿ç¨ let
ã
const iterable = [10, 20, 30];
for (let value of iterable) {
value += 1;
console.log(value);
}
// 11
// 21
// 31
夿³¨ï¼ æ¯æ¬¡è¿ä»£é½ä¼å建ä¸ä¸ªæ°çåéãå¨å¾ªç¯ä½å é¨éæ°èµå¼åéä¸ä¼å½±åå¯è¿ä»£å¯¹è±¡ï¼å¨æ¬ä¾ä¸ï¼æ¯ä¸ä¸ªæ°ç»ï¼çåå§å¼ã
ä½ å¯ä»¥ä½¿ç¨è§£ææ¥åé
å¤ä¸ªå±é¨åéï¼æè
使ç¨å±æ§è®¿é®å¨ï¼å¦ for (x.y of iterable)
ï¼æ¥ç»å¯¹è±¡å±æ§èµå¼ã
ç¶èï¼æä¸æ¡ç¹å«çè§åç¦æ¢ä½¿ç¨ async
ä½ä¸ºåéåãè¿æ¯æ æè¯æ³ï¼
let async;
for (async of [1, 2, 3]); // SyntaxError: The left-hand side of a for-of loop may not be 'async'.
è¿æ¯ä¸ºäºé¿å
䏿æä»£ç for (async of => {};;)
åºç°è¯æ³æ§ä¹ï¼è¯¥ä»£ç æ¯ä¸ä¸ª for
循ç¯ã
const iterable = [10, 20, 30];
for (const value of iterable) {
console.log(value);
}
// 10
// 20
// 30
è¿ä»£å符串
å符串å°ä¼æ Unicode ç ä½è¿ä»£ã
const iterable = "boo";
for (const value of iterable) {
console.log(value);
}
// "b"
// "o"
// "o"
è¿ä»£ç±»ååæ°ç»
const iterable = new Uint8Array([0x00, 0xff]);
for (const value of iterable) {
console.log(value);
}
// 0
// 255
è¿ä»£ Map
const iterable = new Map([
["a", 1],
["b", 2],
["c", 3],
]);
for (const entry of iterable) {
console.log(entry);
}
// ['a', 1]
// ['b', 2]
// ['c', 3]
for (const [key, value] of iterable) {
console.log(value);
}
// 1
// 2
// 3
è¿ä»£ Set
const iterable = new Set([1, 1, 2, 2, 3, 3]);
for (const value of iterable) {
console.log(value);
}
// 1
// 2
// 3
è¿ä»£åæ°å¯¹è±¡
ä½ å¯ä»¥è¿ä»£ arguments
å¯¹è±¡æ¥æ£æ¥ä¼ éç»å½æ°çææåæ°ã
function foo() {
for (const value of arguments) {
console.log(value);
}
}
foo(1, 2, 3);
// 1
// 2
// 3
è¿ä»£ NodeList
ä¸é¢ç示ä¾éè¿è¿ä»£ä¸ä¸ª NodeList
DOM éåï¼ä¸ºç´æ¥ä½äº <article>
å
ç´ ä¸çæ®µè½æ·»å ä¸ä¸ª read
ç±»ã
const articleParagraphs = document.querySelectorAll("article > p");
for (const paragraph of articleParagraphs) {
paragraph.classList.add("read");
}
è¿ä»£ç¨æ·å®ä¹çå¯è¿ä»£å¯¹è±¡
è¿ä»£å¸¦æè¿åèªå®ä¹è¿ä»£å¨ç [Symbol.iterator]()
æ¹æ³ç对象ï¼
const iterable = {
[Symbol.iterator]() {
let i = 1;
return {
next() {
if (i <= 3) {
return { value: i++, done: false };
}
return { value: undefined, done: true };
},
};
},
};
for (const value of iterable) {
console.log(value);
}
// 1
// 2
// 3
è¿ä»£å¸¦æ [Symbol.iterator]()
çæå¨æ¹æ³ç对象ï¼
const iterable = {
*[Symbol.iterator]() {
yield 1;
yield 2;
yield 3;
},
};
for (const value of iterable) {
console.log(value);
}
// 1
// 2
// 3
å¯è¿ä»£è¿ä»£å¨ï¼å¸¦æè¿å this
ç [Symbol.iterator]()
æ¹æ³çè¿ä»£å¨ï¼æ¯ä¸ç§ç¸å½å¸¸è§çææ¯ï¼ç¨æ¥ä½¿è¿ä»£å¨å¨ææå¯è¿ä»£å¯¹è±¡çè¯æ³ä¸ä½¿ç¨ï¼ä¾å¦ for...of
ã
let i = 1;
const iterator = {
next() {
if (i <= 3) {
return { value: i++, done: false };
}
return { value: undefined, done: true };
},
[Symbol.iterator]() {
return this;
},
};
for (const value of iterator) {
console.log(value);
}
// 1
// 2
// 3
è¿ä»£çæå¨
function* source() {
yield 1;
yield 2;
yield 3;
}
const generator = source();
for (const value of generator) {
console.log(value);
}
// 1
// 2
// 3
æåéåº
å¨ç¬¬ä¸ä¸ªå¾ªç¯ä¸æ§è¡ break
è¯å¥ä¼å¯¼è´å¾ªç¯æåéåºãè¿ä»£å¨å°æªå®æï¼å æ¤ç¬¬äºä¸ªå¾ªç¯å°ä»ç¬¬ä¸ä¸ªå¾ªç¯åæ¢çå°æ¹ç»§ç»æ§è¡ã
const source = [1, 2, 3];
const iterator = source[Symbol.iterator]();
for (const value of iterator) {
console.log(value);
if (value === 1) {
break;
}
console.log("è¿ä¸ªå符串ä¸ä¼è¢«è¾åºã");
}
// 1
// å¦ä¸ä¸ªä½¿ç¨ç¸åè¿ä»£å¨ç循ç¯ä»ä¸ä¸ä¸ªå¾ªç¯ä¸æçå°æ¹ç»§ç»ã
for (const value of iterator) {
console.log(value);
}
// 2
// 3
// è¿ä»£å¨å·²ç¨å®ã该循ç¯ä¸ä¼æ§è¡ä»»ä½è¿ä»£ã
for (const value of iterator) {
console.log(value);
}
// [没æè¾åº]
çæå¨å®ç°äº return()
æ¹æ³ï¼å½å¾ªç¯éåºæ¶ï¼è¯¥æ¹æ³ä¼ä½¿çæå¨å½æ°æåè¿åãè¿ä½¿å¾çæå¨å¨å¾ªç¯ä¹é´ä¸å¯éå¤ä½¿ç¨ã
function* source() {
yield 1;
yield 2;
yield 3;
}
const generator = source();
for (const value of generator) {
console.log(value);
if (value === 1) {
break;
}
console.log("è¿ä¸ªå符串ä¸ä¼è¢«è¾åºã");
}
// 1
// çæå¨å·²ç¨å®ã该循ç¯ä¸ä¼æ§è¡ä»»ä½è¿ä»£ã
for (const value of generator) {
console.log(value);
}
// [没æè¾åº]
for...of
ä¸ for...in
ä¹é´çåºå«
for...in
å for...of
è¯å¥é½ç¨äºè¿ä»£æä¸ªå
容ï¼å®ä»¬ä¹é´ç主è¦åºå«å¨äºè¿ä»£ç对象ã
for...in
è¯å¥ç¨äºè¿ä»£å¯¹è±¡ç坿䏾åç¬¦ä¸²å±æ§ï¼è for...of
è¯å¥ç¨äºè¿ä»£å¯è¿ä»£å¯¹è±¡å®ä¹çè¦è¿è¡è¿ä»£çå¼ã
ä¸é¢ç示ä¾å±ç¤ºäºå¨è¿ä»£ Array
æ¶ï¼for...of
循ç¯å for...in
循ç¯ä¹é´çåºå«ã
Object.prototype.objCustom = function () {};
Array.prototype.arrCustom = function () {};
const iterable = [3, 5, 7];
iterable.foo = "hello";
for (const i in iterable) {
console.log(i);
}
// "0"ã"1"ã"2"ã"foo"ã"arrCustom"ã"objCustom"
for (const i in iterable) {
if (Object.hasOwn(iterable, i)) {
console.log(i);
}
}
// "0" "1" "2" "foo"
for (const i of iterable) {
console.log(i);
}
// 3 5 7
iterable
对象继æ¿äº objCustom
å arrCustom
屿§ï¼å 为å
¶ååé¾ä¸åæ¶å
å«äº Object.prototype
å Array.prototype
ã
for...in
循ç¯ä»
æå°äº iterable
对象ç坿䏾屿§ãå®ä¸ä¼æå°æ°ç»ä¸çå
ç´ 3
ã5
ã7
æ "hello"
ï¼å 为å®ä»¬ä¸æ¯å±æ§ï¼èæ¯å¼ã宿å°äºæ°ç»çç´¢å¼ä»¥å arrCustom
å objCustom
ï¼å®ä»¬æ¯å®é
ç屿§ãå¦æä½ å¯¹ä¸ºä»ä¹è¿ä»£è¿äºå±æ§æå°å°æï¼å¯ä»¥æ¥çå
³äºæ°ç»è¿ä»£å for...in
å·¥ä½åççæ´è¯¦ç»è§£éã
第äºä¸ªå¾ªç¯ä¸ç¬¬ä¸ä¸ªå¾ªç¯ç±»ä¼¼ï¼ä½å®ä½¿ç¨ Object.hasOwn()
æ¥æ£æ¥æ¾å°ç坿䏾屿§æ¯å¦ä¸ºå¯¹è±¡çèªæå±æ§ï¼å³éç»§æ¿å±æ§ã妿æ¯ï¼åæå°è¯¥å±æ§ã屿§ 0
ã1
ã2
å foo
被æå°ï¼å 为å®ä»¬æ¯èªæå±æ§ã屿§ arrCustom
å objCustom
没æè¢«æå°ï¼å 为å®ä»¬æ¯ç»§æ¿å±æ§ã
for...of
循ç¯è¿ä»£å¹¶æå° iterable
æç
§æ°ç»ï¼æ°ç»æ¯å¯è¿ä»£çï¼å®ä¹è¦è¿è¡è¿ä»£çå¼ã对象çå
ç´ 3
ã5
ã7
被æå°ï¼ä½å¯¹è±¡ç屿§æ²¡æè¢«æå°ã
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4