aboutsummaryrefslogtreecommitdiff
path: root/files/ru/web/javascript/reference/global_objects/symbol/iterator/index.html
blob: ffe354c621161980971280fe7591a6d83c573316 (plain)
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] = () =&gt; 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>