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 < 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>
|