aboutsummaryrefslogtreecommitdiff
path: root/files/ru/web/javascript/reference/errors/invalid_for-in_initializer/index.html
blob: b4b9357fc3287b5133978c4f7d37ce63d1330b97 (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
---
title: >-
  SyntaxError: for-in loop head declarations may not have
  initializers(SyntaxError: объявления for-in loop head могут не иметь
  инициализаторов)
slug: Web/JavaScript/Reference/Errors/Invalid_for-in_initializer
translation_of: Web/JavaScript/Reference/Errors/Invalid_for-in_initializer
---
<div>{{jsSidebar("Errors")}}</div>

<h2 id="Message">Message</h2>

<pre class="syntaxbox">SyntaxError: объявления for-in loop head не могут иметь инициализатора (Edge)
SyntaxError: объявления for-in loop head могут не иметь инициализаторов (Firefox)
SyntaxError: объявление переменной цикла for-in может не иметь инициализатора. (Chrome)

</pre>

<h2 id="Тип_ошибки">Тип ошибки</h2>

<p>{{jsxref("SyntaxError")}} только в строгом режиме.</p>

<h2 id="Что_пошло_не так">Что пошло не так?</h2>

<p>Глава цикла <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in">for...in</a> содержит выражение инициализатора. То есть переменная объявляется и присваивается значение <code>|for (var i = 0 in obj)|</code>. В нестрогом режиме это объявление head игнорируется и ведёт себя как <code>|for (var i in obj)|</code>. Однако в строгом режиме создаётся синтаксическая ошибка.</p>

<h2 id="Примеры">Примеры</h2>

<p>Данный пример даёт SyntaxError:</p>

<pre class="brush: js example-bad">"use strict";

var obj = {a: 1, b: 2, c: 3 };

for (var i = 0 in obj) {
  console.log(obj[i]);
}

 SyntaxError: объявления for-in loop head могут не иметь инициализаторов
</pre>

<h3 id="Правильный_for-in_loop">Правильный for-in loop</h3>

<p>Можно удалить инициализатор (i = 0) в начале цикла for-in.</p>

<pre class="brush: js example-good">"use strict";

var obj = {a: 1, b: 2, c: 3 };

for (var i in obj) {
  console.log(obj[i]);
}
</pre>

<h3 id="Итерация_массива">Итерация массива</h3>

<p>Цикл for...in не должен использоваться для итерации массива. Вы намеревались использовать цикл for вместо цикла for-in для итерации {{jsxref("Array")}}? Цикл for позволяет также установить инициализатор:</p>

<pre class="brush: js example-good">var arr = [ "a", "b", "c" ]

for (var i = 2; i &lt; arr.length; i++) {
  console.log(arr[i]);
}

// "c"</pre>

<h2 id="Смотрите_также">Смотрите также</h2>

<ul>
 <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/for...in">for...in</a></code></li>
 <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/for...of">for...of</a></code> – также запрещает инициализатор как в строгом, так и в нестрогом режиме.</li>
 <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/for">for</a></code> –  предпочтительно для итерации массива, позволяет определить инициализатор.</li>
</ul>