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 г..
Symbol.iterator â извеÑÑнÑй Ñимвол, задаÑÑий иÑеÑаÑÐ¾Ñ Ð¾Ð±ÑекÑа, иÑполÑзÑемÑй по ÑмолÑаниÑ. ÐÑименÑеÑÑÑ Ð² конÑÑÑÑкÑии for...of.
ÐÑÑибÑÑÑ ÑвойÑÑва Symbol.iterator | |
|---|---|
| ÐапиÑÑваемое | Ð½ÐµÑ |
| ÐеÑеÑиÑлÑемое | Ð½ÐµÑ |
| ÐаÑÑÑаиваемое | Ð½ÐµÑ |
ÐпиÑание
ÐаждÑй Ñаз, когда обÑÐµÐºÑ Ð´Ð¾Ð»Ð¶ÐµÐ½ бÑÑÑ Ð¿ÑоиÑеÑиÑован (как, напÑимеÑ, в наÑале Ñикла for..of), меÑод @@iterator вÑзÑваеÑÑÑ Ð±ÐµÐ· аÑгÑменÑов, а возвÑаÑÑннÑй иÑеÑаÑÐ¾Ñ Ð¸ÑполÑзÑеÑÑÑ Ð½ÐµÐ¿Ð¾ÑÑедÑÑвенно Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð·Ð½Ð°Ñений.
ÐекоÑоÑÑе вÑÑÑоеннÑе ÑÐ¸Ð¿Ñ Ð¸Ð¼ÐµÑÑ ÑÑандаÑÑное иÑеÑаÑионное поведение, в Ñо вÑÐµÐ¼Ñ ÐºÐ°Ðº дÑÑгие ÑÐ¸Ð¿Ñ (как Object) Ñаким ÑвойÑÑвом не обладаÑÑ. ÐеÑод @@iterator имеÑÑ ÑледÑÑÑие вÑÑÑоеннÑе ÑипÑ:
Array.prototype[@@iterator]()TypedArray.prototype[@@iterator]()String.prototype[@@iterator]()Map.prototype[@@iterator]()Set.prototype[@@iterator]()
СмоÑÑиÑе Ñакже ÐÑоÑÐ¾ÐºÐ¾Ð»Ñ Ð¿ÐµÑебоÑа Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑÑ Ñведений.
ÐÑимеÑÑ
>ÐолÑзоваÑелÑÑкие иÑеÑиÑÑемÑе обÑекÑÑ
ÐÑ Ð¼Ð¾Ð¶ÐµÐ¼ ÑоздаваÑÑ ÑобÑÑвеннÑе иÑеÑиÑÑемÑе обÑекÑÑ, подобно ÑледÑÑÑÐµÐ¼Ñ ÐºÐ¾Ð´Ñ:
var myIterable = {};
myIterable[Symbol.iterator] = function* () {
yield 1;
yield 2;
yield 3;
};
[...myIterable]; // [1, 2, 3]
ÐÐ»Ð¾Ñ Ð¾ оÑоÑмленнÑе иÑеÑаÑоÑÑ
ÐÑли меÑод @@iterator обÑекÑа не возвÑаÑÐ°ÐµÑ Ð¸ÑеÑаÑоÑ, Ñо ÑÑо плоÑ
о оÑоÑмленнÑй иÑеÑиÑÑемÑй обÑекÑ, его иÑполÑзование, ÑкоÑее вÑего, пÑиведÑÑ Ðº Ð²Ð¾Ð·Ð½Ð¸ÐºÐ½Ð¾Ð²ÐµÐ½Ð¸Ñ Ð¸ÑклÑÑений или непÑавилÑÐ½Ð¾Ð¼Ñ Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ:
var nonWellFormedIterable = {}
nonWellFormedIterable[Symbol.iterator] = () => 1
[...nonWellFormedIterable] // TypeError: [] is not a function
СпеÑиÑикаÑии
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-symbol.iterator> |