1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
---
title: Symbol.iterator
slug: Web/JavaScript/Reference/Global_Objects/Symbol/iterator
tags:
- ECMAScript6
- JavaScript
- Свойство
- Символы
translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/iterator
---
<div>{{JSRef}}</div>
<p><code><strong>Symbol.iterator</strong></code> — известный символ, задающий итератор объекта, используемый по умолчанию. Применяется в конструкции <a href="/en-US/docs/Web/JavaScript/Reference/Statements/for...of"><code>for...of</code></a>.</p>
<div>{{js_property_attributes(0, 0, 0)}}</div>
<h2 id="Описание">Описание</h2>
<p>Каждый раз, когда объект должен быть проитерирован (как, например, в начале цикла <code>for..of</code>), метод <code>@@iterator</code> вызывается без аргументов, а возвращённый итератор используется непосредственно для получения значений.</p>
<p>Некоторые встроенные типы имеют стандартное итерационное поведение, в то время как другие типы (как {{jsxref("Object")}}) таким свойством не обладают. Метод <code>@@iterator</code> имеют следующие встроенные типы:</p>
<ul>
<li>{{jsxref("Array.@@iterator", "Array.prototype[@@iterator]()")}}</li>
<li>{{jsxref("TypedArray.@@iterator", "TypedArray.prototype[@@iterator]()")}}</li>
<li>{{jsxref("String.@@iterator", "String.prototype[@@iterator]()")}}</li>
<li>{{jsxref("Map.@@iterator", "Map.prototype[@@iterator]()")}}</li>
<li>{{jsxref("Set.@@iterator", "Set.prototype[@@iterator]()")}}</li>
</ul>
<p>Смотрите также<a href="/en-US/docs/Web/JavaScript/Reference/Iteration_protocols"> </a><a href="/ru/docs/Web/JavaScript/Reference/Iteration_protocols">Протоколы перебора</a> для получения дополнительных сведений.</p>
<h2 id="Примеры">Примеры</h2>
<h3 id="Пользовательские_итерируемые_объекты">Пользовательские итерируемые объекты</h3>
<p>Мы можем создавать собственные итерируемые объекты, подобно следующему коду:</p>
<pre class="brush: js">var myIterable = {}
myIterable[Symbol.iterator] = function* () {
yield 1;
yield 2;
yield 3;
};
[...myIterable] // [1, 2, 3]
</pre>
<h3 id="Плохо_оформленные_итераторы">Плохо оформленные итераторы</h3>
<p>Если метод <code>@@iterator</code> объекта не возвращает итератор, то это плохо оформленный итерируемый объект, его использование, скорее всего, приведёт к возникновению исключений или неправильному поведению:</p>
<pre class="brush: js">var nonWellFormedIterable = {}
nonWellFormedIterable[Symbol.iterator] = () => 1
[...nonWellFormedIterable] // TypeError: [] is not a function
</pre>
<h2 id="Спецификации">Спецификации</h2>
{{Specifications}}
<h2 id="Browser_compatibility">Browser compatibility</h2>
<p>{{Compat}}</p>
<h2 id="See_also">See also</h2>
<ul>
<li><a href="/ru/docs/Web/JavaScript/Reference/Iteration_protocols">Протоколы перебора</a></li>
<li>{{jsxref("Array.@@iterator", "Array.prototype[@@iterator]()")}}</li>
<li>{{jsxref("TypedArray.@@iterator", "TypedArray.prototype[@@iterator]()")}}</li>
<li>{{jsxref("String.@@iterator", "String.prototype[@@iterator]()")}}</li>
<li>{{jsxref("Map.@@iterator", "Map.prototype[@@iterator]()")}}</li>
<li>{{jsxref("Set.@@iterator", "Set.prototype[@@iterator]()")}}</li>
</ul>
|