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);
}
// é æè¼¸åºï¼"a"
// é æè¼¸åºï¼"b"
// é æè¼¸åºï¼"c"
èªæ³
for (variable of iterable)
statement
variable
卿¯æ¬¡è¿ä»£ä¸å¾åºåå¾å°ä¸åå¼ï¼å¯ä»¥æ¯ç¨ const
ãlet
æ var
宣åçè®æ¸ï¼ä¹å¯ä»¥æ¯è³¦å¼ç®æ¨ï¼ä¾å¦å
å宣åçè®æ¸ãç©ä»¶å±¬æ§æè§£æ§æ¨¡å¼ï¼ãä½¿ç¨ var
宣åçè®æ¸ä¸æ¯è¿´åçå±é¨è®æ¸ï¼å³å®åè for...of
è¿´å使¼åä¸ä½ç¨åä¸ã
iterable
å¯è¿ä»£ç©ä»¶ï¼è¿´åæä½çå¼åºåç便ºã
statement
æ¯æ¬¡è¿ä»£å¾å·è¡çèªå¥ï¼å¯ä»¥åè variable
ãå¯ä»¥ä½¿ç¨åå¡èªå¥ä¾å·è¡å¤åèªå¥ã
for...of
è¿´åä¾åºéåæä½ä¾èªå¯è¿ä»£ç©ä»¶çå¼ãè¿´åå°å¼çæ¯æ¬¡æä½ç¨±çºä¸æ¬¡è¿ä»£ï¼èè¿´åæ¬èº«å稱çºè¿ä»£å¯è¿ä»£ç©ä»¶ï¼æ¯æ¬¡è¿ä»£å·è¡å¯è½åèç¶ååºåå¼çèªå¥ã
ç¶ for...of
è¿´åå¨å¯è¿ä»£ç©ä»¶ä¸é²è¡è¿ä»£æï¼å®é¦å
調ç¨å¯è¿ä»£ç©ä»¶ç [Symbol.iterator]()
æ¹æ³ï¼è©²æ¹æ³åå³ä¸åè¿ä»£å¨ï¼ç¶å¾éè¤èª¿ç¨å¾å°çè¿ä»£å¨ç next()
æ¹æ³ï¼ä»¥çæè¦è³¦äº variable
çå¼åºåã
ç¶è¿ä»£å¨å®ææï¼next()
çåå³çµææ¯ä¸åå
·æ done: true
çç©ä»¶ï¼ï¼for...of
è¿´å便æéåºãèå
¶ä»è¿´åèªå¥ä¸æ¨£ï¼ä½ å¯ä»¥å¨ statement
ä¸ä½¿ç¨æµç¨æ§å¶èªå¥ï¼
break
æåæ¢ statement
çå·è¡ï¼ä¸¦è·³å°è¿´åä¹å¾ç第ä¸åèªå¥ãcontinue
æåæ¢ statement
çå·è¡ï¼ä¸¦è·³å°è¿´åçä¸ä¸æ¬¡è¿ä»£ã妿 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"
è¿ä»£ TypedArray
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