ๆญค้กต้ข็”ฑ็คพๅŒบไปŽ่‹ฑๆ–‡็ฟป่ฏ‘่€Œๆฅใ€‚ไบ†่งฃๆ›ดๅคšๅนถๅŠ ๅ…ฅ MDN Web Docs ็คพๅŒบใ€‚

View in English Always switch to English

Symbol.iterator

Baseline Widely available

This feature is well established and works across many devices and browser versions. Itโ€™s been available across browsers since โจ2016ๅนด9ๆœˆโฉ.

Symbol.iterator ไธบๆฏไธ€ไธชๅฏน่ฑกๅฎšไน‰ไบ†้ป˜่ฎค็š„่ฟญไปฃๅ™จใ€‚่ฏฅ่ฟญไปฃๅ™จๅฏไปฅ่ขซ for...of ๅพช็Žฏไฝฟ็”จใ€‚

ๅฐ่ฏ•ไธ€ไธ‹

const iterable1 = {};

iterable1[Symbol.iterator] = function* () {
  yield 1;
  yield 2;
  yield 3;
};

console.log([...iterable1]);
// Expected output: Array [1, 2, 3]

ๆ่ฟฐ

ๅฝ“้œ€่ฆๅฏนไธ€ไธชๅฏน่ฑก่ฟ›่กŒ่ฟญไปฃๆ—ถ๏ผˆๆฏ”ๅฆ‚ๅผ€ๅง‹็”จไบŽไธ€ไธช for..of ๅพช็Žฏไธญ๏ผ‰๏ผŒๅฎƒ็š„ [Symbol.iterator]() ๆ–นๆณ•้ƒฝไผšๅœจไธไผ ๅ‚ๆƒ…ๅ†ตไธ‹่ขซ่ฐƒ็”จ๏ผŒ่ฟ”ๅ›ž็š„่ฟญไปฃๅ™จ็”จไบŽ่Žทๅ–่ฆ่ฟญไปฃ็š„ๅ€ผใ€‚

ไธ€ไบ›ๅ†…็ฝฎ็ฑปๅž‹ๆ‹ฅๆœ‰้ป˜่ฎค็š„่ฟญไปฃๅ™จ่กŒไธบ๏ผŒๅ…ถไป–็ฑปๅž‹๏ผˆๅฆ‚ Object๏ผ‰ๅˆ™ๆฒกๆœ‰ใ€‚ๆ‹ฅๆœ‰้ป˜่ฎค็š„ [Symbol.iterator]() ๆ–นๆณ•็š„ๅ†…็ฝฎ็ฑปๅž‹ๆ˜ฏ๏ผš

ๆ›ดๅคšไฟกๆฏ่ฏทๅ‚่ง่ฟญไปฃๅ่ฎฎใ€‚

Symbol.iterator ็š„ๅฑžๆ€ง็‰นๆ€ง
ๅฏๅ†™ๅฆ
ๅฏๆžšไธพๅฆ
ๅฏ้…็ฝฎๅฆ

็คบไพ‹

่‡ชๅฎšไน‰่ฟญไปฃๅ™จ

ๆˆ‘ไปฌๅฏไปฅๅƒไธ‹้ข่ฟ™ๆ ทๅˆ›ๅปบ่‡ชๅฎšไน‰็š„่ฟญไปฃๅ™จ๏ผš

js
const myIterable = {};
myIterable[Symbol.iterator] = function* () {
  yield 1;
  yield 2;
  yield 3;
};
[...myIterable]; // [1, 2, 3]

ๆˆ–่€…ๅฏไปฅๅœจ็ฑปๆˆ–ๅฏน่ฑกไธญไฝฟ็”จ่ฎก็ฎ—ๅฑžๆ€งๅฎšไน‰่ฟญไปฃ๏ผš

js
class Foo {
  *[Symbol.iterator]() {
    yield 1;
    yield 2;
    yield 3;
  }
}

const someObj = {
  *[Symbol.iterator]() {
    yield "a";
    yield "b";
  },
};

console.log(...new Foo()); // 1, 2, 3
console.log(...someObj); // 'a', 'b'

ไธ็ฌฆๅˆๆ ‡ๅ‡†็š„่ฟญไปฃๅ™จ

ๅฆ‚ๆžœไธ€ไธช่ฟญไปฃๅ™จ [Symbol.iterator]() ๆฒกๆœ‰่ฟ”ๅ›žไธ€ไธช่ฟญไปฃๅ™จๅฏน่ฑก๏ผŒ้‚ฃไนˆๅฎƒๅฐฑๆ˜ฏไธ€ไธชไธ็ฌฆๅˆๆ ‡ๅ‡†็š„่ฟญไปฃๅ™จใ€‚่ฟ™ๆ ท็š„่ฟญไปฃๅ™จๅฐ†ไผšๅœจ่ฟ่กŒๆœŸๆŠ›ๅ‡บๅผ‚ๅธธ๏ผŒ็”š่‡ณๅ‡บ็Žฐ้žๅธธ่ฏกๅผ‚็š„ Bug๏ผš

js
const nonWellFormedIterable = {};
nonWellFormedIterable[Symbol.iterator] = () => 1;
[...nonWellFormedIterable]; // TypeError: [Symbol.iterator]() returned a non-object value

่ง„่Œƒ

Specification
ECMAScriptยฎ 2026 Language Specification
# sec-symbol.iterator

ๆต่งˆๅ™จๅ…ผๅฎนๆ€ง

ๅ‚่ง