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]()
ๆนๆณ็ๅ
็ฝฎ็ฑปๅๆฏ๏ผ
Array.prototype[Symbol.iterator]()
TypedArray.prototype[Symbol.iterator]()
String.prototype[Symbol.iterator]()
Map.prototype[Symbol.iterator]()
Set.prototype[Symbol.iterator]()
ๆดๅคไฟกๆฏ่ฏทๅ่ง่ฟญไปฃๅ่ฎฎใ
Symbol.iterator ็ๅฑๆง็นๆง | |
---|---|
ๅฏๅ | ๅฆ |
ๅฏๆไธพ | ๅฆ |
ๅฏ้ ็ฝฎ | ๅฆ |
็คบไพ
่ชๅฎไน่ฟญไปฃๅจ
ๆไปฌๅฏไปฅๅไธ้ข่ฟๆ ทๅๅปบ่ชๅฎไน็่ฟญไปฃๅจ๏ผ
const myIterable = {};
myIterable[Symbol.iterator] = function* () {
yield 1;
yield 2;
yield 3;
};
[...myIterable]; // [1, 2, 3]
ๆ่ ๅฏไปฅๅจ็ฑปๆๅฏน่ฑกไธญไฝฟ็จ่ฎก็ฎๅฑๆงๅฎไน่ฟญไปฃ๏ผ
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๏ผ
const nonWellFormedIterable = {};
nonWellFormedIterable[Symbol.iterator] = () => 1;
[...nonWellFormedIterable]; // TypeError: [Symbol.iterator]() returned a non-object value
่ง่
Specification |
---|
ECMAScriptยฎ 2026 Language Specification # sec-symbol.iterator |
ๆต่งๅจๅ ผๅฎนๆง
Loadingโฆ