diff options
Diffstat (limited to 'files/ru/web/javascript/reference/errors')
78 files changed, 5423 insertions, 0 deletions
diff --git a/files/ru/web/javascript/reference/errors/already_has_pragma/index.html b/files/ru/web/javascript/reference/errors/already_has_pragma/index.html new file mode 100644 index 0000000000..5de1095a97 --- /dev/null +++ b/files/ru/web/javascript/reference/errors/already_has_pragma/index.html @@ -0,0 +1,44 @@ +--- +title: >- + Warning: -file- is being assigned a //# sourceMappingURL, but already has + one(Внимание: -file- является в сущности назначенным //# sourceMappingURL, но + уже имеет один) +slug: Web/JavaScript/Reference/Errors/Already_has_pragma +translation_of: Web/JavaScript/Reference/Errors/Already_has_pragma +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщение">Сообщение</h2> + +<pre class="syntaxbox">Опасно: Внимание: -file- является в сущности назначенным //# sourceMappingURL, но уже имеет один)</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>Предупреждение. Выполнение скрипта не будет остановлено.</p> + +<h2 id="Что_вы_сделали_не_так">Что вы сделали не так?</h2> + +<p> </p> + +<p>Для данного источника JavaScript исходная карта была указана несколько раз.</p> + +<p>Источники JavaScript часто объединяются и минимизируются, чтобы сделать их доставку с сервера более эффективной. С помощью сопоставлений исходного кода отладчик может сопоставить выполняемый код с исходными файлами. Существует два способа назначения исходной карты: с помощью комментария или путем установки заголовка для файла JavaScript.</p> + +<p> </p> + +<h2 id="Примеры">Примеры</h2> + +<p>Настройка исходной карты с помощью комментария в файле:</p> + +<pre class="brush: js example-good">//# sourceMappingURL=http://example.com/path/to/your/sourcemap.map</pre> + +<p>Или, в качестве альтернативы, вы можете установить заголовок, на ваш JavaScript файл :</p> + +<pre class="brush: js example-good">X-SourceMap: /path/to/file.js.map</pre> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li><a href="/en-US/docs/Tools/Debugger/How_to/Use_a_source_map">How to use a source map – Firefox Tools documentation</a></li> + <li><a href="http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/">Introduction to source maps – HTML5 rocks</a></li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/array_sort_argument/index.html b/files/ru/web/javascript/reference/errors/array_sort_argument/index.html new file mode 100644 index 0000000000..49709baa5f --- /dev/null +++ b/files/ru/web/javascript/reference/errors/array_sort_argument/index.html @@ -0,0 +1,45 @@ +--- +title: >- + TypeError: invalid Array.prototype.sort argument (TypeError: недопустимый + Array.prototype.sort argument) +slug: Web/JavaScript/Reference/Errors/Array_sort_argument +translation_of: Web/JavaScript/Reference/Errors/Array_sort_argument +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщение">Сообщение</h2> + +<pre class="syntaxbox">TypeError: аргумент не является объектом функции (Edge) +TypeError: недопустимый Array.prototype.sort аргумент для (Firefox)</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>{{jsxref("TypeError")}}</p> + +<h2 id="Что_пошло_не_так">Что пошло не так?</h2> + +<p>Аргумент {{jsxref("Array.prototype.sort()")}} предполагается либо {{jsxref("undefined")}} или функцию, которая сравнивает его операндов.</p> + +<h2 id="Примеры">Примеры</h2> + +<h3 id="Неправильные_примеры">Неправильные примеры</h3> + +<pre class="brush: js example-bad">[1, 3, 2].sort(5); // TypeError + +var cmp = { asc: (x, y) => x >= y, dsc: (x, y) => x <= y }; +[1, 3, 2].sort(cmp[this.key] || 'asc'); // TypeError +</pre> + +<h3 id="правильные">правильные</h3> + +<pre class="brush: js example-good">[1, 3, 2].sort(); // [1, 2, 3] + + +var cmp = { asc: (x, y) => x >= y, dsc: (x, y) => x <= y }; +[1, 3, 2].sort(cmp[this.key || 'asc']); // [1, 2, 3]</pre> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li>{{jsxref("Array.prototype.sort()")}}</li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/bad_octal/index.html b/files/ru/web/javascript/reference/errors/bad_octal/index.html new file mode 100644 index 0000000000..d36656c80e --- /dev/null +++ b/files/ru/web/javascript/reference/errors/bad_octal/index.html @@ -0,0 +1,53 @@ +--- +title: 'Внимание: 08/09 не является восьмеричной постоянной по ECMA-262' +slug: Web/JavaScript/Reference/Errors/Bad_octal +tags: + - Ошибки + - Предупреждения + - Синтаксические ошибки +translation_of: Web/JavaScript/Reference/Errors/Bad_octal +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщение">Сообщение</h2> + +<pre class="syntaxbox">Внимание: Синтаксическая ошибка: 08 не является восьмеричной постоянной по ECMA-262. +Внимание: Синтаксическая ошибка: 09 не является восьмеричной постоянной по ECMA-262. +</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>Предупреждение. Выполнение JavaScript не будет остановлено.</p> + +<h2 id="Что_пошло_не_так">Что пошло не так?</h2> + +<p>Десятеричные литералы могут начинаться с нуля (<code>0</code>), за которым следуют другие десятеричные цифры. Но, если все цифры после начального нуля (<code>0</code>) меньше 8, то число интерпретируется как восьмеричное. Т.к. 08 и 09 не соответствуют даному условию, JavaScript выводит предупреждение об этом.</p> + +<p>Следует отметить, что восьмеричные литералы и восьмеричные управляющие последовательности являются устаревшими и <span id="result_box" lang="ru"><span>будут содержать дополнительное предупреждение об этом.</span></span> С выпуском ECMAScript 6 версии в синтаксисе используется начальный нуль (<code>0</code>), за которым следует <span id="result_box" lang="ru"><span>строчная или прописная</span></span> Латинская буква "O" (<code>0o</code> или <code>0O)</code>. <span id="result_box" lang="ru"><span>Дополнительную информацию смотрите на странице о </span></span> <a href="/en-US/docs/Web/JavaScript/Reference/Lexical_grammar#Octal">лексической грамматике</a>.</p> + +<h2 id="Примеры">Примеры</h2> + +<h3 id="Недопустимые_восьмеричные_числа">Недопустимые восьмеричные числа</h3> + +<pre class="brush: js example-bad">08; +09; +// Синтаксическая ошибка: 08 не является восьмеричной постоянной по ECMA-262. +// Синтаксическая ошибка: восьмеричные литералы с "0"-префиксом и восьмеричные управляющие последовательности +// являются устаревшими</pre> + +<h3 id="Допустимые_восьмеричные_числа">Допустимые восьмеричные числа</h3> + +<p><span id="result_box" lang="ru"><span>Используйте начальный нуль, за которым следует буква «o»;</span></span></p> + +<pre class="brush: js example-good">0O755; +0o644; +</pre> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li><a href="/en-US/docs/Web/JavaScript/Reference/Lexical_grammar#Octal">Лексический синтаксис</a></li> + <li> + <p><a href="/en-US/docs/Web/JavaScript/Reference/Errors/Deprecated_octal">Синтаксическая ошибка: восьмеричные литералы с "0"-префиксом и восьмеричные управляющие последовательности являются устаревшими</a></p> + </li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/bad_radix/index.html b/files/ru/web/javascript/reference/errors/bad_radix/index.html new file mode 100644 index 0000000000..b3e84de1e7 --- /dev/null +++ b/files/ru/web/javascript/reference/errors/bad_radix/index.html @@ -0,0 +1,61 @@ +--- +title: 'RangeError: radix must be an integer' +slug: Web/JavaScript/Reference/Errors/Bad_radix +tags: + - JavaScript + - RangeError + - Ошибки +translation_of: Web/JavaScript/Reference/Errors/Bad_radix +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщение">Сообщение</h2> + +<pre class="syntaxbox">RangeError: radix must be an integer at least 2 and no greater than 36 (Firefox) +RangeError: toString() radix argument must be between 2 and 36 (Chrome) +</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>{{jsxref("RangeError")}}</p> + +<h2 id="Что_пошло_не_так">Что пошло не так?</h2> + +<p><span class="notranslate">Метод </span> {{jsxref("Number.prototype.toString()")}} <span class="notranslate">был вызван с дополнительным параметром <code>radix</code>.</span> <span class="notranslate"> Его значение должно быть целым числом, принадлежащим промежутку от 2 до 36 и указывающим основание системы счисления, которая должна быть использована для представления численных значений.</span> <span class="notranslate"> Например, десятичное (основание 10) число 169 представляется в шестнадцатеричном виде (основание 16) как A9.</span></p> + +<p><span class="notranslate">Почему значение этого параметра не может быть больше, чем 36? Для оснований</span><span class="notranslate">, превышающих 10, в качестве цифр используются алфавитные символы;</span> <span class="notranslate"> следовательно, основание не может быть больше 36, поскольку в латинском алфавите (используемом английским и многими другими языками) только 26 символов.</span></p> + +<p><span class="notranslate">Наиболее распространенные основания систем счисления:</span></p> + +<ul> + <li>2 для <a href="https://ru.wikipedia.org/wiki/Двоичная_система_счисления">двоичных чисел</a>,</li> + <li>8 для <a href="https://ru.wikipedia.org/wiki/Восьмеричная_система_счисления">восьмеричных чисел</a>,</li> + <li>10 для <a href="https://ru.wikipedia.org/wiki/Десятичная_система_счисления">десятичных чисел</a>,</li> + <li>16 для <a href="https://ru.wikipedia.org/wiki/Шестнадцатеричная_система_счисления">шестнадцатеричных чисел</a>.</li> +</ul> + +<h2 id="Примеры">Примеры</h2> + +<h3 class="highlight-spanned" id="Некорректное_применение"><span class="highlight-span"><span class="notranslate">Некорректное применение</span></span></h3> + +<pre class="brush: js example-bad">(42).toString(0); +(42).toString(1); +(42).toString(37); +(42).toString(150); +// Нельзя использовать для форматирования строку данного вида: +(12071989).toString('MM-dd-yyyy'); +</pre> + +<h3 id="Корректное_применение">Корректное применение</h3> + +<pre class="brush: js example-good">(42).toString(2); // "101010" (двоичная система) +(13).toString(8); // "15" (восьмеричная) +(0x42).toString(10); // "66" (десятичная) +(100000).toString(16) // "186a0" (шестнадцатеричная) +</pre> + +<h2 id="Смотрите_также"><span class="notranslate">Смотрите также</span></h2> + +<ul> + <li>{{jsxref("Number.prototype.toString()")}}</li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/bad_regexp_flag/index.html b/files/ru/web/javascript/reference/errors/bad_regexp_flag/index.html new file mode 100644 index 0000000000..6e3604af66 --- /dev/null +++ b/files/ru/web/javascript/reference/errors/bad_regexp_flag/index.html @@ -0,0 +1,102 @@ +--- +title: 'SyntaxError: invalid regular expression flag "x"' +slug: Web/JavaScript/Reference/Errors/Bad_regexp_flag +translation_of: Web/JavaScript/Reference/Errors/Bad_regexp_flag +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщение">Сообщение</h2> + +<pre class="syntaxbox">SyntaxError: invalid regular expression flag "x" (Firefox) +SyntaxError: Invalid regular expression flags (Chrome) +</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>{{jsxref("SyntaxError")}}</p> + +<h2 id="Что_пошло_не_так">Что пошло не так?</h2> + +<p>В коде есть недопустимые флаги регулярных выражений. Литерал в регулярном выражении, который содержит шаблон заключенный между двумя слэшами, флаги определяются после второго флага. Они также могут быть объявлены в конструкторе функции {{jsxref("RegExp")}} object (второй параметр). Флаги регулярного выражения могут быть использованы отдельно или вместе в любой очередности, но в ECMAScript их только пять.</p> + +<p>Чтоб включить флаг в регулярное выражение, используйте синтаксис:</p> + +<pre class="brush: js">var re = /pattern/flags; +</pre> + +<p>или</p> + +<pre class="brush: js">var re = new RegExp('pattern', 'flags');</pre> + +<p>Флаги регулярного выражения</p> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">Флаг</th> + <th scope="col">Описание</th> + </tr> + </thead> + <tbody> + <tr> + <td><code>g</code></td> + <td>Глобальный поиск.</td> + </tr> + <tr> + <td>i</td> + <td>Нечувствительный к регистру поиск.</td> + </tr> + <tr> + <td>m</td> + <td>Поиск по всем строкам.</td> + </tr> + <tr> + <td>u</td> + <td>Unicode; обрабатывать шаблон как последовательность кода Unicode</td> + </tr> + <tr> + <td>y</td> + <td>Выполняет «липкий» поиск, который будет начинаться с текущей позиции в целевой строке. Cм. {{jsxref("RegExp.sticky", "sticky")}}</td> + </tr> + </tbody> +</table> + +<h2 id="Примеры">Примеры</h2> + +<p>Существует только пять действительных флагов регулярных выражений.</p> + +<pre class="brush: js example-bad">/foo/bar; + +// Ошибка синтаксиса: недействительный флаг "b" для регулярного выражения +</pre> + +<p>Вы намеревались создать регулярное выражение? Выражение, содержащее два слэша, интерпретируется как литерал регулярного выражения.</p> + +<pre class="brush: js example-bad">let obj = { + url: /docs/Web +}; + +// Ошибка синтаксиса: недействительный флаг "W" для регулярного выражения +</pre> + +<p>Или вы хотели создать строку вместо этого? Добавьте одинарные или двойные кавычки, чтобы создать строковый литерал. </p> + +<pre class="brush: js example-good">let obj = { + url: '/docs/Web' +};</pre> + +<h3 id="Действительные_флаги_регулярного_выражения">Действительные флаги регулярного выражения </h3> + +<p>Вгляните на таблицу выше, где представлены пять действительных флагов регулярного выражения, которые разрешены в JavaScript</p> + +<pre class="brush: js example-good">/foo/g; +/foo/gim; +/foo/uy; +</pre> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li><a href="/en-US/docs/Web/JavaScript/Guide/Regular_Expressions">Regular expressions</a></li> + <li><a href="http://xregexp.com/flags/">XRegEx flags</a> – библиотека регулярного выражения, которая предоставляет четыре новых флага (<code>n</code>, <code>s</code>, <code>x</code>, <code>A</code>)</li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/bad_return_or_yield/index.html b/files/ru/web/javascript/reference/errors/bad_return_or_yield/index.html new file mode 100644 index 0000000000..dd69cb3167 --- /dev/null +++ b/files/ru/web/javascript/reference/errors/bad_return_or_yield/index.html @@ -0,0 +1,56 @@ +--- +title: 'SyntaxError: return not in function' +slug: Web/JavaScript/Reference/Errors/Bad_return_or_yield +tags: + - JavaScript + - SyntaxError + - Ошибки +translation_of: Web/JavaScript/Reference/Errors/Bad_return_or_yield +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщение">Сообщение</h2> + +<pre class="syntaxbox">SyntaxError: 'return' statement outside of function (Edge) +SyntaxError: return not in function (Firefox) +SyntaxError: yield not in function (Firefox) +</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>{{jsxref("SyntaxError")}}.</p> + +<h2 id="Что_пошло_не_так">Что пошло не так?</h2> + +<p>Вызов оператора <code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/return">return</a></code> или <code><a href="/en-US/docs/Web/JavaScript/Reference/Operators/yield">yield</a></code> был осуществлен вне <a href="/ru/docs/Web/JavaScript/Guide/Functions">функции</a>. Может, где-то пропущена фигурная скобка? Операторы <code>return</code> и <code>yield</code> не могут существовать вне функции, поскольку они завершают (или останавливают и возобновляют) её исполнение и указывают значение, возвращаемое в место, откуда она была вызвана.</p> + +<h2 id="Примеры">Примеры</h2> + +<pre class="brush: js example-bad">var cheer = function(score) { + if (score === 147) + return 'Максимум!'; + }; + if (score > 100) { + return 'Столетие!'; + } +} + +// SyntaxError: return not in function</pre> + +<p>На первый взгляд кажется, что фигурные скобки расставлены правильно, но в данном примере пропущена <code>{</code> после первого оператора <code>if</code>. Правильный вариант:</p> + +<pre class="brush: js example-good">var cheer = function(score) { + if (score === 147) { + return 'Максимум!'; + } + if (score > 100) { + return 'Столетие!'; + } +};</pre> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li><code><a href="/ru/docs/Web/JavaScript/Reference/Statements/return">return</a></code></li> + <li><code><a href="/ru/docs/Web/JavaScript/Reference/Operators/yield">yield</a></code></li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/called_on_incompatible_type/index.html b/files/ru/web/javascript/reference/errors/called_on_incompatible_type/index.html new file mode 100644 index 0000000000..0d309530e6 --- /dev/null +++ b/files/ru/web/javascript/reference/errors/called_on_incompatible_type/index.html @@ -0,0 +1,67 @@ +--- +title: X.prototype.y called on incompatible type +slug: Web/JavaScript/Reference/Errors/Called_on_incompatible_type +translation_of: Web/JavaScript/Reference/Errors/Called_on_incompatible_type +--- +<div>{{jsSidebar("Errors")}}</div> + +<div> </div> + +<h2 id="Сообщение">Сообщение</h2> + +<pre class="syntaxbox">TypeError: 'this' не является Set объектом (EdgE) +TypeError: Function.prototype.toString вызывается несовместимый объект (Firefox) +TypeError: Function.prototype.bind вызывается несовместимая цель (Firefox) +TypeError: Метод Set.prototype.add called вызывается несовместимый приемник undefined (Chrome) +TypeError: Bind должен вызываться для функции(Chrome) +</pre> + +<h2 id="Тип_ошибки">Тип ошибки </h2> + +<p>{{jsxref("TypeError")}}</p> + +<h2 id="Что_пошло_не_так">Что пошло не так?</h2> + +<p>При возникновении этой ошибки вызывается функция (для данного объекта) с типом this, не соответствующим типу, ожидаемому функцией.</p> + +<p>Эта проблема может возникнуть при использовании {{jsxref("Function.prototype.call()")}} ил {{jsxref("Function.prototype.apply()")}} методы и предоставление аргумента this, который не имеет ожидаемого типа.</p> + +<p>Эта проблема также может возникнуть при предоставлении функции (хранящейся в объекте) в качестве аргумента другой функции. В этом случае объект не будет целью this функции. Чтобы обойти эту проблему, необходимо либо предоставить лямбда-код, который выполняет вызов, либо использовать{{jsxref("Function.prototype.bind()")}} функция для принудительной передачи аргумента this ожидаемому объекту.</p> + +<h2 id="Примеры">Примеры</h2> + +<h3 id="Неправильные">Неправильные</h3> + +<pre class="brush: js example-bad">var mySet = new Set; +['bar', 'baz'].forEach(mySet.add); +// mySet.add is a function, but "mySet" is not captured as this. + +var myFun = function () { + console.log(this); +}; +['bar', 'baz'].forEach(myFun.bind); +// myFun.bind is a function, but "myFun" is not captured as this. + +</pre> + +<h3 id="Правильные">Правильные</h3> + +<pre class="brush: js example-good">var mySet = new Set; +['bar', 'baz'].forEach(mySet.add.bind(mySet)); +// This works due to binding "mySet" as this. + +var myFun = function () { + console.log(this); +}; +['bar', 'baz'].forEach(x => myFun.bind(x)); +// This works using the "bind" function. It creates a lambda forwarding the argument. + +</pre> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li>{{jsxref("Function.prototype.call()")}}</li> + <li>{{jsxref("Function.prototype.apply()")}}</li> + <li>{{jsxref("Function.prototype.bind()")}}</li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/cant_access_lexical_declaration_before_init/index.html b/files/ru/web/javascript/reference/errors/cant_access_lexical_declaration_before_init/index.html new file mode 100644 index 0000000000..e5c0553e8a --- /dev/null +++ b/files/ru/web/javascript/reference/errors/cant_access_lexical_declaration_before_init/index.html @@ -0,0 +1,60 @@ +--- +title: 'ReferenceError: can''t access lexical declaration`X'' before initialization' +slug: Web/JavaScript/Reference/Errors/Cant_access_lexical_declaration_before_init +tags: + - Errors + - JavaScript + - ReferenceError +translation_of: Web/JavaScript/Reference/Errors/Cant_access_lexical_declaration_before_init +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщение">Сообщение</h2> + +<pre class="syntaxbox">ReferenceError: can't access lexical declaration `X' before initialization (Firefox) +ReferenceError: 'x' is not defined (Chrome) +</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>{{jsxref("ReferenceError")}}</p> + +<h2 id="Что_случилось">Что случилось?</h2> + +<p>Попытка доступа к лексической переменной до ее инициализации. Это может произойти в любом блоке, если попытаться обратиться к переменной, объявленной с помощью ключевых слов <code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/let">let</a></code> или <code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/const">const</a></code> до того, как им было присвоено значение.</p> + +<h2 id="Примеры">Примеры</h2> + +<h3 id="Неправильно">Неправильно</h3> + +<p>Здесь переменная "foo" заново объявляется внутри блока с помощью ключевого слова <code>let</code>.</p> + +<pre class="brush: js example-bad">function test() { + let foo = 33; + if (true) { + let foo = (foo + 55); + // ReferenceError: can't access lexical + // declaration `foo' before initialization + } +} +test(); +</pre> + +<h3 id="Правильно">Правильно</h3> + +<p>Чтобы изменить "foo" в теле выражения if, надо убрать ключевое слово <code>let</code> и таким образом избавиться от повторного объявления.</p> + +<pre class="brush: js example-good">function test(){ + let foo = 33; + if (true) { + foo = (foo + 55); + } +} +test(); +</pre> + +<h2 id="См._также">См. также</h2> + +<ul> + <li><a href="/en-US/docs/Web/JavaScript/Reference/Statements/let#Temporal_Dead_Zone_and_errors_with_let">Temporal Dead Zone and errors with let</a></li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/cant_access_property/index.html b/files/ru/web/javascript/reference/errors/cant_access_property/index.html new file mode 100644 index 0000000000..df4ab49b2a --- /dev/null +++ b/files/ru/web/javascript/reference/errors/cant_access_property/index.html @@ -0,0 +1,58 @@ +--- +title: >- + TypeError: can't access property "x" of "y"(Тип ошибки: не удается получить + доступ к свойству "x" из "y") +slug: Web/JavaScript/Reference/Errors/Cant_access_property +translation_of: Web/JavaScript/Reference/Errors/Cant_access_property +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Message">Message</h2> + +<pre class="syntaxbox">TypeError: не удается получить свойство {x} неопределенной или нулевой ссылки (Edge) +TypeError: не удается получить доступ к свойству {x} of {y} (Firefox) +TypeError: {y} не определен, не может получить доступ к свойству {x} (Firefox) +TypeError: {y} имеет значение null, не может получить доступ к свойству {x} (Firefox) + +Образцы: +TypeError: x не определен, не может получить доступ к свойству "prop" +TypeError: x имеет значение null, не может получить доступ к свойству "prop" +TypeError: не удается получить доступ к свойству "prop" неопределенного +TypeError: не удается получить доступ к свойству "prop" значения null + +</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>{{jsxref("TypeError")}}.</p> + +<h2 id="Что_не_так">Что не так?</h2> + +<p>Доступ к собственности осуществлялся {{jsxref("undefined")}} или {{jsxref("null")}} переменными</p> + +<h2 id="Примеры">Примеры</h2> + +<h3 id="Неправильные_примеры">Неправильные примеры</h3> + +<pre class="brush: js example-bad">// undefined and null cases on which the substring method won't work +var foo = undefined; +foo.substring(1); // TypeError: x не определен, не может получить доступ к свойству substring + +var foo = null; +foo.substring(1); // TypeError: x имеет значение null, не может получить доступ к свойству substring +</pre> + +<h3 id="Исправление_проблемы">Исправление проблемы</h3> + +<p>Чтобы исправить указатель null на неопределенные или нулевые значения, можно использовать оператор typeof, например.</p> + +<pre class="brush: js">if (typeof foo !== 'undefined') { + // Теперь мы знаем, что foo определен. +}</pre> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li>{{jsxref("undefined")}}</li> + <li>{{jsxref("null")}}</li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/cant_assign_to_property/index.html b/files/ru/web/javascript/reference/errors/cant_assign_to_property/index.html new file mode 100644 index 0000000000..fd1e8a30e5 --- /dev/null +++ b/files/ru/web/javascript/reference/errors/cant_assign_to_property/index.html @@ -0,0 +1,52 @@ +--- +title: 'TypeError: can''t assign to property "x" on "y": not an object' +slug: Web/JavaScript/Reference/Errors/Cant_assign_to_property +translation_of: Web/JavaScript/Reference/Errors/Cant_assign_to_property +--- +<div>{{jsSidebar("Errors")}}</div> + +<div>Ошибка строгого режима JavaScript "can't assign to property" ("невозможно присвоить свойство") происходит в тот момент, когда Вы пытаетесь создать свойство примитивного типа данных (такого как символ, строка, число или булевое значение). Примитивные типы данных не могут содержать никаких свойств. </div> + +<h2 id="Message">Message</h2> + +<pre class="syntaxbox notranslate">TypeError: <code class="highlighted" id="line-87">can't assign to property "x" on {y}: not an object</code> (Firefox) +TypeError: Cannot create property 'x' on {y} (Chrome) +</pre> + +<h2 id="Error_type">Error type</h2> + +<p>{{jsxref("TypeError")}}.</p> + +<h2 id="What_went_wrong">What went wrong?</h2> + +<p>In {{jsxref("Strict_mode")}}, a {{jsxref("TypeError")}} is raised when attempting to create a property on <a href="/en-US/docs/Glossary/primitive">primitive</a> value such as a <a href="/en-US/docs/Glossary/symbol">symbol</a>, a <a href="/en-US/docs/Glossary/string">string</a>, a <a href="/en-US/docs/Glossary/number">number</a> or a <a href="/en-US/docs/Glossary/boolean">boolean</a>. <a href="/en-US/docs/Glossary/Primitive">Primitive</a> values cannot hold any <a href="/en-US/docs/Glossary/property/JavaScript">property</a>.</p> + +<p>The problem might be that an unexpected value is flowing at an unexpected place, or that an object variant of a {{jsxref("String")}} or a {{jsxref("Number")}} is expected.</p> + +<h2 id="Examples">Examples</h2> + +<h3 id="Invalid_cases">Invalid cases</h3> + +<pre class="brush: js example-bad notranslate">'use strict'; + +var foo = "my string"; +// The following line does nothing if not in strict mode. +foo.bar = {}; // <span class="message-body-wrapper"><span class="message-flex-body"><span class="devtools-monospace message-body">TypeError: can't assign to property "bar" on "my string": not an object</span></span></span> +</pre> + +<h3 id="Fixing_the_issue">Fixing the issue</h3> + +<p>Either fix the code to prevent the <a href="/en-US/docs/Glossary/primitive">primitive</a> from being used in such places, or fix the issue is to create the object equivalent {{jsxref("Object")}}.</p> + +<pre class="brush: js example-good notranslate">'use strict'; + +var foo = new String("my string"); +foo.bar = {}; +</pre> + +<h2 id="See_also">See also</h2> + +<ul> + <li>{{jsxref("Strict_mode")}}</li> + <li><a href="/en-US/docs/Glossary/primitive">primitive</a></li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/cant_define_property_object_not_extensible/index.html b/files/ru/web/javascript/reference/errors/cant_define_property_object_not_extensible/index.html new file mode 100644 index 0000000000..59499e302d --- /dev/null +++ b/files/ru/web/javascript/reference/errors/cant_define_property_object_not_extensible/index.html @@ -0,0 +1,65 @@ +--- +title: 'TypeError: can''t define property "x": "obj" is not extensible' +slug: Web/JavaScript/Reference/Errors/Cant_define_property_object_not_extensible +tags: + - Error + - Errors + - JavaScript + - TypeError + - Исключение +translation_of: Web/JavaScript/Reference/Errors/Cant_define_property_object_not_extensible +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщение">Сообщение</h2> + +<pre>TypeError: Cannot create property for a non-extensible object (Edge) +TypeError: can't define property "x": "obj" is not extensible (Firefox) +TypeError: Cannot define property: "x", object is not extensible. (Chrome)</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>{{jsxref("TypeError")}}</p> + +<h2 id="Что_произошло_не_так">Что произошло не так?</h2> + +<p>Обычно, объект расширяемый и к нему можно добавать новые свойства. Однако в этой ситуации {{jsxref("Object.preventExtensions()")}} сделал объект нерасширяемым, так что у него не может появиться других свойств, отличных от тех, которые были объявлены когда объект стал нерасширяемым.</p> + +<h2 id="Примеры">Примеры</h2> + +<p>В строгом режиме при попытке добавить новые свойства в нерасширяемый объект возникает ошибка TypeError. В нестрогом режиме добавление свойства "x" игнорируется.</p> + +<pre class="brush: js example-bad">'use strict'; + +var obj = {}; +Object.preventExtensions(obj); + +obj.x = 'foo'; +// TypeError: can't define property "x": "obj" is not extensible +</pre> + +<p>В обеих, строгом и нестрогом режимах, вызов {{jsxref("Object.defineProperty()")}} вызывает исключнеие при добавлении нового свойства в нерасширяемый объект.</p> + +<pre class="brush: js example-bad">var obj = { }; +Object.preventExtensions(obj); + +Object.defineProperty(obj, + 'x', { value: "foo" } +); +// TypeError: can't define property "x": "obj" is not extensible +</pre> + +<p>Чтобы исправить эту ошибку, необходимо удалить вызов {{jsxref("Object.preventExtensions()")}} полностью или переместить его в положение, чтобы сначала свойство добавлялось, а потом объект помечался как нерасширяемый. Конечно вы также можете удалить свойство, которое пытались добавить, если оно вам не нужно.</p> + +<pre class="brush: js example-good">'use strict'; + +var obj = {}; +obj.x = 'foo'; // add property first and only then prevent extensions + +Object.preventExtensions(obj);</pre> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li>{{jsxref("Object.preventExtensions()")}}</li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/cant_delete/index.html b/files/ru/web/javascript/reference/errors/cant_delete/index.html new file mode 100644 index 0000000000..88dd78272d --- /dev/null +++ b/files/ru/web/javascript/reference/errors/cant_delete/index.html @@ -0,0 +1,60 @@ +--- +title: >- + TypeError: property "x" is non-configurable and can't be deleted(свойство "x" + не настраивается и не может быть удалено) +slug: Web/JavaScript/Reference/Errors/Cant_delete +translation_of: Web/JavaScript/Reference/Errors/Cant_delete +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщение">Сообщение</h2> + +<pre class="syntaxbox">TypeError: вызов delete на 'x' не разрешен в строгом режиме (Edge) +TypeError: свойство "x" не настраивается и не может быть удалено. (браузер Firefox) +TypeError: не удается удалить свойство "x" из #<Object> (Chrome) +</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>{{jsxref("TypeError")}} in strict mode only.</p> + +<h2 id="Что_пошло_не_так">Что пошло не так?</h2> + +<p> </p> + +<p>Была сделана попытка удалить свойство, но это свойство не изменяется. Настраиваемый атрибут определяет, можно ли удалить свойство из объекта и можно ли изменить его атрибуты (отличные от доступных для записи).</p> + +<p>Эта ошибка возникает только в коде строгого режима. В нестрогом коде операция возвращает false.</p> + +<p> </p> + +<h2 id="Примеры">Примеры</h2> + +<p>Не настраиваемые свойства не очень распространены, но их можно создать с помощью {{jsxref("Object.defineProperty()")}} или {{jsxref("Object.freeze()")}}.</p> + +<pre class="brush: js example-bad">'use strict'; +var obj = Object.freeze({name: 'Elsa', score: 157}); +delete obj.score; // TypeError + +'use strict'; +var obj = {}; +Object.defineProperty(obj, 'foo', {value: 2, configurable: false}); +delete obj.foo; // TypeError + +'use strict'; +var frozenArray = Object.freeze([0, 1, 2]); +frozenArray.pop(); // TypeError +</pre> + +<p>В JavaScript также встроено несколько настраиваемых свойств. Возможно, вы пытались удалить математическую константу.</p> + +<pre class="brush: js example-bad">'use strict'; +delete Math.PI; // TypeError</pre> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li><a href="/en-US/docs/Web/JavaScript/Reference/Operators/delete">delete operator</a></li> + <li>{{jsxref("Object.defineProperty()")}}</li> + <li>{{jsxref("Object.freeze()")}}</li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/cant_redefine_property/index.html b/files/ru/web/javascript/reference/errors/cant_redefine_property/index.html new file mode 100644 index 0000000000..f164596b55 --- /dev/null +++ b/files/ru/web/javascript/reference/errors/cant_redefine_property/index.html @@ -0,0 +1,49 @@ +--- +title: >- + TypeError: can't redefine non-configurable property "x"(Тип ошибки: не удается + переопределить настраиваемое свойство "x") +slug: Web/JavaScript/Reference/Errors/Cant_redefine_property +translation_of: Web/JavaScript/Reference/Errors/Cant_redefine_property +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщения">Сообщения</h2> + +<pre class="syntaxbox">TypeError: невозможно изменить свойство, недоступное для записи {x} (Edge) +TypeError: невозможно переопределить не настраиваемое свойство "x" (Firefox) +TypeError: не удается переопределить свойство: "x" (Chrome) +</pre> + +<h2 id="Тип_ошибки">Тип ошибки </h2> + +<p>{{jsxref("TypeError")}}</p> + +<h2 id="Что_не_так">Что не так?</h2> + +<p>Была предпринята попытка переопределить свойство, но это свойство не настраивается. Настраиваемый атрибут определяет, можно ли удалить свойство из объекта и можно ли изменить его атрибуты (отличные от доступных для записи). Обычно свойства объекта, созданного инициализатором объекта, настраиваются. Однако, например, при использовании {{jsxref("Object.defineProperty()")}}, свойство не настраивается по умолчанию.</p> + +<h2 id="Примеры">Примеры</h2> + +<h3 id="Не_настраиваемые_свойства_созданные_Object.defineProperty">Не настраиваемые свойства, созданные <code>Object.defineProperty</code></h3> + +<p>The {{jsxref("Object.defineProperty()")}} создает не настраиваемые свойства, если они не указаны как настраиваемые.</p> + +<pre class="brush: js example-bad">var obj = Object.create({}); +Object.defineProperty(obj, "foo", {value: "bar"}); + +Object.defineProperty(obj, "foo", {value: "baz"}); +// TypeError: не удается переопределить не настраиваемое свойство "foo" +</pre> + +<p>Вам нужно будет установить свойство "foo" в конфигурируемое, если вы собираетесь переопределить его позже в коде.</p> + +<pre class="brush: js example-good">var obj = Object.create({}); +Object.defineProperty(obj, "foo", {value: "bar", configurable: true}); +Object.defineProperty(obj, "foo", {value: "baz", configurable: true});</pre> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li><a href="/en-US/docs/Web/JavaScript/Data_structures#Properties">[[Configurable]]</a></li> + <li>{{jsxref("Object.defineProperty()")}}</li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/cyclic_object_value/index.html b/files/ru/web/javascript/reference/errors/cyclic_object_value/index.html new file mode 100644 index 0000000000..cfbf6eb56c --- /dev/null +++ b/files/ru/web/javascript/reference/errors/cyclic_object_value/index.html @@ -0,0 +1,70 @@ +--- +title: 'TypeError: cyclic object value(TypeError: циклическое значение объекта)' +slug: Web/JavaScript/Reference/Errors/Cyclic_object_value +tags: + - Ошибка + - Ошибки +translation_of: Web/JavaScript/Reference/Errors/Cyclic_object_value +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщения">Сообщения</h2> + +<pre class="syntaxbox notranslate">TypeError: циклическое значение объекта (Firefox) +TypeError: преобразование круговой структуры в JSON (Chrome и Opera) +TypeError: циклическая ссылка в аргументе значения не поддерживается (Edge) +</pre> + +<h2 id="Тип_ошибки">Тип ошибки?</h2> + +<p>{{jsxref("TypeError")}}</p> + +<h2 id="Что_не_так">Что не так?</h2> + +<p>The <a href="https://www.json.org/">JSON format</a> per se doesn't support object references (although an <a href="http://tools.ietf.org/html/draft-pbryan-zyp-json-ref-03">IETF draft exists</a>), hence {{jsxref("JSON.stringify()")}} doesn't try to solve them and fail accordingly.</p> + +<h2 id="Примеры">Примеры</h2> + +<p>В круговой структуре как эта</p> + +<pre class="brush: js notranslate">var circularReference = {otherData: 123}; +circularReference.myself = circularReference; +</pre> + +<p>{{jsxref("JSON.stringify()")}} закончится неудачей</p> + +<pre class="brush: js example-bad notranslate">JSON.stringify(circularReference); +// TypeError: циклическое значение объекта +</pre> + + + +<p>Для сериализации циклических ссылок можно использовать библиотеку, которая их поддерживает (например, cycle.js) или самостоятельно реализовать решение, которое потребует поиска и замены (или удаления) циклических ссылок сериализуемыми значениями.</p> + +<p>Во фрагменте кода ниже показано, как найти и отфильтровать циклическую ссылку (что приводит к потере данных) с помощью параметра <code>replacer</code>{{jsxref("JSON.stringify()")}}:</p> + + + +<pre class="brush: js notranslate">const getCircularReplacer = () => { + const seen = new WeakSet(); + return (key, value) => { + if (typeof value === "object" && value !== null) { + if (seen.has(value)) { + return; + } + seen.add(value); + } + return value; + }; +}; + +JSON.stringify(circularReference, getCircularReplacer()); +// {"otherData":123} +</pre> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li>{{jsxref("JSON.stringify")}}</li> + <li><a href="https://github.com/douglascrockford/JSON-js/blob/master/cycle.js">cycle.js</a> – вводит две функции, JSON.decycle и JSON.retrocycle, что дает возможность кодирования и декодирования циклических структур и групп обеспечения доступности баз данных в расширенный и обратно совместимый формат JSON.</li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/dead_object/index.html b/files/ru/web/javascript/reference/errors/dead_object/index.html new file mode 100644 index 0000000000..de666b01d8 --- /dev/null +++ b/files/ru/web/javascript/reference/errors/dead_object/index.html @@ -0,0 +1,48 @@ +--- +title: >- + TypeError: can't access dead object (Тип ошибки:не удается получить доступ к + мертвому объекту) +slug: Web/JavaScript/Reference/Errors/Dead_object +translation_of: Web/JavaScript/Reference/Errors/Dead_object +--- +<div>{{JSSidebar("Errors")}}</div> + +<h2 id="Сообщение">Сообщение</h2> + +<pre class="syntaxbox">TypeError: can't access dead object +</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>{{jsxref("TypeError")}}</p> + +<h2 id="Что_не_так">Что не так?</h2> + +<p>Для улучшения использования памяти и предотвращения утечек памяти Firefox запрещает надстройкам сохранять строгие ссылки на объекты DOM после уничтожения родительского документа. Мертвый объект содержит сильную ссылку (keep alive) на элемент DOM, который сохраняется даже после того, как он был уничтожен в DOM. Чтобы избежать этих проблем, ссылки на узлы DOM во внешнем документе должны храниться в объекте, который относится к этому документу, и очищаться при выгрузке документа или храниться как слабые ссылки.</p> + +<h2 id="Проверка_если_объект_мертв">Проверка, если объект мертв</h2> + +<p><a href="/en-US/docs/Mozilla/Tech/XPCOM/Language_Bindings/Components.utils">Components.utils</a> предлагает <code>isDeadWrapper()</code>метод, который может использовать привилегированный код. <br> + </p> + +<pre class="brush: js">if (Components.utils.isDeadWrapper(window)) { + // dead +}</pre> + +<p>Непривилегированный код не имеет доступа к Component.utils и мог бы просто быть в состоянии поймать исключение.</p> + +<pre class="brush: js">try { + String(window); +} +catch (e) { + console.log("window is likely dead"); +}</pre> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li><a href="https://blog.mozilla.org/addons/2012/09/12/what-does-cant-access-dead-object-mean/">What does “can’t access dead object” mean?</a>(Что значит “не могу получить доступ к мертвому объекту”?)</li> + <li><a href="/en-US/docs/Extensions/Common_causes_of_memory_leaks_in_extensions">Common causes of memory leaks in extensions</a>(Распространенные причины утечек памяти в расширениях)</li> + <li><a href="/en-US/docs/Mozilla/Tech/XPCOM/Language_Bindings/Components.utils">Components.utils</a></li> + <li><a href="/en-US/docs/Mozilla/Zombie_compartments">Zombie Compartments</a></li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/delete_in_strict_mode/index.html b/files/ru/web/javascript/reference/errors/delete_in_strict_mode/index.html new file mode 100644 index 0000000000..de2b1bbce1 --- /dev/null +++ b/files/ru/web/javascript/reference/errors/delete_in_strict_mode/index.html @@ -0,0 +1,68 @@ +--- +title: >- + SyntaxError: applying the 'delete' operator to an unqualified name is + deprecated (SyntaxError: применение оператора 'delete' к неполному имени не + рекомендуется) +slug: Web/JavaScript/Reference/Errors/Delete_in_strict_mode +translation_of: Web/JavaScript/Reference/Errors/Delete_in_strict_mode +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщение">Сообщение</h2> + +<pre class="syntaxbox">SyntaxError: вызов delete on expression запрещен в строгом режиме в (Edge) +SyntaxError: применение оператора 'delete' к неполному имени не рекомендуется в (Firefox) +SyntaxError: удаление неполного идентификатора в строгом режиме запрещенно в (Chrome) +</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>{{jsxref("SyntaxError")}} только в строгом режиме.</p> + +<h2 id="В_чем_ошибка">В чем ошибка?</h2> + +<p>Обычные переменные в JavaScript нельзя удалить с помощью оператора <code>delete</code>. В строгом режиме попытка удалить переменную вызовет ошибку и не будет разрешена.</p> + +<p>Оператор <code>delete </code>может удалять только свойства объекта. Свойства объекта "квалифицированы", если они конфигурируемы.</p> + +<p>В отличие от общепринятого мнения, оператор <code>delete </code>не имеет ничего общего с непосредственным освобождением памяти. Управление памятью осуществляется косвенным образом через нарушение ссылок см.<a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management">memory management</a> . В разделе управление памятью и страницы оператора delete для более подробной информации.</p> + +<p>Эта ошибка возникает только в коде строгого режима. В нестрогом коде операция просто возвращает false.</p> + +<p> </p> + +<h2 id="Примеры">Примеры</h2> + +<p>Попытка удалить простую переменную не работает в JavaScript и выдает ошибку в строгом режиме:</p> + +<pre class="brush: js example-bad">'use strict'; + +var x; + +// ... + +delete x; + +// SyntaxError: применение оператора 'delete' к неполному имени является устаревшим +</pre> + +<p>Чтобы освободить содержимое переменной, задайте для нее значение {{jsxref("null")}}:</p> + +<pre class="brush: js example-good">'use strict'; + +var x; + +// ... + +x = null; + +// X может быть собран "мусор" +</pre> + +<h2 id="Смотри_также">Смотри также</h2> + +<ul> + <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Operators/delete">delete</a></code></li> + <li><a href="/en-US/docs/Web/JavaScript/Memory_Management">Memory management</a></li> + <li><a href="/en-US/docs/Web/JavaScript/Reference/Errors/Cant_delete">TypeError: property "x" is non-configurable and can't be deleted</a>(TypeError: свойство "x" не настраивается и не может быть удалено)</li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/deprecated_caller_or_arguments_usage/index.html b/files/ru/web/javascript/reference/errors/deprecated_caller_or_arguments_usage/index.html new file mode 100644 index 0000000000..c42695a5aa --- /dev/null +++ b/files/ru/web/javascript/reference/errors/deprecated_caller_or_arguments_usage/index.html @@ -0,0 +1,76 @@ +--- +title: 'Ошибка Ссылки: устаревший вызывающий объект или использование аргументов' +slug: Web/JavaScript/Reference/Errors/Deprecated_caller_or_arguments_usage +tags: + - JavaScript + - Ошибки + - Строгий режим + - предупреждение +translation_of: Web/JavaScript/Reference/Errors/Deprecated_caller_or_arguments_usage +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Messageсообщение">Message(сообщение)</h2> + +<pre class="syntaxbox">TypeError(Ошибка Типа): 'arguments', 'callee' и 'caller' являются ограниченными свойствами функции и не могут быть доступны в этом контексте (EDGE) +Warning: ReferenceError(Ошибка Ссылки): deprecated caller usage (устаревшие использование вызывающего абонента Firefox) +Warning: ReferenceError(Ошибка Ссылки): deprecated arguments usage (использование устаревших аргументов Firefox) +TypeError(Ошибка Типа): 'callee' и 'caller' (не может быть доступен в строгом режиме safari) +</pre> + +<h2 id="Error_type_Тип_ошибки">Error type (Тип ошибки)</h2> + +<p>Предупреждение строгого режима, при котором произошла операция {{jsxref("ReferenceError")}} выполнение JavaScript не будет остановлено.</p> + +<h2 id="What_went_wrongЧто_пошло_не_так">What went wrong?(Что пошло не так?)</h2> + +<p>В строгом режиме используются свойства {{jsxref("Function.caller")}} или {{jsxref("Function.arguments")}} которых не должны быть. Они являются устаревшими, потому что они утечка вызывающей функции, являются нестандартными, и их трудно оптимизировать, и это потенциально опасный для производительности компонент. </p> + +<h2 id="ExamplesПримеры">Examples(Примеры)</h2> + +<h3 id="Устаревшая_function.caller_или_arguments.callee.caller">Устаревшая <code>function.caller</code> или <code>arguments.callee.caller</code></h3> + +<p>{{jsxref("Function.caller")}} и <code><a href="/en-US/docs/Web/JavaScript/Reference/Functions/arguments/callee">arguments.callee.caller</a></code> являются устаревшими (Дополнительные сведения см. в справочных статьях).</p> + +<pre class="brush: js example-bad">'use strict'; + +function myFunc() { + if (myFunc.caller == null) { + return 'The function was called from the top!'; + } else { + return 'This function\'s caller was ' + myFunc.caller; + } +} + +myFunc(); +// Warning: ReferenceError: устаревшее использование вызывающего абонента +// "функция была вызвана сверху!"</pre> + +<h3 id="Function.arguments"><code>Function.arguments</code></h3> + +<p>{{jsxref("Function.arguments")}} является устаревшим (Дополнительные сведения см. в справочной статье).</p> + +<pre class="brush: js example-bad">'use strict'; + +function f(n) { g(n - 1); } + +function g(n) { + console.log('before: ' + g.arguments[0]); + if (n > 0) { f(n); } + console.log('after: ' + g.arguments[0]); +} + +f(2); + +console.log('returned: ' + g.arguments); +// Warning: ReferenceError: использование устаревших аргументов +</pre> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li><a href="/en-US/docs/Web/JavaScript/Reference/Deprecated_and_obsolete_features">Deprecated and obsolete features</a> (Устаревшие функции)</li> + <li><a href="/en-US/docs/Web/JavaScript/Reference/Strict_mode">Strict mode</a> (строгий режим)</li> + <li>{{jsxref("Function.arguments")}}</li> + <li>{{jsxref("Function.caller")}} и <code><a href="/en-US/docs/Web/JavaScript/Reference/Functions/arguments/callee">arguments.callee.caller</a></code></li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/deprecated_expression_closures/index.html b/files/ru/web/javascript/reference/errors/deprecated_expression_closures/index.html new file mode 100644 index 0000000000..40dc8dc913 --- /dev/null +++ b/files/ru/web/javascript/reference/errors/deprecated_expression_closures/index.html @@ -0,0 +1,76 @@ +--- +title: 'Предупреждение: затворы выражения являются устаревшими' +slug: Web/JavaScript/Reference/Errors/Deprecated_expression_closures +tags: + - JavaScript + - Warning +translation_of: Web/JavaScript/Reference/Errors/Deprecated_expression_closures +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщение">Сообщение</h2> + +<pre class="syntaxbox">Warning: замыкания выражений являются устаревшими +</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>Предупреждающий. Выполнение скрипта не будет остановлено.</p> + +<h2 id="Что_пошло_не_так">Что пошло не так?</h2> + +<p>Нестандартный синтаксис закрытия выражений (сокращенный синтаксис функций) устарел и больше не должен использоваться. Этот синтаксис будет полностью удален в Этот синтаксис будет полностью удален в {{bug(1083458)}} а скрипты с его помощью {{jsxref("SyntaxError")}} затем.</p> + +<h2 id="Примеры">Примеры</h2> + +<h3 id="Неправильтный_синтаксис">Неправильтный синтаксис</h3> + +<p>Замыкания выражений пропускают фигурные скобки или операторы return из объявлений функций или определений методов в объектах.</p> + +<pre class="brush: js example-bad">var x = function() 1; + +var obj = { + count: function() 1 +}; +</pre> + +<h3 id="Стандартный_синтаксис">Стандартный синтаксис</h3> + +<p>To convert the non-standard expression closures syntax to standard ECMAScript syntax, you can add curly braces and return statements.</p> + +<pre class="brush: js example-good">var x = function() { return 1; } + +var obj = { + count: function() { return 1; } +}; +</pre> + +<h3 id="Стандартный_синтаксис_с_использованием_функций_со_стрелками">Стандартный синтаксис с использованием функций со стрелками:</h3> + +<pre class="brush: js example-good">var x = () => 1;</pre> + +<h3 id="Стандартный_синтаксис_с_использованием_сокращенного_синтаксиса_метода">Стандартный синтаксис с использованием сокращенного синтаксиса метода</h3> + +<p>Замыкания выражений также можно найти с помощью getter'а и setter'а, например:</p> + +<pre class="brush: js example-bad">var obj = { + get x() 1, + set x(v) this.v = v +}; +</pre> + +<p>With ES2015 <a href="/en-US/docs/Web/JavaScript/Reference/Functions/Method_definitions">method definitions</a>, это может быть конвертированно в:</p> + +<pre class="brush: js example-good">var obj = { + get x() { return 1 }, + set x(v) { this.v = v } +}; +</pre> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li><a href="/en-US/docs/Web/JavaScript/Reference/Operators/Expression_closures">Expression closures</a> (Закрытие выражений)</li> + <li><a href="/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions">Arrow functions</a> (Стрелочные функции)</li> + <li><a href="/en-US/docs/Web/JavaScript/Reference/Functions/Method_definitions">Method definitions</a> (Определение метода)</li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/deprecated_octal/index.html b/files/ru/web/javascript/reference/errors/deprecated_octal/index.html new file mode 100644 index 0000000000..b397c5adb3 --- /dev/null +++ b/files/ru/web/javascript/reference/errors/deprecated_octal/index.html @@ -0,0 +1,70 @@ +--- +title: 'SyntaxError: "0"-prefixed octal literals and octal escape seq. are deprecated' +slug: Web/JavaScript/Reference/Errors/Deprecated_octal +translation_of: Web/JavaScript/Reference/Errors/Deprecated_octal +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщение">Сообщение</h2> + +<p> </p> + +<pre>SyntaxError: Octal numeric literals and escape characters not allowed in strict mode (Edge) +SyntaxError: "0"-prefixed octal literals and octal escape sequences are deprecated; +for octal literals use the "0o" prefix instead</pre> + +<p>Перевод:</p> + +<pre class="syntaxbox">Ошибка синтаксиса: Восьмеричные числовые литералы и escape-последовательности, не разрешены в строгом режиме (Edge) +Ошибка синтаксиса: восьмеричные литералы с префиксом "0", и восьмеричные escape-последовательности считаются устаревшими; +для восьмеричных литералов используйте префикс "0o" +</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>{{jsxref("SyntaxError")}} только в строгом режиме.</p> + +<h2 id="Что_пошло_не_так"><strong>Что пошло не так?</strong></h2> + +<p>Восьмеричные литералы и восьмеричные escape-последовательности являются устаревшими и будут выдавать {{jsxref("SyntaxError")}} в строгом режиме. С ECMAScript2015 стандартным синтаксисом является использование ведующего нуля с последующеей заглавной или строчной латинской буквой "O" (<code>0o</code> bили <code>0O</code>)</p> + +<h2 id="Примеры">Примеры</h2> + +<h3 id="0-prefixed_octal_literals_(восьмеричные_литералы_с_префиксом_0)">"0"-prefixed octal literals (восьмеричные литералы с префиксом "0")<br> + </h3> + +<pre class="brush: js example-bad">"use strict"; + +03; + +// Ошибка синтаксиса: восьмеричные литералы с префиксом "0" и восьмеричные escape-последовательности считаются устаревшими +</pre> + +<h3 id="Octal_escape_sequences_(Восьмеричные_escape-последовательности)">Octal escape sequences (Восьмеричные escape-последовательности)</h3> + +<pre class="brush: js example-bad">"use strict"; + +"\251"; + +// SyntaxError: восьмеричные литералы с префиксом "0" и восьмеричные escape-последовательности считаются устаревшими +</pre> + +<h3 id="Valid_octal_numbers_(Допустимые_восьмеричные_числа)">Valid octal numbers (Допустимые восьмеричные числа)</h3> + +<p>Используйте ноль с последующей латинской буквой "o" или "O".</p> + +<pre class="brush: js example-good">0o3; +</pre> + +<p>Вместо escape-последовательностей можно использовать шестнадцатеричные escape-последовательности:</p> + +<pre class="brush: js"><span style="font-size: 1rem; letter-spacing: -0.00278rem;">'\xA9';</span></pre> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li><a href="/en-US/docs/Web/JavaScript/Reference/Lexical_grammar#Octal">Lexical grammar</a>(Лексическая грамматика)</li> + <li> + <p><a href="/en-US/docs/Web/JavaScript/Reference/Errors/Bad_octal">Warning: 08/09 is not a legal ECMA-262 octal constant</a>(Предупреждение: 08/09 нет законной восьмиштырьковой константы ECMA-262)</p> + </li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/deprecated_source_map_pragma/index.html b/files/ru/web/javascript/reference/errors/deprecated_source_map_pragma/index.html new file mode 100644 index 0000000000..8d15ecea2f --- /dev/null +++ b/files/ru/web/javascript/reference/errors/deprecated_source_map_pragma/index.html @@ -0,0 +1,113 @@ +--- +title: >- + SyntaxError: Using //@ to indicate sourceURL pragmas is deprecated. Use //# + instead +slug: Web/JavaScript/Reference/Errors/Deprecated_source_map_pragma +tags: + - Explorer + - JavaScript + - SyntaxError + - Ошибки + - карты кода +translation_of: Web/JavaScript/Reference/Errors/Deprecated_source_map_pragma +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщение">Сообщение</h2> + +<pre class="syntaxbox">Warning: SyntaxError: Using //@ to indicate sourceURL pragmas is deprecated. Use //# instead + +Warning: SyntaxError: Using //@ to indicate sourceMappingURL pragmas is deprecated. Use //# instead +</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>Предупреждение о том, что произошла ошибка {{jsxref("SyntaxError")}}. Выполнение скрипта не будет остановлено.</p> + +<h2 id="Что_пошло_не_так">Что пошло не так?</h2> + +<p>Есть устаревший синтаксис карты кода в исходном коде JavaScript.</p> + +<p>Файлы JavaScript нередко объединяются и сокращаются, чтобы доставлять их с сервера более эффективно. С <a href="http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/">картой кода</a>, отладчик может сопоставить код выполнения для исходных файлов.</p> + +<p>Спецификация карты кода меняет синтаксис из-за конфликта с IE всякий раз, когда он был найден в странице после <code>//@cc_on</code> было интерпретировано для включения условной компиляции в IE JScript engine. <a href="https://msdn.microsoft.com/en-us/library/8ka90k2e%28v=vs.94%29.aspx">Комментарий условной компиляции</a> для IE малоизвестен, и это разбивает карты кода <a href="https://bugs.jquery.com/ticket/13274">jQuery</a> и других библиотек.</p> + +<h2 id="Примеры">Примеры</h2> + +<h3 id="Устаревший_синтаксис">Устаревший синтаксис</h3> + +<p>Синтаксис с использованием знака "@" устарел.</p> + +<pre class="brush: js example-bad">//@ sourceMappingURL=http://example.com/path/to/your/sourcemap.map +</pre> + +<h3 id="Стандартный_синтаксис">Стандартный синтаксис</h3> + +<p>Используйте знак "#".</p> + +<pre class="brush: js example-good">//# sourceMappingURL=http://example.com/path/to/your/sourcemap.map</pre> + +<p>Или, в качестве альтернативы, вы можете установить заголовок для Вашего JavaScript-файла чтобы избежать комментирования:</p> + +<pre class="brush: js example-good">X-SourceMap: /path/to/file.js.map</pre> + +<h2 id="Браузерная_совместимость">Браузерная совместимость</h2> + +<p>{{CompatibilityTable}}</p> + +<div id="compat-desktop"> +<table class="compat-table"> + <tbody> + <tr> + <th>Характеристика</th> + <th>Chrome</th> + <th>Firefox (Gecko)</th> + <th>Internet Explorer</th> + <th>Opera</th> + <th>Safari</th> + </tr> + <tr> + <td>Новый синтаксис</td> + <td>{{CompatVersionUnknown}}</td> + <td>{{ CompatGeckoDesktop(24) }}</td> + <td>{{CompatUnknown}}</td> + <td>{{CompatVersionUnknown}}</td> + <td>{{CompatVersionUnknown}}</td> + </tr> + </tbody> +</table> +</div> + +<div id="compat-mobile"> +<table class="compat-table"> + <tbody> + <tr> + <th>Характеристика</th> + <th>Android</th> + <th>Chrome for Android</th> + <th>Firefox Mobile (Gecko)</th> + <th>IE Mobile</th> + <th>Opera Mobile</th> + <th>Safari Mobile</th> + </tr> + <tr> + <td>Новый синтаксис</td> + <td>{{CompatUnknown}}</td> + <td>{{CompatUnknown}}</td> + <td>{{ CompatGeckoMobile(24) }}</td> + <td>{{CompatUnknown}}</td> + <td>{{CompatUnknown}}</td> + <td>{{CompatUnknown}}</td> + </tr> + </tbody> +</table> +</div> + +<h2 id="sect1"> </h2> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li><a href="/en-US/docs/Tools/Debugger/How_to/Use_a_source_map">Как использовать карты кода – документация Firefox Tools</a></li> + <li><a href="http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/">Введение в карты кода – HTML5 rocks</a></li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/deprecated_string_generics/index.html b/files/ru/web/javascript/reference/errors/deprecated_string_generics/index.html new file mode 100644 index 0000000000..fa10558782 --- /dev/null +++ b/files/ru/web/javascript/reference/errors/deprecated_string_generics/index.html @@ -0,0 +1,103 @@ +--- +title: 'Warning: String.x is deprecated; use String.prototype.x instead' +slug: Web/JavaScript/Reference/Errors/Deprecated_String_generics +tags: + - JavaScript + - предупреждение +translation_of: Web/JavaScript/Reference/Errors/Deprecated_String_generics +--- +<div>{{jsSidebar("Errors")}}</div> + +<div>Поддержка строковых обобщенных методов прекращена с версии Firefox 68. Более старые версии предупреждают об использовании данных методов следующим образом:</div> + +<h2 id="Сообщение">Сообщение</h2> + +<pre class="syntaxbox">Warning: String.charAt is deprecated; use String.prototype.charAt instead +Warning: String.charCodeAt is deprecated; use String.prototype.charCodeAt instead +Warning: String.concat is deprecated; use String.prototype.concat instead +Warning: String.contains is deprecated; use String.prototype.contains instead +Warning: String.endsWith is deprecated; use String.prototype.endsWith instead +Warning: String.includes is deprecated; use String.prototype.includes instead +Warning: String.indexOf is deprecated; use String.prototype.indexOf instead +Warning: String.lastIndexOf is deprecated; use String.prototype.lastIndexOf instead +Warning: String.localeCompare is deprecated; use String.prototype.localeCompare instead +Warning: String.match is deprecated; use String.prototype.match instead +Warning: String.normalize is deprecated; use String.prototype.normalize instead +Warning: String.replace is deprecated; use String.prototype.replace instead +Warning: String.search is deprecated; use String.prototype.search instead +Warning: String.slice is deprecated; use String.prototype.slice instead +Warning: String.split is deprecated; use String.prototype.split instead +Warning: String.startsWith is deprecated; use String.prototype.startsWith instead +Warning: String.substr is deprecated; use String.prototype.substr instead +Warning: String.substring is deprecated; use String.prototype.substring instead +Warning: String.toLocaleLowerCase is deprecated; use String.prototype.toLocaleLowerCase instead +Warning: String.toLocaleUpperCase is deprecated; use String.prototype.toLocaleUpperCase instead +Warning: String.toLowerCase is deprecated; use String.prototype.toLowerCase instead +Warning: String.toUpperCase is deprecated; use String.prototype.toUpperCase instead +Warning: String.trim is deprecated; use String.prototype.trim instead +Warning: String.trimLeft is deprecated; use String.prototype.trimLeft instead +Warning: String.trimRight is deprecated; use String.prototype.trimRight instead +</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>Предупреждение. Исполнение кода JavaScript не будет остановлено.</p> + +<h2 id="Что_пошло_не_так">Что пошло не так?</h2> + +<p>Нестандартные обобщенные методы {{jsxref("String")}} являются устаревшими, поддержка в Firefox прекращена, начиная с версии 68. Строковые обобщенные методы предоставляют возможность применять методы экземпляров <code>String</code> к любым объектам.</p> + +<h2 id="Примеры">Примеры</h2> + +<h3 id="Устаревший_синтаксис">Устаревший синтаксис</h3> + +<pre class="brush: js example-bad">var num = 15; +String.replace(num, /5/, '2');</pre> + +<h3 id="Стандартный_синтаксис">Стандартный синтаксис</h3> + +<pre class="brush: js example-good">var num = 15; +String(num).replace(/5/, '2'); +</pre> + +<h2 id="Прослойка">Прослойка</h2> + +<p>Ниже приведен код прослойки, с помощью которой можно добавить поддержку обобщенных методов String в другие браузеры:</p> + +<pre class="brush: js">/*globals define*/ +// Предполагаем, что все требуемые методы экземпляров String уже присутствуют +// (если нет, для них так же можно использовать полифиллы) +(function() { + 'use strict'; + + var i, + // Мы могли построить массив методов следующим образом, однако метод + // getOwnPropertyNames() нельзя реализовать на JavaScript: + // Object.getOwnPropertyNames(String).filter(function(methodName) { + // return typeof String[methodName] === 'function'; + // }); + methods = [ + 'contains', 'substring', 'toLowerCase', 'toUpperCase', 'charAt', + 'charCodeAt', 'indexOf', 'lastIndexOf', 'startsWith', 'endsWith', + 'trim', 'trimLeft', 'trimRight', 'toLocaleLowerCase', 'normalize', + 'toLocaleUpperCase', 'localeCompare', 'match', 'search', 'slice', + 'replace', 'split', 'substr', 'concat', 'localeCompare' + ], + methodCount = methods.length, + assignStringGeneric = function(methodName) { + var method = String.prototype[methodName]; + String[methodName] = function(arg1) { + return method.apply(arg1, Array.prototype.slice.call(arguments, 1)); + }; + }; + + for (i = 0; i < methodCount; i++) { + assignStringGeneric(methods[i]); + } +}());</pre> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li>{{jsxref("String")}}</li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/deprecated_tolocaleformat/index.html b/files/ru/web/javascript/reference/errors/deprecated_tolocaleformat/index.html new file mode 100644 index 0000000000..e5d4eb3d00 --- /dev/null +++ b/files/ru/web/javascript/reference/errors/deprecated_tolocaleformat/index.html @@ -0,0 +1,90 @@ +--- +title: 'Warning: Date.prototype.toLocaleFormat (Является устаревшим)' +slug: Web/JavaScript/Reference/Errors/Deprecated_toLocaleFormat +translation_of: Web/JavaScript/Reference/Errors/Deprecated_toLocaleFormat +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщение">Сообщение</h2> + +<pre class="syntaxbox">Внимание: Date.prototype.toLocaleFormat устарело; рассмотрите возможность использования Intl.DateTimeFormat взамен. +</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>предупреждающий. Выполнение скрипта не будет остановлено.</p> + +<h2 id="Что_пошло_не_так">Что пошло не так? </h2> + +<p>Нестандартный {{jsxref("Date.prototype.toLocaleFormat")}} метод, устарел и больше не должен использоваться. Он использует строку формата в том же формате, ожидаемом<br> + <code>strftime()</code> функция в C. функция больше не доступна в Firefox 58+.</p> + +<h2 id="Примеры">Примеры</h2> + +<h3 id="Неправильный_синтаксис">Неправильный синтаксис</h3> + +<p>В {{jsxref("Date.prototype.toLocaleFormat")}} метод устарел и будет удален (поддержка кроссбраузерных браузеров, доступна только в Firefox).</p> + +<pre class="brush: js example-bad">var today = new Date(); +var date = today.toLocaleFormat('%A, %e. %B %Y'); + +console.log(date); +// In German locale +// "Freitag, 10. März 2017"</pre> + +<h3 id="Альтернативный_стандартный_синтаксис_с_использованием_ECMAScript_IntlAPI">Альтернативный стандартный синтаксис с использованием ECMAScript IntlAPI</h3> + +<p>Стандарт ECMA-402 (ECMAScript Intl API) определяет стандартные объекты и методы, которые позволяют форматировать дату и время с учетом языка (доступно в Chrome 24+, Firefox 29+, IE11+, Safari10+).</p> + +<p>You can now either use the {{jsxref("Date.prototype.toLocaleDateString")}} method if you just want to format one date.</p> + +<pre class="brush: js example-good">var today = new Date(); +var options = { weekday: 'long', year: 'numeric', + month: 'long', day: 'numeric' }; +var date = today.toLocaleDateString('de-DE', options); + +console.log(date); +// "Freitag, 10. März 2017" +</pre> + +<p> </p> + +<p>Или, вы можете использовать {{jsxref("DateTimeFormat", "Intl.DateTimeFormat")}} объект, который позволяет кэшировать объект с большинством вычислений, выполненных таким образом, чтобы Форматирование было быстрым. Это полезно, если у вас есть цикл дат для форматирования.</p> + +<pre class="brush: js example-good">var options = { weekday: 'long', year: 'numeric', + month: 'long', day: 'numeric' }; +var dateFormatter = new Intl.DateTimeFormat('de-DE', options) + +var dates = [Date.UTC(2012, 11, 20, 3, 0, 0), + Date.UTC(2014, 04, 12, 8, 0, 0)]; + +dates.forEach(date => console.log(dateFormatter.format(date))); + +// "Donnerstag, 20. Dezember 2012" +// "Montag, 12. Mai 2014" +</pre> + +<h3 id="Альтернативный_стандартный_ситнаксис_с_использованием_Дата_методов">Альтернативный стандартный ситнаксис с использованием Дата методов</h3> + +<p>{{jsxref("Date")}} объект предлагает несколько методов для построения пользовательской строки даты.</p> + +<pre class="brush: js example-bad">(new Date()).toLocaleFormat("%Y%m%d"); +// "20170310" +</pre> + +<p>Может быть преобразован в:</p> + +<pre class="brush: js example-good">let now = new Date(); +let date = now.getFullYear() * 10000 + + (now.getMonth() + 1) * 100 + now.getDate(); + +console.log(date); +// "20170310"</pre> + +<h2 id="Смотрите_также">Смотрите также </h2> + +<ul> + <li>{{jsxref("Date.prototype.toLocaleFormat")}}</li> + <li>{{jsxref("Date.prototype.toLocaleDateString")}}</li> + <li>{{jsxref("DateTimeFormat", "Intl.DateTimeFormat")}}</li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/equal_as_assign/index.html b/files/ru/web/javascript/reference/errors/equal_as_assign/index.html new file mode 100644 index 0000000000..4219e825ba --- /dev/null +++ b/files/ru/web/javascript/reference/errors/equal_as_assign/index.html @@ -0,0 +1,51 @@ +--- +title: >- + SyntaxError: test for equality (==) mistyped as assignment (=)?(тест на + равенство (==) опечатка как присваивание (=)?) +slug: Web/JavaScript/Reference/Errors/Equal_as_assign +translation_of: Web/JavaScript/Reference/Errors/Equal_as_assign +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщения">Сообщения</h2> + +<pre class="syntaxbox">Warning: SyntaxError: тест на равенство (==) опечатка как присваивание (=)? +</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>(Только в Firefox) {{jsxref("SyntaxError")}} предупреждение, в котором сообщается, только если <code>javascript.options.strict</code> предпочтение установлено в<code>true</code>.</p> + +<h2 id="Что_пошло_не_так">Что пошло не так?</h2> + +<p>Было присвоение ( = ), когда вы обычно ожидали тест на присвоение (==). Чтобы помочь отладке, JavaScript (с включенными строгими предупреждениями) предупреждает об этом шаблоне.</p> + +<h2 id="Примеры">Примеры</h2> + +<h3 id="Задание_в_условных_выражениях">Задание в условных выражениях</h3> + +<p>Рекомендуется не использовать простые назначения в условном выражении (например, if...else), поскольку при просмотре кода назначение можно спутать с равенством. Например, не используйте следующий код:</p> + +<pre class="brush: js example-bad">if (x = y) { + // делать правильные вещи +} +</pre> + +<p>Если необходимо использовать присваивание в условном выражении, то обычно вокруг него ставят дополнительные скобки. Например:</p> + +<pre class="brush: js">if ((x = y)) { + // делать правильные вещи +}</pre> + +<p>В противном случае вы, вероятно, хотели использовать оператор сравнения (например, = = или ===):</p> + +<pre class="brush: js">if (x == y) { + // делать правильные вещи +}</pre> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/if...else">if...else</a></code></li> + <li><a href="/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators">Comparison operators</a></li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/for-each-in_loops_are_deprecated/index.html b/files/ru/web/javascript/reference/errors/for-each-in_loops_are_deprecated/index.html new file mode 100644 index 0000000000..861f44e1e9 --- /dev/null +++ b/files/ru/web/javascript/reference/errors/for-each-in_loops_are_deprecated/index.html @@ -0,0 +1,163 @@ +--- +title: 'Предупреждение: циклы JavaScript 1.6 for-each-in устарели' +slug: Web/JavaScript/Reference/Errors/For-each-in_loops_are_deprecated +tags: + - Устаревшие циклы +translation_of: Web/JavaScript/Reference/Errors/For-each-in_loops_are_deprecated +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщение">Сообщение</h2> + +<pre class="syntaxbox">Предупреждение: циклы JavaScript 1.6 for-each-in устарели; вместо них рекомендуется использовать ES6 for-of +</pre> + +<h2 id="Что_пошло_не_так">Что пошло не так?</h2> + +<p>JavaScript 1.6's {{jsxref("Statements/for_each...in", "for each (variable in obj)")}} оператор устарел и будет удален в ближайшем будущем.</p> + +<h2 id="Примеры">Примеры</h2> + +<h3 id="Итерация_обьекта">Итерация обьекта</h3> + +<p>{{jsxref("Statements/for_each...in", "for each...in")}} используется для итерации по указанным значениям объектов.</p> + +<h4 id="Устаревший_синтаксис">Устаревший синтаксис</h4> + +<pre class="brush: js example-bad">var object = { a: 10, b: 20 }; + +for each (var x in object) { + console.log(x); // 10 + // 20 +} +</pre> + +<h4 id="Альтернативный_стандартный_синтаксис">Альтернативный стандартный синтаксис</h4> + +<p>Теперь вы можете использовать стандартный {{jsxref("Statements/for...in", "for...in")}} цикл для итерации по указанным ключам объекта и получения каждого значения внутри цикла:</p> + +<pre class="brush: js example-good">var object = { a: 10, b: 20 }; + +for (var key in object) { + var x = object[key]; + console.log(x); // 10 + // 20 +} +</pre> + +<p>Or, using {{jsxref("Statements/for...of", "for...of")}} (ES2015) and {{jsxref("Object.values")}} (ES2017), можно получить массив указанных значений объекта и выполнить итерацию по массиву следующим образом:</p> + +<pre class="brush: js example-good">var object = { a: 10, b: 20 }; + +for (var x of Object.values(object)) { + console.log(x); // 10 + // 20 +} +</pre> + +<h3 id="Итерация_массива">Итерация массива</h3> + +<p>{{jsxref("Statements/for_each...in", "for each...in")}} используется для итерации по заданным элементам массива.</p> + +<h4 id="Устаревший_синтаксис_2">Устаревший синтаксис</h4> + +<pre class="brush: js example-bad">var array = [10, 20, 30]; + +for each (var x in array) { + console.log(x); // 10 + // 20 + // 30 +} +</pre> + +<h4 id="Альтернативный_стандартный_синтаксис_2">Альтернативный стандартный синтаксис</h4> + +<p>Это теперь возможно с {{jsxref("Statements/for...of", "for...of")}} (ES2015) петли также.</p> + +<pre class="brush: js example-good">var array = [10, 20, 30]; + +for (var x of array) { + console.log(x); // 10 + // 20 + // 30 +} +</pre> + +<h3 id="Итерация_по_нулевому_массиву">Итерация по нулевому массиву</h3> + +<p>{{jsxref("Statements/for_each...in", "for each...in")}} ничего не делает, если указанное значение <code>null</code> или <code>undefined</code>, но {{jsxref("Statements/for...of", "for...of")}} выдаст исключение в этих случаях.</p> + +<h4 id="Непрвильный_синтаксис">Непрвильный синтаксис</h4> + +<pre class="brush: js example-bad">function func(array) { + for each (var x in array) { + console.log(x); + } +} +func([10, 20]); // 10 + // 20 +func(null); // prints nothing +func(undefined); // prints nothing +</pre> + +<h4 id="Альтернативный_стандартный_синтаксис_3">Альтернативный стандартный синтаксис</h4> + +<p>Переписать {{jsxref("Statements/for_each...in", "for each...in")}} операторы, чтобы значения могли быть <code>null</code> или <code>undefined</code> с{{jsxref("Statements/for...of", "for...of")}} также необходимо охранять {{jsxref("Statements/for...of", "for...of")}}.</p> + +<pre class="brush: js example-good">function func(array) { + if (array) { + for (var x of array) { + console.log(x); + } + } +} +func([10, 20]); // 10 + // 20 +func(null); // prints nothing +func(undefined); // prints nothing +</pre> + +<h3 id="Итерация_по_паре_ключ-значение_объекта">Итерация по паре ключ-значение объекта</h3> + +<h4 id="Неправильный_синтаксис">Неправильный синтаксис</h4> + +<p>Существует устаревшая идиома для итерации по парам ключ-значение указанного объекта с помощью {{jsxref("Statements/for_each...in", "for each...in")}} и осужденный {{jsxref("Iterator")}} обьект.</p> + +<pre class="brush: js example-bad">var object = { a: 10, b: 20 }; + +for each (var [key, value] in Iterator(object)) { + console.log(key, value); // "a", 10 + // "b", 20 +} +</pre> + +<h4 id="Альтернативный_стандартный_ситнтаксис">Альтернативный стандартный ситнтаксис</h4> + +<p>Теперь можно использовать стандартный цикл {{jsxref("Statements/for...in", "for...in")}} цикл для итерации по указанным ключам объекта и получения каждого значения внутри цикла:</p> + +<pre class="brush: js example-good">var object = { a: 10, b: 20 }; + +for (var key in object) { + var value = object[key]; + console.log(key, value); // "a", 10 + // "b", 20 +} +</pre> + +<p>Или, использовать {{jsxref("Statements/for...of", "for...of")}} (ES2015) и {{jsxref("Object.entries")}} (ES2017), можно получить массив указанных значений объекта и выполнить итерацию по массиву следующим образом:</p> + +<pre class="brush: js example-good">var object = { a: 10, b: 20 }; + +for (var [key, value] of Object.entries(object)) { + console.log(key, value); // "a", 10 + // "b", 20 +} +</pre> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li>{{jsxref("Statements/for...of", "for...of")}}</li> + <li>{{jsxref("Object.values")}}</li> + <li>{{jsxref("Object.entries")}}</li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/getter_only/index.html b/files/ru/web/javascript/reference/errors/getter_only/index.html new file mode 100644 index 0000000000..9dc64f048f --- /dev/null +++ b/files/ru/web/javascript/reference/errors/getter_only/index.html @@ -0,0 +1,81 @@ +--- +title: >- + TypeError: setting getter-only property "x"(установка свойства только для + геттера "x") +slug: Web/JavaScript/Reference/Errors/Getter_only +translation_of: Web/JavaScript/Reference/Errors/Getter_only +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщения">Сообщения</h2> + +<pre class="syntaxbox">TypeError: назначение свойств только для чтения не допускается в строгом режиме (Edge) +TypeError: установка свойства только для геттера "x" (Firefox) +TypeError: не удается установить свойство "prop" из #<Object>, который имеет только геттер (Chrome) + +</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>{{jsxref("TypeError")}} только в строгом режиме.</p> + +<h2 id="Что_пошло_не_так">Что пошло не так?</h2> + +<p>Предпринята попытка задать новое значение свойству, для которого указан только геттер. . Пока это молча будет проигнорировано в non-strict режиме, оно бросит {{jsxref("TypeError")}} в <a href="/en-US/docs/Web/JavaScript/Reference/Strict_mode">strict mode</a>.</p> + +<h2 id="Примеры">Примеры</h2> + +<p>В приведенном ниже примере показано, как установить getter для свойства. Он не задает сеттер, так TypeError выдается при попытке установить свойство температуры до 30. Дополнительные сведения см. Также в {{jsxref("Object.defineProperty()")}} странице.</p> + +<pre class="brush: js example-bad">"use strict"; + +function Archiver() { + var temperature = null; + Object.defineProperty(this, 'temperature', { + get: function() { + console.log('get!'); + return temperature; + } + }); +} + +var arc = new Archiver(); +arc.temperature; // 'get!' + +arc.temperature = 30; +// TypeError: setting getter-only property "temperature"</pre> + +<p>Чтобы устранить эту ошибку, необходимо либо удалить строку 16, в которой предпринята попытка задать свойство temperature, либо реализовать для нее сеттер, например, как показано ниже:</p> + +<pre class="brush: js example-good highlight[12]">"use strict"; + +function Archiver() { + var temperature = null; + var archive = []; + + Object.defineProperty(this, 'temperature', { + get: function() { + console.log('get!'); + return temperature; + }, + set: function(value) { + temperature = value; + archive.push({ val: temperature }); + } + }); + + this.getArchive = function() { return archive; }; +} + +var arc = new Archiver(); +arc.temperature; // 'get!' +arc.temperature = 11; +arc.temperature = 13; +arc.getArchive(); // [{ val: 11 }, { val: 13 }]</pre> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li>{{jsxref("Object.defineProperty()")}}</li> + <li>{{jsxref("Object.defineProperties()")}}</li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/identifier_after_number/index.html b/files/ru/web/javascript/reference/errors/identifier_after_number/index.html new file mode 100644 index 0000000000..9a0108616e --- /dev/null +++ b/files/ru/web/javascript/reference/errors/identifier_after_number/index.html @@ -0,0 +1,58 @@ +--- +title: >- + SyntaxError: identifier starts immediately after numeric literal(идентификатор + начинается сразу после числового литерала) +slug: Web/JavaScript/Reference/Errors/Identifier_after_number +translation_of: Web/JavaScript/Reference/Errors/Identifier_after_number +--- +<div>{{JSSidebar("Errors")}}</div> + +<h2 id="Сообщение">Сообщение</h2> + +<pre class="syntaxbox">SyntaxError: непредвиденный идентификатор после числового литерала (Edge) +SyntaxError: идентификатор запускается сразу после числового литерала (Firefox) +SyntaxError: непредвиденное число (Chrome) +</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>{{jsxref("SyntaxError")}}</p> + +<h2 id="Что_пошло_не_так">Что пошло не так?</h2> + +<p> </p> + +<p>Имена переменных, называемых {{Glossary("Identifier", "identifiers")}} соответствуют определенным правилам, которых должен придерживаться ваш код!</p> + +<p>Идентификатор JavaScript должен начинаться с буквы, символа подчеркивания ( _ ) или знака доллара ($). Они не могут начать с цифры! Только последующие символы могут быть цифрами (0-9).</p> + +<p> </p> + +<h2 id="Примеры">Примеры</h2> + +<h3 id="Имена_переменных_начинающиеся_с_числовых_литералов">Имена переменных, начинающиеся с числовых литералов</h3> + +<p>Имена переменных не могут начинаться с чисел в JavaScript. Следующие сбои:</p> + +<pre class="brush: js example-bad">var 1life = 'foo'; +// SyntaxError: идентификатор начинается сразу после числового литерала + +var foo = 1life; +// SyntaxError: идентификатор начинается сразу после числового литерала + +alert(1.foo); +// SyntaxError: идентификатор начинается сразу после числового литерала +</pre> + +<p>Вы можете переназвать вашу перемменную чтобы избежать ведущего числа.</p> + +<pre class="brush: js example-good">var life1 = 'foo'; +var foo = life1; +</pre> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li><a href="/en-US/docs/Web/JavaScript/Reference/Lexical_grammar">Lexical grammar</a></li> + <li><a href="/en-US/docs/Web/JavaScript/Guide/Grammar_and_types#Variables">Variables</a> in the <a href="/en-US/docs/Web/JavaScript/Guide">JavaScript Guide</a></li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/illegal_character/index.html b/files/ru/web/javascript/reference/errors/illegal_character/index.html new file mode 100644 index 0000000000..84a67e254f --- /dev/null +++ b/files/ru/web/javascript/reference/errors/illegal_character/index.html @@ -0,0 +1,70 @@ +--- +title: 'SyntaxError: illegal character' +slug: Web/JavaScript/Reference/Errors/Illegal_character +translation_of: Web/JavaScript/Reference/Errors/Illegal_character +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщение">Сообщение</h2> + +<pre class="syntaxbox">SyntaxError: illegal character (Firefox) +SyntaxError: Invalid or unexpected token (Chrome) +</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>{{jsxref("SyntaxError")}}</p> + +<h2 id="Что_пошло_не_так">Что пошло не так?</h2> + +<p>Присутсвует недопустимый или неожиданный знак, который не принадлежит данной позиции в коде. Используйте редактор, поддерживающий подсветку синтаксиса, и внимательно проверьте ваш код на предмет таких несовпадений, как знак минус (<code> - </code>) вместо тире (<code> – </code>) или простые кавычки (<code> " </code>) вместо нестандратных знаков цитирования (<code> “ </code>).</p> + +<h2 id="Примеры">Примеры</h2> + +<h3 id="Несоответсвующие_символы">Несоответсвующие символы</h3> + +<p>Некоторые символы выглядят одинаково, но становтся причиной того, что анализатор не выполняет итерпретацию вашего кода.</p> + +<pre class="brush: js example-bad">“This looks like a string”; +// SyntaxError: illegal character + +42 – 13; +// SyntaxError: illegal character +</pre> + +<p>Так должно работать:</p> + +<pre class="brush: js example-good">"This is actually a string"; + +42 - 13; +</pre> + +<h3 id="Пропущенные_символы">Пропущенные символы</h3> + +<p>Это просто <span class="st">—</span> пропустить символ здесь или там.</p> + +<pre class="brush: js example-bad">var colors = ['#000', #333', '#666']; +// SyntaxError: illegal character +</pre> + +<p>Добавляем пропущенную кавычку для <code><strong>'</strong>#333'</code> .</p> + +<pre class="brush: js example-good">var colors = ['#000', '#333', '#666'];</pre> + +<h3 id="Скрытые_символы">Скрытые символы</h3> + +<p>Подчас копирования кода из внешнего источника могут встречаться недействительные символы. Будьте внимательны!</p> + +<pre class="brush: js example-bad">var foo = 'bar'; +// SyntaxError: illegal character +</pre> + +<p>Если проверить этот код в редакторе вроде Vim, вы можете увидеть, что в коде присутсвтует символ, именуемый <a href="https://en.wikipedia.org/wiki/Zero-width_space">нулевой пробел (zero-width space (ZWSP) (U+200B))</a>.</p> + +<pre class="brush: js">var foo = 'bar';<200b></pre> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li><a href="/en-US/docs/Web/JavaScript/Reference/Lexical_grammar">Lexical grammar</a></li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/in_operator_no_object/index.html b/files/ru/web/javascript/reference/errors/in_operator_no_object/index.html new file mode 100644 index 0000000000..a61a8d5f41 --- /dev/null +++ b/files/ru/web/javascript/reference/errors/in_operator_no_object/index.html @@ -0,0 +1,71 @@ +--- +title: >- + TypeError: cannot use 'in' operator to search for 'x' in 'y'(не удается + использовать 'in' оператор поиска для 'x' в 'y') +slug: Web/JavaScript/Reference/Errors/in_operator_no_object +translation_of: Web/JavaScript/Reference/Errors/in_operator_no_object +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщения">Сообщения</h2> + +<pre class="syntaxbox">TypeError: недопустимый операнд в "in" (edge) +TypeError: правая часть 'in' должна быть объектом, есть 'x' (Firefox) +TypeError: невозможно использовать оператор 'in' для поиска 'x' в 'y' (Firefox, Chrome) + +</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>{{jsxref("TypeError")}}</p> + +<h2 id="Что_пошло_не_так">Что пошло не так?</h2> + +<p>Оператор in можно использовать только для проверки наличия свойства в объекте. Вы не можете искать в строках, числах или других примитивных типах.</p> + +<h2 id="Примеры">Примеры</h2> + +<h3 id="Поиск_в_строках">Поиск в строках</h3> + +<p>В отличие от других языков программирования (например, Python), поиск в строках с помощью оператора in невозможен.</p> + +<pre class="brush: js example-bad">"Hello" in "Hello World"; +// TypeError: cannot use 'in' operator to search for 'Hello' in 'Hello World'</pre> + +<p>Вместо этого вам нужно будет использовать{{jsxref("String.prototype.indexOf()")}}или примеры</p> + +<pre class="brush: js example-good">"Hello World".indexOf("Hello") !== -1; +// true</pre> + +<h3 id="Операнд_не_может_бытьnull_или_undefined">Операнд не может быть<code>null</code> или <code>undefined</code></h3> + +<p>Убедитесь, что объект, который вы осматриваете, на самом деле не {{jsxref("null")}} или {{jsxref("undefined")}}.</p> + +<pre class="brush: js example-bad">var foo = null; +"bar" in foo; +// TypeError: не удается использовать оператор 'in' для поиска 'bar' в 'foo' (Chrome) +// TypeError: правая часть 'in' должна быть объектом, полученным null (Firefox) +</pre> + +<p>Оператор in всегда ожидает объект.</p> + +<pre class="brush: js example-good">var foo = { baz: "bar" }; +"bar" in foo; // false + +"PI" in Math; // true +"pi" in Math; // false +</pre> + +<h3 id="Поиск_в_Массивах">Поиск в Массивах</h3> + +<p>Будьте осторожны при использовании оператора для поиска {{jsxref("Array")}} объекты. the <code>in</code> оператор проверяет номер индекса, а не его значение.</p> + +<pre class="brush: js">var trees = ['redwood', 'bay', 'cedar', 'oak', 'maple']; +3 in trees; // true +"oak" in trees; // false</pre> + +<h2 id="See_also">See also</h2> + +<ul> + <li><a href="/en-US/docs/Web/JavaScript/Reference/Operators/in"><code>in</code> operator</a></li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/index.html b/files/ru/web/javascript/reference/errors/index.html new file mode 100644 index 0000000000..08f8f1c808 --- /dev/null +++ b/files/ru/web/javascript/reference/errors/index.html @@ -0,0 +1,25 @@ +--- +title: JavaScript ссылки на ошибки +slug: Web/JavaScript/Reference/Errors +tags: + - JavaScript + - NeedsTranslation +translation_of: Web/JavaScript/Reference/Errors +--- +<p>{{jsSidebar("Errors")}}</p> + +<p>Ниже, Вы найдете список ошибок, которые возвращает JavaScript. Эти ошибки могут буть полезны при отладке, но неполадки не всегда сразу понятны. Страницы ниже предлагают дополнительную информацию об этих ошибках. Каждая ошибка это Объект на основании {{jsxref("Error")}} object, и имеет имя (<code>name)</code> и сообщение (<code>message)</code>.</p> + +<p>Ошибки отображенные в Web консоли могут содержать ссылку на соответствующую страницу ниже, чтобы помочь вам быстро понять проблему в коде.</p> + +<h2 id="Список_ошибок">Список ошибок</h2> + +<p>В представленном списке, каждая страница проименована (тип ошибки) и сообщение (более подробное удобочитаемое сообщение об ошибке). Вместе, эти два свойства послужат отправной точкой к пониманию и устранению ошибки. Для большей информации, перейдите по ссылкам ниже!</p> + +<p>{{ListSubPages("/ru/docs/Web/JavaScript/Reference/Errors")}}</p> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li><a href="/en-US/docs/Learn/JavaScript/First_steps/What_went_wrong">What went wrong? Troubleshooting JavaScript</a>: Вводный Учебник для начинающих для исправления ошибок JavaScript.</li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/invalid_array_length/index.html b/files/ru/web/javascript/reference/errors/invalid_array_length/index.html new file mode 100644 index 0000000000..317a3c4fb0 --- /dev/null +++ b/files/ru/web/javascript/reference/errors/invalid_array_length/index.html @@ -0,0 +1,76 @@ +--- +title: 'RangeError: invalid array length' +slug: Web/JavaScript/Reference/Errors/Invalid_array_length +tags: + - JavaScript + - Диапазон + - Массив + - Ошибка + - Размер массива +translation_of: Web/JavaScript/Reference/Errors/Invalid_array_length +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщение">Сообщение</h2> + +<pre class="syntaxbox">RangeError: invalid array length (Firefox) +RangeError: Invalid array length (Chrome) +RangeError: Invalid array buffer length (Chrome) +</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>{{jsxref("RangeError")}}</p> + +<h2 id="Что_пошло_не_так">Что пошло не так?</h2> + +<p>Ошибка, связанная с размером массива может произойти в следующих случаях:</p> + +<ul> + <li>При создании {{jsxref("Array")}} или {{jsxref("ArrayBuffer")}}, размер оказался либо отрицательным, либо равным или привышающим 2<sup>32</sup>, или</li> + <li>при установке свойства {{jsxref("Array.length")}} значение оказалось либо отрицательным, либо равным или привышающим 2<sup>32</sup>.</li> +</ul> + +<p>Поскольку свойство <code>length</code> в <code>Array</code> или <code>ArrayBuffer</code> представлено в виде беззнакового 32-битного целого числа (integer), значение этого свойства находится в диапазоне от 0 до 2<sup>32</sup>-1.</p> + +<p>В конструкторе (<code>new Array()</code>) первым аргументом является длина массива, поэтому при создании можно задать нужное значение. Так же, можно задать размер массива, обратившись к свойству <code>length</code> напрямую.</p> + +<h2 id="Примеры">Примеры</h2> + +<pre class="brush: js example-bad">new Array(Math.pow(2, 40)) +new Array(-1) +new ArrayBuffer(Math.pow(2, 32)) +new ArrayBuffer(-1) + +let a = []; +a.length = a.length - 1; // установка длинны -1 + +let b = new Array(Math.pow(2, 32) - 1); +b.length = b.length + 1; // установка длинны 2^32 +</pre> + +<h3 id="sect1"> </h3> + +<pre class="brush: js example-good">[ Math.pow(2, 40) ] // [ 1099511627776 ] +[ -1 ] // [ -1 ] +new ArrayBuffer(Math.pow(2, 32) - 1) +new ArrayBuffer(0) + +let a = []; +a.length = Math.max(0, a.length - 1); + +let b = new Array(Math.pow(2, 32) - 1); +b.length = Math.min(0xffffffff, b.length + 1); + +// 0xffffffff является шестнадцатеричным представлением +// 2^32 - 1, которое также можно записать в виде (-1 >>> 0)</pre> + +<p> </p> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li>{{jsxref("Array")}}</li> + <li>{{jsxref("Array.length")}}</li> + <li>{{jsxref("ArrayBuffer")}}</li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/invalid_assignment_left-hand_side/index.html b/files/ru/web/javascript/reference/errors/invalid_assignment_left-hand_side/index.html new file mode 100644 index 0000000000..3ce5c4ac6b --- /dev/null +++ b/files/ru/web/javascript/reference/errors/invalid_assignment_left-hand_side/index.html @@ -0,0 +1,54 @@ +--- +title: 'ReferenceError: invalid assignment left-hand side' +slug: Web/JavaScript/Reference/Errors/Invalid_assignment_left-hand_side +tags: + - JavaScript + - ReferenceError + - Ошибки +translation_of: Web/JavaScript/Reference/Errors/Invalid_assignment_left-hand_side +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщение">Сообщение</h2> + +<pre class="syntaxbox">ReferenceError: invalid assignment left-hand side +</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>{{jsxref("ReferenceError")}}.</p> + +<h2 id="Что_пошло_не_так">Что пошло не так?</h2> + +<p>Найдено неожиданное присваивание. <span id="result_box" lang="ru"><span>Это может быть связано, например, с несоответствием <a href="/ru/docs/Web/JavaScript/Reference/Operators/Assignment_Operators">оператора присваивания</a> и <a href="/ru/docs/Web/JavaScript/Reference/Operators/%D0%9E%D0%BF%D0%B5%D1%80%D0%B0%D1%82%D0%BE%D1%80%D1%8B_%D1%81%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F">оператора сравнения</a>: один знак «<code>=</code>» присваивает значение переменной, а операторы «<code>==</code>» или «<code>===</code>» осуществляют сравнение.</span></span></p> + +<h2 id="Пример">Пример</h2> + +<pre class="brush: js example-bad">if (Math.PI = 3 || Math.PI = 4) { + console.log('исключено!'); +} +// ReferenceError: invalid assignment left-hand side + +var str = 'Привет, ' ++= 'не меня ли ' ++= 'ты ищешь?'; +// ReferenceError: invalid assignment left-hand side +</pre> + +<p><span id="result_box" lang="ru"><span>В выражении <code>if</code> вам нужно использовать оператор сравнения («==»), а для конкатенации строк необходим оператор плюс («+»).</span></span></p> + +<pre class="brush: js example-good">if (Math.PI == 3 || Math.PI == 4) { + console.log('исключено!'); +} + +var str = 'Привет ' ++ 'с другой ' ++ 'стороны!'; +</pre> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li><a href="/ru/docs/Web/JavaScript/Reference/Operators/Assignment_Operators" title="Операторы присваивания">Операторы присваивания</a></li> + <li><a href="/ru/docs/Web/JavaScript/Reference/Operators/%D0%9E%D0%BF%D0%B5%D1%80%D0%B0%D1%82%D0%BE%D1%80%D1%8B_%D1%81%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F" title="Операторы сравнения">Операторы сравнения</a></li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/invalid_const_assignment/index.html b/files/ru/web/javascript/reference/errors/invalid_const_assignment/index.html new file mode 100644 index 0000000000..eaf8b0b185 --- /dev/null +++ b/files/ru/web/javascript/reference/errors/invalid_const_assignment/index.html @@ -0,0 +1,87 @@ +--- +title: 'TypeError: invalid assignment to const "x"(недопустимое назначение const "x")' +slug: Web/JavaScript/Reference/Errors/Invalid_const_assignment +translation_of: Web/JavaScript/Reference/Errors/Invalid_const_assignment +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщение">Сообщение</h2> + +<pre class="syntaxbox">TypeError: недопустимое назначение const "x" (Firefox) +TypeError: присвоение переменной константы. (Хромированный) +TypeError: присвоение const (Edge) +TypeError: повторное объявление const 'x' (IE) +</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>{{jsxref("TypeError")}}</p> + +<h2 id="Что_пошло_не_так">Что пошло не так?</h2> + +<p>Константа-это значение, которое не может быть изменено программой в обычном исполнении. Он не может быть изменен путем повторного назначения и не может быть повторно объявлен. В JavaScript, константы объявляются с помощью ключевого слова const.</p> + +<h2 id="Примеры">Примеры</h2> + +<h3 id="Недопустимое_повторное_объявление">Недопустимое повторное объявление</h3> + +<p>Assigning a value to the same constant name in the same block-scope will throw.</p> + +<pre class="brush: js example-bad">const COLUMNS = 80; + +// ... + +COLUMNS = 120; // TypeError: invalid assignment to const `COLUMNS'</pre> + +<h3 id="Решение_проблемы">Решение проблемы</h3> + +<p>Есть несколько вариантов, чтобы исправить эту ошибку. Проверьте, что должно было быть достигнуто с рассматриваемой константой.</p> + +<h4 id="Переназавите">Переназавите</h4> + +<p>Если вы хотели объявить другую константу, выберите другое имя и переименовать. Это имя константы уже используется в этой области.</p> + +<pre class="brush: js example-good">const COLUMNS = 80; +const WIDE_COLUMNS = 120;</pre> + +<h4 id="const_let_или_var"><code>const</code>, <code>let</code> или <code>var</code>?</h4> + +<p>Не используйте const, если вы не хотели объявлять константу. Возможно, вы хотели объявить переменную в области блока с let или глобальную переменную с var.</p> + +<pre class="brush: js example-good">let columns = 80; + +// ... + +let columns = 120; +</pre> + +<h4 id="Обзор">Обзор</h4> + +<p>Проверить, если вы находитесь в правильной области. Должна ли эта константа появиться в этой области или она должна была появиться в функции, например?</p> + +<pre class="brush: js example-good">const COLUMNS = 80; + +function setupBigScreenEnvironment() { + const COLUMNS = 120; +}</pre> + +<h3 id="const_и_неизменность"><code>const</code> и неизменность</h3> + +<p>Объявление const создает ссылку только для чтения на значение. Это не означает, что значение, которое он содержит, является неизменяемым, просто идентификатор переменной не может быть переназначен. Например, если содержимое является объектом, это означает, что сам объект все еще может быть изменен. Это означает, что нельзя изменить значение, хранящееся в переменной:</p> + +<pre class="brush: js example-bad">const obj = {foo: 'bar'}; +obj = {foo: 'baz'}; // TypeError: invalid assignment to const `obj' +</pre> + +<p>Но можно изменить свойства в переменной:</p> + +<pre class="brush: js example-good">obj.foo = 'baz'; +obj; // Object { foo: "baz" }</pre> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/const">const</a></code></li> + <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/let">let</a></code></li> + <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/var">var</a></code></li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/invalid_date/index.html b/files/ru/web/javascript/reference/errors/invalid_date/index.html new file mode 100644 index 0000000000..89a108c475 --- /dev/null +++ b/files/ru/web/javascript/reference/errors/invalid_date/index.html @@ -0,0 +1,54 @@ +--- +title: 'RangeError: invalid date' +slug: Web/JavaScript/Reference/Errors/Invalid_date +tags: + - Errors + - JavaScript + - RangeError +translation_of: Web/JavaScript/Reference/Errors/Invalid_date +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщение">Сообщение</h2> + +<pre class="syntaxbox">RangeError: invalid date (Firefox) +RangeError: invalid time value (Chrome) +RangeError: Provided date is not in valid range (Chrome) +</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>{{jsxref("RangeError")}}</p> + +<h2 id="Что_пошло_не_так">Что пошло не так?</h2> + +<p><span id="result_box" lang="ru"><span>Строка, ведущая к недопустимой дате, была выведена</span></span> {{jsxref("Date")}} или {{jsxref("Date.parse()")}}.</p> + +<h2 id="Примеры">Примеры</h2> + +<h3 id="Неверные_записи">Неверные записи</h3> + +<p>Неопознанные строки или даты, содержащие недопустимые значения элементов в строках, отформатированных ISO, обычно возвращают <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/NaN" title="Глобальное свойство NaN является значением, представляющим не-число (Not-A-Number)."><code>NaN</code></a>. Тем не менее, в зависимости от реализации, при несоответствии строкам формата ISO, может также возникнуть ошибка <code>RangeError: invalid date</code>, например в следующих случаях, в Firefox.</p> + +<pre class="brush: js example-bad">new Date('foo-bar 2014'); +new Date('2014-25-23').toISOString(); +new Date('foo-bar 2014').toString(); +</pre> + +<p>Это, без сомнения, вернёт {{jsxref("NaN")}} в Firefox:</p> + +<pre class="brush: js example-bad">Date.parse('foo-bar 2014'); // NaN</pre> + +<p>Для получения более подробной информации, смотрите документацию по {{jsxref("Date.parse()")}}</p> + +<h3 id="Верная_запись">Верная запись</h3> + +<pre class="brush: js example-good">new Date('05 October 2011 14:48 UTC');</pre> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li>{{jsxref("Date")}}</li> + <li>{{jsxref("Date.prototype.parse()")}}</li> + <li>{{jsxref("Date.prototype.toISOString()")}}</li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/invalid_for-in_initializer/index.html b/files/ru/web/javascript/reference/errors/invalid_for-in_initializer/index.html new file mode 100644 index 0000000000..4538cd6b0b --- /dev/null +++ b/files/ru/web/javascript/reference/errors/invalid_for-in_initializer/index.html @@ -0,0 +1,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> diff --git a/files/ru/web/javascript/reference/errors/invalid_for-of_initializer/index.html b/files/ru/web/javascript/reference/errors/invalid_for-of_initializer/index.html new file mode 100644 index 0000000000..fd3b630239 --- /dev/null +++ b/files/ru/web/javascript/reference/errors/invalid_for-of_initializer/index.html @@ -0,0 +1,63 @@ +--- +title: >- + SyntaxError: a declaration in the head of a for-of loop can't have an + initializer +slug: Web/JavaScript/Reference/Errors/Invalid_for-of_initializer +tags: + - Error + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Invalid_for-of_initializer +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщение">Сообщение</h2> + +<pre class="syntaxbox">SyntaxError: a declaration in the head of a for-of loop can't have an initializer (Firefox) + +SyntaxError: for-of loop variable declaration may not have an initializer. (Chrome) +</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>{{jsxref("SyntaxError")}}</p> + +<h2 id="Что_случилось">Что случилось?</h2> + +<p>В заголовке цикла<a href="/ru/docs/Web/JavaScript/Reference/Statements/for...of"> for...of</a> инициализируется переменная. Иными словами, переменная объявляется и получает значение|<code>for (var i = 0 of iterable)</code>|. В подобных циклах это не допускается. Инициализировать переменные можно в циклах <code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/for">for</a></code>.</p> + +<h2 id="Примеры">Примеры</h2> + +<h3 id="Неправильный_цикл_for-of">Неправильный цикл <code>for-of</code></h3> + +<pre class="brush: js example-bad">let iterable = [10, 20, 30]; + +for (let value = 50 of iterable) { + console.log(value); +} + +// SyntaxError: a declaration in the head of a for-of loop can't +// have an initializer</pre> + +<h3 id="Правильный_цикл_for-of">Правильный цикл <code>for-of</code></h3> + +<p>Надо убрать инициализацию (<code>value = 50</code>) в заголовке цикла <code>for-of</code>. Если требуется использовать смещение 50, это можно сделать в теле цикла.</p> + +<pre class="brush: js example-good">let iterable = [10, 20, 30]; + +for (let value of iterable) { + value += 50; + console.log(value); +} +// 60 +// 70 +// 80 +</pre> + +<h2 id="Смотри_также">Смотри также</h2> + +<ul> + <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...in">for...in</a></code> – В строгом режиме инициализация тоже не разрешается (<a href="/ru/docs/Web/JavaScript/Reference/Errors/Invalid_for-in_initializer">SyntaxError: for-in loop head declarations may not have initializers</a>)</li> + <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/for">for</a></code> – Инициализация во время итерации разрешена.</li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/invalid_right_hand_side_instanceof_operand/index.html b/files/ru/web/javascript/reference/errors/invalid_right_hand_side_instanceof_operand/index.html new file mode 100644 index 0000000000..b158098787 --- /dev/null +++ b/files/ru/web/javascript/reference/errors/invalid_right_hand_side_instanceof_operand/index.html @@ -0,0 +1,61 @@ +--- +title: >- + TypeError: invalid 'instanceof' operand 'x'(Тип ошибки: неверный + 'экземпляром' операнд 'х') +slug: Web/JavaScript/Reference/Errors/invalid_right_hand_side_instanceof_operand +translation_of: Web/JavaScript/Reference/Errors/invalid_right_hand_side_instanceof_operand +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщение">Сообщение</h2> + +<pre class="syntaxbox">TypeError: недопустимый операнд "instanceof" "x" (Firefox) +TypeError: "x" не является функцией (Firefox) +TypeError: правая часть "instanceof" не является объектом (Chrome) +TypeError: правая часть "instanceof" не вызывается (Chrome) +</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>{{jsxref("TypeError")}}</p> + +<h2 id="Что_не_так">Что не так?</h2> + +<p>The <a href="/en-US/docs/Web/JavaScript/Reference/Operators/instanceof"><code>instanceof</code> operator</a> ожидает, что операнды правой стороны будут объектом конструктора, т. е. объектом, который имеет свойство прототипа и является вызываемым.</p> + +<h2 id="Примеры">Примеры</h2> + +<pre class="brush: js example-bad">"test" instanceof ""; // TypeError: invalid 'instanceof' operand "" +42 instanceof 0; // TypeError: invalid 'instanceof' operand 0 + +function Foo() {} +var f = Foo(); // Foo() is called and returns undefined +var x = new Foo(); + +x instanceof f; // TypeError: invalid 'instanceof' operand f +x instanceof x; // TypeError: x is not a function +</pre> + +<p>Чтобы исправить эти ошибки, необходимо либо заменить оператор <code>instanceof </code>оператором <code>typeof</code>, либо убедиться, что вместо результата его вычисления используется имя функции.</p> + +<pre class="brush: js example-good">typeof "test" == "string"; // true +typeof 42 == "number" // true + +function Foo() {} +var f = Foo; // Do not call Foo. +var x = new Foo(); + +x instanceof f; // true +x instanceof Foo; // true +</pre> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li><a href="/en-US/docs/Web/JavaScript/Reference/Operators/instanceof"><code>instanceof</code> operator</a></li> + <li><a href="/en-US/docs/Web/JavaScript/Reference/Operators/typeof"><code>typeof</code> operator</a></li> +</ul> + +<h2 id="Админ_дрочит_на_постер_ОБАМКИ_и_это_случайный_аргумент!">Админ дрочит на постер ОБАМКИ и это случайный аргумент!</h2> + +<p> </p> diff --git a/files/ru/web/javascript/reference/errors/is_not_iterable/index.html b/files/ru/web/javascript/reference/errors/is_not_iterable/index.html new file mode 100644 index 0000000000..c084aac4e3 --- /dev/null +++ b/files/ru/web/javascript/reference/errors/is_not_iterable/index.html @@ -0,0 +1,100 @@ +--- +title: 'TypeError: ''x'' is not iterable (Тип ошибки ''x'' не является итерационным)' +slug: Web/JavaScript/Reference/Errors/is_not_iterable +translation_of: Web/JavaScript/Reference/Errors/is_not_iterable +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщение">Сообщение</h2> + +<pre class="syntaxbox">TypeError: "x" не является итерационным (Firefox, Chrome) +TypeError: 'x' не является функцией или ее возвращаемое значение не является итерационным (Chrome) +</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>{{jsxref("TypeError")}}</p> + +<h2 id="Что_пошло_не_так">Что пошло не так?</h2> + +<p>Значение, которое дается как правая сторона for...of или как аргумент функции, такой как {{jsxref("Promise.all")}} или {{jsxref("TypedArray.from")}}, не является итерационным объектом. Повторяемое может быть, встроенный итератор типа, такие как {{jsxref("Array")}}, {{jsxref("String")}} или {{jsxref("Map")}}, генератор результатом, или объект, реализующий итератор протокол.</p> + +<h2 id="Примеры">Примеры</h2> + +<h3 id="Итерация_по_свойствам_объекта">Итерация по свойствам объекта</h3> + +<p>В JavaScript, {{jsxref("object")}} не повторяется, если они реализуют итерационный протокол . Поэтому нельзя использовать for...of для перебора свойств объекта.</p> + +<pre class="brush: js example-bad">var obj = { 'France': 'Paris', 'England': 'London' }; +for (let p of obj) { // TypeError: obj не является итерационным + // … +} +</pre> + +<p>Вместо этого вы должны использовать {{jsxref("Object.keys")}} или {{jsxref("Object.entries")}}, для итерации по свойствам или записям объекта.</p> + +<pre class="brush: js example-good">var obj = { 'France': 'Paris', 'England': 'London' }; +// Iterate over the property names: +for (let country of Object.keys(obj)) { + var capital = obj[country]; + console.log(country, capital); +} + +for (const [country, capital] of Object.entries(obj)) + console.log(country, capital); + + +</pre> + +<p>Другим вариантом для этого варианта использования может быть использование {{jsxref("Map")}}:</p> + +<pre class="brush: js example-good">var map = new Map; +map.set('France', 'Paris'); +map.set('England', 'London'); +// Iterate over the property names: +for (let country of map.keys()) { + let capital = map[country]; + console.log(country, capital); +} + +for (let capital of map.values()) + console.log(capital); + +for (const [country, capital] of map.entries()) + console.log(country, capital); +</pre> + +<h3 id="Итерация_по_генератору">Итерация по генератору</h3> + +<p>Генераторы - это функции, вызываемые для создания итерационного объекта.</p> + +<pre class="brush: js example-bad">function* generate(a, b) { + yield a; + yield b; +} + +for (let x of generate) // TypeError: генерация не является итерационной + console.log(x); +</pre> + +<p>Если они не вызываются, то объект {{jsxref("Function")}}, соответствующий генератору, можно вызвать, но нельзя выполнить итерацию. Вызов генератора создает итерационный объект, который будет выполнять итерацию по значениям, полученным во время выполнения генератора.</p> + +<pre class="brush: js example-good">function* generate(a, b) { + yield a; + yield b; +} + +for (let x of generate(1,2)) + console.log(x); +</pre> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li><a href="/en-US/docs/Web/JavaScript/Reference/Iteration_protocols#The_iterable_protocol">iterable protocol</a> </li> + <li>{{jsxref("Object.keys")}}</li> + <li>{{jsxref("Object.entries")}}</li> + <li>{{jsxref("Map")}}</li> + <li><a href="/en-US/docs/Web/JavaScript/Guide/Iterators_and_Generators#Generators">generators</a> </li> + <li><a href="/en-US/docs/Web/JavaScript/Guide/Loops_and_iteration#for...of_statement">for…of</a></li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/json_bad_parse/index.html b/files/ru/web/javascript/reference/errors/json_bad_parse/index.html new file mode 100644 index 0000000000..269f560bb3 --- /dev/null +++ b/files/ru/web/javascript/reference/errors/json_bad_parse/index.html @@ -0,0 +1,111 @@ +--- +title: 'SyntaxError: JSON.parse: bad parsing' +slug: Web/JavaScript/Reference/Errors/JSON_bad_parse +tags: + - Errors + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/JSON_bad_parse +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщение">Сообщение</h2> + +<pre class="syntaxbox">SyntaxError: JSON.parse: unterminated string literal +SyntaxError: JSON.parse: bad control character in string literal +SyntaxError: JSON.parse: bad character in string literal +SyntaxError: JSON.parse: bad Unicode escape +SyntaxError: JSON.parse: bad escape character +SyntaxError: JSON.parse: unterminated string +SyntaxError: JSON.parse: no number after minus sign +SyntaxError: JSON.parse: unexpected non-digit +SyntaxError: JSON.parse: missing digits after decimal point +SyntaxError: JSON.parse: unterminated fractional number +SyntaxError: JSON.parse: missing digits after exponent indicator +SyntaxError: JSON.parse: missing digits after exponent sign +SyntaxError: JSON.parse: exponent part is missing a number +SyntaxError: JSON.parse: unexpected end of data +SyntaxError: JSON.parse: unexpected keyword +SyntaxError: JSON.parse: unexpected character +SyntaxError: JSON.parse: end of data while reading object contents +SyntaxError: JSON.parse: expected property name or '}' +SyntaxError: JSON.parse: end of data when ',' or ']' was expected +SyntaxError: JSON.parse: expected ',' or ']' after array element +SyntaxError: JSON.parse: end of data when property name was expected +SyntaxError: JSON.parse: expected double-quoted property name +SyntaxError: JSON.parse: end of data after property name when ':' was expected +SyntaxError: JSON.parse: expected ':' after property name in object +SyntaxError: JSON.parse: end of data after property value in object +SyntaxError: JSON.parse: expected ',' or '}' after property value in object +SyntaxError: JSON.parse: expected ',' or '}' after property-value pair in object literal +SyntaxError: JSON.parse: property names must be double-quoted strings +SyntaxError: JSON.parse: expected property name or '}' +SyntaxError: JSON.parse: unexpected character +SyntaxError: JSON.parse: unexpected non-whitespace character after JSON data +</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>{{jsxref("SyntaxError")}}</p> + +<h2 id="Что_пошло_не_так">Что пошло не так?</h2> + +<p>{{jsxref("JSON.parse()")}} обрабатывает (парсит) строку в формате JSON. Это строка должна соответствовать формату, иначе будет выведена ошибка, что был нарушен синтаксис.</p> + +<h2 id="Examples">Examples</h2> + +<h3 id="JSON.parse()_не_допускает_запятые"><code>JSON.parse()</code> не допускает запятые</h3> + +<p>Метод JSON.parse() не разрешает использование, так называемых, trailling запятых.</p> + +<p>Обе строки выдадут ошибку типа SyntaxError:</p> + +<pre class="brush: js example-bad">JSON.parse('[1, 2, 3, 4,]'); +JSON.parse('{"foo": 1,}'); +// SyntaxError JSON.parse: unexpected character +// at line 1 column 14 of the JSON data +</pre> + +<p>Необходимо убрать последние запятые в строках и тогда ошибки не будет:</p> + +<pre class="brush: js example-good">JSON.parse('[1, 2, 3, 4]'); +JSON.parse('{"foo": 1}');</pre> + +<h3 id="Названия_свойств_должны_быть_в_двойных_кавычках">Названия свойств должны быть в двойных кавычках</h3> + +<p>Вы не можете использовать одинарные кавычки в именах свойств. Например, 'foo'.</p> + +<pre class="brush: js example-bad">JSON.parse("{'foo': 1}"); +// SyntaxError: JSON.parse: expected property name or '}' +// at line 1 column 2 of the JSON data</pre> + +<p>Вместо этого необходимо написать "foo":</p> + +<pre class="brush: js example-good">JSON.parse('{"foo": 1}');</pre> + +<h3 id="Незначащие_нули_или_плавающая_точка_без_последующей_цифры">Незначащие нули или плавающая точка без последующей цифры</h3> + +<p>Вы не можете использовать незначащие нули, например, 01. Плавающая точка должна всегда сопровождаться хотя бы одной цифрой после неё.</p> + +<pre class="brush: js example-bad">JSON.parse('{"foo": 01}'); +// SyntaxError: JSON.parse: expected ',' or '}' after property value +// in object at line 1 column 2 of the JSON data + +JSON.parse('{"foo": 1.}'); +// SyntaxError: JSON.parse: unterminated fractional number +// at line 1 column 2 of the JSON data +</pre> + +<p>Вместо этого напишите просто 1 без нуля и используйте хотя бы одну цифру после точки:</p> + +<pre class="brush: js example-good">JSON.parse('{"foo": 1}'); +JSON.parse('{"foo": 1.0}'); +</pre> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li>{{jsxref("JSON")}}</li> + <li>{{jsxref("JSON.parse()")}}</li> + <li>{{jsxref("JSON.stringify()")}}</li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/malformed_formal_parameter/index.html b/files/ru/web/javascript/reference/errors/malformed_formal_parameter/index.html new file mode 100644 index 0000000000..5e65f8c633 --- /dev/null +++ b/files/ru/web/javascript/reference/errors/malformed_formal_parameter/index.html @@ -0,0 +1,61 @@ +--- +title: 'SyntaxError: Malformed formal parameter' +slug: Web/JavaScript/Reference/Errors/Malformed_formal_parameter +tags: + - JavaScript + - SyntaxError + - Ошибки +translation_of: Web/JavaScript/Reference/Errors/Malformed_formal_parameter +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщение">Сообщение</h2> + +<pre class="syntaxbox">SyntaxError: malformed formal parameter (Firefox) +</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>{{jsxref("SyntaxError")}}</p> + +<h2 id="Что_пошло_не_так">Что пошло не так?</h2> + +<p>Существует конструктор <code><a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Function">Function()</a></code>, который принимает в коде как минимум два аргумента. Последний аргумент – это исходный код создаваемой функции, а все остальные представляют собой список её аргументов.</p> + +<p>Ошибка возникает, когда список аргументов по какой-то причине не является корректным. Возможно, вы случайно взяли в качестве имени аргумента ключевое слово, такое как <code>if</code> или <code>var</code>. Или в списке аргументов затерялся лишний знак пунктуации. Или вы случайно передали некорректное значение, например, число или объект.</p> + +<h2 id="OK_это_решило_мою_проблему._Но_почему_нельзя_было_сразу_так_и_сказать">OK, это решило мою проблему. Но почему нельзя было сразу так и сказать?</h2> + +<p>Нельзя не признать, что формулировка сообщения об ошибке немного странная. "Formal parameter" (формальный параметр) – это всего лишь необычный способ сказать "function argument" (аргумент функции). А слово "malformed" (уродливый, некорректный) мы используем потому, что все инженеры Firefox без ума от готических романов 19-го века.</p> + +<h2 id="Примеры">Примеры</h2> + +<h3 id="Код_с_ошибками">Код с ошибками</h3> + +<pre class="brush: js example-bad">var f = Function('x y', 'return x + y;'); +// SyntaxError (пропуск запятой) + +var f = Function('x,', 'return x;'); +// SyntaxError (лишняя запятая) + +var f = Function(37, "alert('OK')"); +// SyntaxError (числа не могут использоваться в качестве имен аргументов) +</pre> + +<h3 id="Правильный_код">Правильный код</h3> + +<pre class="brush: js example-good">var f = Function('x, y', 'return x + y;'); // правильная пунктуация + +var f = Function('x', 'return x;'); + +// если есть возможность, не используйте Function - так гораздо быстрее: +var f = function(x) { return x; }; +</pre> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li><code><a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Function">Function()</a></code></li> + <li><a href="/ru/docs/Web/JavaScript/Guide/Functions">О функциях</a></li> + <li><a href="https://www.gutenberg.org/ebooks/84"><em>Франкенштейн</em> Мэри Уотлстонкрафт Шелли, полный текст (англ.)</a> ("[...] прокляты руки, создавшие тебя, пусть это были мои собственные! Ты причинил мне безмерное горе. Я уже не в силах решать, справедливо ли я с тобой поступаю. Поди прочь! Избавь меня от твоего ненавистного вида." (пер. З. Александровой))</li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/malformed_uri/index.html b/files/ru/web/javascript/reference/errors/malformed_uri/index.html new file mode 100644 index 0000000000..8f57f277f4 --- /dev/null +++ b/files/ru/web/javascript/reference/errors/malformed_uri/index.html @@ -0,0 +1,61 @@ +--- +title: 'URIError: malformed URI sequence' +slug: Web/JavaScript/Reference/Errors/Malformed_URI +translation_of: Web/JavaScript/Reference/Errors/Malformed_URI +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщение">Сообщение</h2> + +<pre class="syntaxbox">URIError: malformed URI sequence (Firefox) +URIError: URI malformed (Chrome) +</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>{{jsxref("URIError")}}</p> + +<h2 id="Что_пошло_не_так">Что пошло не так?</h2> + +<p>Декодирование или кодирование URI не было успешным. Аргумент переданный функциям {{jsxref("decodeURI")}}, {{jsxref("encodeURI")}}, {{jsxref("encodeURIComponent")}}, или {{jsxref("decodeURIComponent")}} был недопустимым, из-за этого функция не смогла выполнить кодирование или декодирование.</p> + +<h2 id="Примеры">Примеры</h2> + +<h3 id="Кодирование">Кодирование</h3> + +<p>Кодирование заменяет каждое вхождение конкретного символа одним, двумя, тремя или четырьмя управляющими последовательностями, представленными стандартом UTF-8. {{jsxref("URIError")}} возникнет, при попытке кодирования суррогата, не являющегося частью high-low пары, например:</p> + +<pre class="brush: js example-bad">encodeURI('\uD800'); +// "URIError: malformed URI sequence" + +encodeURI('\uDFFF'); +// "URIError: malformed URI sequence" +</pre> + +<p>Нормальная high-low пара. Например:</p> + +<pre class="brush: js example-good">encodeURI('\uD800\uDFFF'); +// "%F0%90%8F%BF"</pre> + +<h3 id="Декодирование">Декодирование</h3> + +<p>Декодирование заменяет каждую управляющую последовательность в закодированном URI компоненте символом, который она предстваляет. Если такого символа нет, возникнет ошибка:</p> + +<pre class="brush: js example-bad">decodeURIComponent('%E0%A4%A'); +// "URIError: malformed URI sequence" +</pre> + +<p>Правильный вариант обычно выглядит так:</p> + +<pre class="brush: js example-good">decodeURIComponent('JavaScript_%D1%88%D0%B5%D0%BB%D0%BB%D1%8B'); +// "JavaScript_шеллы"</pre> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li>{{jsxref("URIError")}}</li> + <li>{{jsxref("decodeURI")}}</li> + <li>{{jsxref("encodeURI")}}</li> + <li>{{jsxref("encodeURIComponent")}}</li> + <li>{{jsxref("decodeURIComponent")}}</li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/missing_bracket_after_list/index.html b/files/ru/web/javascript/reference/errors/missing_bracket_after_list/index.html new file mode 100644 index 0000000000..32035a2365 --- /dev/null +++ b/files/ru/web/javascript/reference/errors/missing_bracket_after_list/index.html @@ -0,0 +1,56 @@ +--- +title: 'SyntaxError: missing ] after element list' +slug: Web/JavaScript/Reference/Errors/Missing_bracket_after_list +tags: + - JavaScript + - SyntaxError + - Ошибки +translation_of: Web/JavaScript/Reference/Errors/Missing_bracket_after_list +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщение">Сообщение</h2> + +<pre class="syntaxbox">SyntaxError: missing ] after element list +</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>{{jsxref("SyntaxError")}}.</p> + +<h2 id="Что_пошло_не_так">Что пошло не так?</h2> + +<p>Ошибка в синтаксисе инициализации массива. Скорее всего, пропущена закрывающая квадратная скобка ("<code>]</code>") или запятая ("<code>,</code>").</p> + +<h2 id="Примеры">Примеры</h2> + +<h3 id="Незавершенный_инициализатор_массива">Незавершенный инициализатор массива</h3> + +<pre class="brush: js example-bad">var list = [1, 2, + +var instruments = [ + 'Укулеле', + 'Гитара', + 'Пианино' +}; + +var data = [{foo: 'bar'} {bar: 'foo'}]; +</pre> + +<p>Правильные варианты:</p> + +<pre class="brush: js example-good">var list = [1, 2]; + +var instruments = [ + 'Укулеле', + 'Гитара', + 'Пианино' +]; + +var data = [{foo: 'bar'}, {bar: 'foo'}];</pre> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li>{{jsxref("Array")}}</li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/missing_colon_after_property_id/index.html b/files/ru/web/javascript/reference/errors/missing_colon_after_property_id/index.html new file mode 100644 index 0000000000..856d2fe526 --- /dev/null +++ b/files/ru/web/javascript/reference/errors/missing_colon_after_property_id/index.html @@ -0,0 +1,72 @@ +--- +title: 'SyntaxError: missing : after property id' +slug: Web/JavaScript/Reference/Errors/Missing_colon_after_property_id +translation_of: Web/JavaScript/Reference/Errors/Missing_colon_after_property_id +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщение">Сообщение</h2> + +<pre class="syntaxbox">SyntaxError: missing : after property id +</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>{{jsxref("SyntaxError")}}</p> + +<h2 id="Что_пошло_не_так">Что пошло не так?</h2> + +<p>При создании объекта с помощью <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Operators/Object_initializer">инициализатора объекта</a>, двоеточие (<code>:</code>) разделяет ключи и значения свойств объекта.</p> + +<pre class="brush: js">var obj = { propertyKey: 'value' }; +</pre> + +<h2 id="Примеры">Примеры</h2> + +<h3 id="Двоеточие_vs._знака_равенства">Двоеточие vs. знака равенства</h3> + +<p>Этот код не работает, потому что знак равенства не может быть использован при инициализации объекта.</p> + +<pre class="brush: js example-bad">var obj = { propertyKey = 'value' }; +// SyntaxError: missing : after property id +</pre> + +<p>Корректно будет использовать двоеточие или квадратные скобки для назначения нового свойства после того, как объект уже был создан.</p> + +<pre class="brush: js example-good">var obj = { propertyKey: 'value' }; + +// or alternatively + +var obj = { }; +obj['propertyKey'] = 'value'; +</pre> + +<h3 id="Пустые_свойства">Пустые свойства</h3> + +<p>Вы не можете создать пустые свойства, подобные этому:</p> + +<pre class="brush: js example-bad">var obj = { propertyKey; }; +// SyntaxError: missing : after property id +</pre> + +<p>Если вам необходимо задать свойство без значения, то вы можете использовать {{jsxref("null")}}.</p> + +<pre class="brush: js example-good">var obj = { propertyKey: null };</pre> + +<h3 id="Вычисляемые_свойства">Вычисляемые свойства</h3> + +<p>Если вы создаете ключ свойства из выражения, то вам необходимо использовать квадратные скобки. В противном случае имя свойства не будет вычислено:</p> + +<pre class="brush: js example-bad">var obj = { 'b'+'ar': 'foo' }; +// SyntaxError: missing : after property id +</pre> + +<p>Поместите выражение в скобки <code>[]</code>:</p> + +<pre class="brush: js example-good">var obj = { ['b'+'ar']: 'foo' };</pre> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li><a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Operators/Object_initializer">Инициализатор объекта</a></li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/missing_curly_after_function_body/index.html b/files/ru/web/javascript/reference/errors/missing_curly_after_function_body/index.html new file mode 100644 index 0000000000..0d971440c7 --- /dev/null +++ b/files/ru/web/javascript/reference/errors/missing_curly_after_function_body/index.html @@ -0,0 +1,66 @@ +--- +title: 'SyntaxError: missing } after function body' +slug: Web/JavaScript/Reference/Errors/Missing_curly_after_function_body +tags: + - JavaScript + - SyntaxError + - Ошибки +translation_of: Web/JavaScript/Reference/Errors/Missing_curly_after_function_body +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщение">Сообщение</h2> + +<pre class="syntaxbox">SyntaxError: missing } after function body +</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>{{jsxref("SyntaxError")}}</p> + +<h2 id="Что_пошло_не_так">Что пошло не так?</h2> + +<p>Допущена синтаксическая ошибка где-то в коде создания функции. Кроме того, проверьте, все ли закрывающие круглые и фигурные скобки расставлены в правильном порядке. Справиться с беспорядком поможет использование отступов, а также более аккуратное форматирование кода в целом.</p> + +<h2 id="Примеры">Примеры</h2> + +<h3 id="Забытая_закрывающая_фигурная_скобка">Забытая закрывающая фигурная скобка</h3> + +<p>Часто в коде функции может быть забыта фигурная скобка:</p> + +<pre class="brush: js example-bad">var charge = function() { + if (sunny) { + useSolarCells(); + } else { + promptBikeRide(); +}; +</pre> + +<p>Правильный код:</p> + +<pre class="brush: js example-good">var charge = function() { + if (sunny) { + useSolarCells(); + } else { + promptBikeRide(); + } +};</pre> + +<p>Еще больше путаницы может внести использование {{Glossary("IIFE")}}, <a href="/ru/docs/Web/JavaScript/Closures">замыканий</a> и прочих конструкций, где используется большое количество различных скобок:</p> + +<pre class="brush: js example-bad">(function() { if (true) { return false; } ); +</pre> + +<p>Зачастую облегчить поиск ошибок можно, проверив отступы еще раз или расставив их по-другому.</p> + +<pre class="brush: js example-good">(function() { + if (true) { + return false; + } +});</pre> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li><a href="/ru/docs/Web/JavaScript/Guide/Functions">Функции</a></li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/missing_curly_after_property_list/index.html b/files/ru/web/javascript/reference/errors/missing_curly_after_property_list/index.html new file mode 100644 index 0000000000..6c86b1ef73 --- /dev/null +++ b/files/ru/web/javascript/reference/errors/missing_curly_after_property_list/index.html @@ -0,0 +1,51 @@ +--- +title: 'SyntaxError: missing } after property list' +slug: Web/JavaScript/Reference/Errors/Missing_curly_after_property_list +tags: + - JavaScript + - SyntaxError + - Ошибки +translation_of: Web/JavaScript/Reference/Errors/Missing_curly_after_property_list +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщение">Сообщение</h2> + +<pre class="syntaxbox">SyntaxError: missing } after property list +</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>{{jsxref("SyntaxError")}}</p> + +<h2 id="Что_пошло_не_так">Что пошло не так?</h2> + +<p><span class="notranslate">Произошла ошибка в синтаксисе <a href="/ru/docs/Web/JavaScript/Reference/Operators/Object_initializer">инициализатора объекта</a>.</span> <span class="notranslate">Причиной может быть отсутствующая фигурная скобка или, к примеру, недостающая запятая.</span> <span class="notranslate"> Также проверьте, в правильном ли порядке расположены закрывающие круглые и фигурные скобки.</span> Добаление отсупов или <span class="notranslate">форматирование кода в более благоприятный вид также могут помочь разобраться в беспорядке.</span></p> + +<h2 id="Примеры">Примеры</h2> + +<h3 class="highlight-spanned" id="Забытая_запятая"><span class="highlight-span"><span class="notranslate">Забытая запятая</span></span></h3> + +<p><span class="notranslate">Зачастую в коде инициализатора объекта есть недостающая запятая:</span></p> + +<pre class="brush: js example-bad">var obj = { + a: 1, + b: { myProp: 2 } + c: 3 +}; +</pre> + +<p>Правильный вариант:</p> + +<pre class="brush: js example-good">var obj = { + a: 1, + b: { myProp: 2 }, + c: 3 +}; +</pre> + +<h2 id="Смотрите_также"><span class="notranslate">Смотрите также</span></h2> + +<ul> + <li><span class="notranslate"><a href="/ru/docs/Web/JavaScript/Reference/Operators/Object_initializer">Инициализация объектов</a></span></li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/missing_formal_parameter/index.html b/files/ru/web/javascript/reference/errors/missing_formal_parameter/index.html new file mode 100644 index 0000000000..a47a45477a --- /dev/null +++ b/files/ru/web/javascript/reference/errors/missing_formal_parameter/index.html @@ -0,0 +1,75 @@ +--- +title: 'SyntaxError: missing formal parameter( отсутствует формальный параметр)' +slug: Web/JavaScript/Reference/Errors/Missing_formal_parameter +translation_of: Web/JavaScript/Reference/Errors/Missing_formal_parameter +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщениe">Сообщениe</h2> + +<pre class="syntaxbox">SyntaxError: идентификатор начинается сразу после числового литерала +</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>{{jsxref("SyntaxError")}}</p> + +<h2 id="Что_пошло_не_так">Что пошло не так?</h2> + +<p>"Формальный параметр" - это причудливый способ сказать "параметр функции". В объявлении функции отсутствуют допустимые параметры. В объявлении функции параметры должны быть {{Glossary("Identifier", "identifiers")}}, не любое значение, как числа, строки или объекты. Объявление функций и вызов функций - это два отдельных шага. Объявления требуют идентификатор в качестве параметров, и только при вызове (призыва) функции, вы предоставляете значения, которые функция должна использовать.</p> + +<p>В {{glossary("JavaScript")}}, идентификаторы могут содержать только буквенно-цифровые символы (или "$" или "_") и не могут начинаться с цифры. Идентификатор отличается от строки тем, что строка является данными, а идентификатор - частью кода.</p> + +<h2 id="Примеры">Примеры</h2> + +<p>Параметры функции должны быть идентификаторами при настройке функции. Все эти объявления функций, которые обеспечивают значения их параметров:</p> + +<pre class="brush: js example-bad highlight:[1,6,11]">function square(3) { + return number * number; +}; +// SyntaxError: отсутствует формальный параметр + +function greet("Howdy") { + return greeting; +}; +// SyntaxError: отсутствует формальный параметр + +function log({ obj: "value"}) { + console.log(arg) +}; +// SyntaxError: отсутствует формальный параметр +</pre> + +<p>В объявлениях функций необходимо использовать идентификаторы:</p> + +<pre class="brush: js example-good highlight:[1,5,9]">function square(number) { + return number * number; +}; + +function greet(greeting) { + return greeting; +}; + +function log(arg) { + console.log(arg) +};</pre> + +<p>Затем можно вызвать эти функции с аргументами, которые вам нравятся:</p> + +<pre class="brush: js">square(2); // 4 + +greet("Howdy"); // "Howdy" + +log({obj: "value"}); // Object { obj: "value" } +</pre> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li>Другие ошибки, касающиеся формальных параметров: + <ul> + <li><a href="/en-US/docs/Web/JavaScript/Reference/Errors/Malformed_formal_parameter">SyntaxError: Malformed formal parameter</a></li> + <li><a href="/en-US/docs/Web/JavaScript/Reference/Errors/Redeclared_parameter">SyntaxError: redeclaration of formal parameter "x"</a></li> + </ul> + </li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/missing_initializer_in_const/index.html b/files/ru/web/javascript/reference/errors/missing_initializer_in_const/index.html new file mode 100644 index 0000000000..875084b4f5 --- /dev/null +++ b/files/ru/web/javascript/reference/errors/missing_initializer_in_const/index.html @@ -0,0 +1,54 @@ +--- +title: 'SyntaxError: missing = in const declaration' +slug: Web/JavaScript/Reference/Errors/Missing_initializer_in_const +translation_of: Web/JavaScript/Reference/Errors/Missing_initializer_in_const +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщение">Сообщение</h2> + +<pre class="syntaxbox">SyntaxError: missing = in const declaration (Firefox) +SyntaxError: Missing initializer in const declaration (Chrome) +</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>{{jsxref("SyntaxError")}}</p> + +<h2 id="Что_пошло_не_так">Что пошло не так?</h2> + +<p>Константа это значение, которое не может быть изменено программой в процессе своего выполнения. Оно не может меняться посредством повторного назначения, и не может быть переопределено. В JavaScript константы объявляются с использованием ключевого слова <code>const</code>. Инициализация для константы является обязательной; то есть вы должны указать значение сразу же при её объявлении (что имеет смысл, учитывая, что оно не может быть изменено позже).</p> + +<h2 id="Примеры">Примеры</h2> + +<h3 id="Отсутствие_инициализатора_константы">Отсутствие инициализатора константы</h3> + +<p>В отличие от <code>var</code> или <code>let</code>, вы должны указать значение при объявлении <code>const</code>. В противном случае возникнет ошибка:</p> + +<pre class="brush: js example-bad">const COLUMNS; +// SyntaxError: missing = in const declaration</pre> + +<h3 id="Исправление_ошибки">Исправление ошибки</h3> + +<p>Существует несколько вариантов исправления этой ошибки. Проверьте, что должно быть достигнуто с помощью данной константы.</p> + +<h4 id="Добавление_значения_константы">Добавление значения константы</h4> + +<p>Укажите значение константы при её объявлении.</p> + +<pre class="brush: js example-good">const COLUMNS = 80;</pre> + +<h4 id="const_let_или_var"><code>const</code>, <code>let</code> или <code>var</code>?</h4> + +<p>Не используйте <code>const</code>, если вы не хотели объявить константу. Возможно, вы подразумевали объявление переменную с блочной областью видимости с помощью <code>let</code> или глобальную переменную с помощью <code>var</code>. Оба варианта не требуют начального значения.</p> + +<pre class="brush: js example-good">let columns; +</pre> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/const">const</a></code></li> + <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/let">let</a></code></li> + <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/var">var</a></code></li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/missing_name_after_dot_operator/index.html b/files/ru/web/javascript/reference/errors/missing_name_after_dot_operator/index.html new file mode 100644 index 0000000000..ef5179656c --- /dev/null +++ b/files/ru/web/javascript/reference/errors/missing_name_after_dot_operator/index.html @@ -0,0 +1,63 @@ +--- +title: 'SyntaxError: missing name after . operator(отсутствует имя после. оператора)' +slug: Web/JavaScript/Reference/Errors/Missing_name_after_dot_operator +translation_of: Web/JavaScript/Reference/Errors/Missing_name_after_dot_operator +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщение">Сообщение</h2> + +<pre class="syntaxbox">SyntaxError: missing name after . operator +</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>{{jsxref("SyntaxError")}}</p> + +<h2 id="Что_пошло_не_так">Что пошло не так?</h2> + +<p>Оператор точки (.) используется для доступа к свойству. Необходимо указать имя свойства, к которому требуется получить доступ. Для доступа к вычисляемому свойству может потребоваться изменить доступ к свойству с точки на квадратные скобки. Это позволит вычислить выражение. Может быть, вы собирались сделать конкатенацию вместо этого? В этом случае необходим оператор plus ( + ). См. примеры ниже.</p> + +<h2 id="Примеры">Примеры</h2> + +<h3 id="Доступ_к_свойствам">Доступ к свойствам</h3> + +<p>Методы доступа к свойствам в JavaScript используют точку (.) или квадратные скобки ([]), но не оба. Квадратные скобки обеспечивают доступ к вычисляемым свойствам.</p> + +<pre class="brush: js example-bad">var obj = { foo: { bar: "baz", bar2: "baz2" } }; +var i = 2; + +obj.[foo].[bar] +// SyntaxError: отсутсвует имя после. оператора + +obj.foo."bar"+i; +// SyntaxError: отсутсвует имя после. оператора +</pre> + +<p>Чтобы исправить этот код, необходимо получить доступ к объекту следующим образом:</p> + +<pre class="brush: js example-good">obj.foo.bar; // "baz" +//или же +obj["foo"]["bar"]; // "baz" + +//вычисляемые свойства требуют квадратных скобок +obj.foo["bar" + i]; // "baz2" +</pre> + +<h3 id="Доступ_к_свойствам_против_конкатенации">Доступ к свойствам против конкатенации</h3> + +<p>Если вы пришли из другого языка программирования (например, {{Glossary("PHP")}}), также легко перепутать оператор точки (.) и оператор конкатенации (+).</p> + +<pre class="brush: js example-bad">console.log("Hello" . "world"); + +// SyntaxError: missing name after . operator</pre> + +<p>Вместо этого необходимо использовать знак плюс для объединения:</p> + +<pre class="brush: js example-good">console.log("Hello" + "World");</pre> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li><a href="/en-US/docs/Web/JavaScript/Reference/Operators/Property_Accessors">Property accessors</a>(доступ к свойствам)</li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/missing_parenthesis_after_argument_list/index.html b/files/ru/web/javascript/reference/errors/missing_parenthesis_after_argument_list/index.html new file mode 100644 index 0000000000..1b84367f61 --- /dev/null +++ b/files/ru/web/javascript/reference/errors/missing_parenthesis_after_argument_list/index.html @@ -0,0 +1,38 @@ +--- +title: 'Синтаксическая ошибка: пропущенный символ ")" после списка аргументов' +slug: Web/JavaScript/Reference/Errors/Missing_parenthesis_after_argument_list +translation_of: Web/JavaScript/Reference/Errors/Missing_parenthesis_after_argument_list +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщение">Сообщение</h2> + +<pre class="syntaxbox">Синтаксическая ошибка: пропущенный символ ")" после списка аргументов +</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>{{jsxref("SyntaxError")}}.</p> + +<h2 id="Причина_возникновения_ошибки">Причина возникновения ошибки</h2> + +<p>Ошибка в вызове функции. Например, опечатка, пропущенный оператор, или некорректно обрамлённая кавычками строка.</p> + +<h2 id="Примеры">Примеры</h2> + +<p>Из-за отсутствия оператора конкатенации "+", JavaScript ожидает аргумент функции <code>log</code> просто <code>"PI: "</code>. В этом случае, он должен быть заключен в закрывающие скобки.</p> + +<pre class="brush: js example-bad">console.log('PI: ' Math.PI); +// SyntaxError: missing ) after argument list +</pre> + +<p>Можно скорректировать вызов функции <code>log</code> добавлением оператора "<code>+</code>":</p> + +<pre class="brush: js example-good">console.log('PI: ' + Math.PI); +// "PI: 3.141592653589793"</pre> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li><a href="/en-US/docs/Web/JavaScript/Guide/Functions">Функции</a></li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/missing_parenthesis_after_condition/index.html b/files/ru/web/javascript/reference/errors/missing_parenthesis_after_condition/index.html new file mode 100644 index 0000000000..2bd9f1cd27 --- /dev/null +++ b/files/ru/web/javascript/reference/errors/missing_parenthesis_after_condition/index.html @@ -0,0 +1,70 @@ +--- +title: 'SyntaxError: missing ) after condition' +slug: Web/JavaScript/Reference/Errors/Missing_parenthesis_after_condition +tags: + - Error + - Errors + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Missing_parenthesis_after_condition +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщение">Сообщение</h2> + +<pre class="syntaxbox">SyntaxError: missing ) after condition +</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>{{jsxref("SyntaxError")}}</p> + +<h2 id="Что_пошло_не_так">Что пошло не так?</h2> + +<p>Произошла ошибка в написании условия if. В любом языке программирования код принимает решение выполнять действия в зависимости от входных параметров. Оператор if выполняет действия, если условие истинно. В JavaScript это условие должно заключаться в скобки после ключевого слова if, например:</p> + +<pre class="brush: js">if (condition) { + // сделать что-то если условие истинно +}</pre> + +<h2 id="Примеры">Примеры</h2> + +<p>Это может быть просто недосмотр, внимательно проверьте все скобки в коде.</p> + +<pre class="brush: js example-bad">if (3 > Math.PI { + console.log("Что?"); +} + +// SyntaxError: missing ) after condition +</pre> + +<p>Чтобы исправить ошибку вы должны поставить закрывающую скобку после условия.</p> + +<pre class="brush: js example-good">if (3 > Math.PI) { + console.log("Что?"); +}</pre> + +<p>Если вы пришли из других языков программирования, то можете случайно использовать ключевые слова, которые в JavaScript обозначают что-то другое или вообще не имеют смысла.</p> + +<pre class="brush: js example-bad">if (done is true) { + console.log("мы сделали!"); +} + +// SyntaxError: missing ) after condition +</pre> + +<p>Вместо этого используйте нужный <a href="/ru/docs/Web/JavaScript/Reference/Operators/Операторы_сравнения">оператор сравнения</a>. Для примера:</p> + +<pre class="brush: js example-good">if (done === true) { + console.log("мы сделали!"); +}</pre> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li><code><a href="/ru/docs/Web/JavaScript/Reference/Statements/if...else">if...else</a></code></li> + <li><a href="/ru/docs/Web/JavaScript/Reference/Operators/Операторы_сравнения">Операторы сравнения</a></li> + <li> + <p><a href="/ru/docs/Learn/JavaScript/Building_blocks/conditionals">Making decisions in your code — conditionals</a></p> + </li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/missing_semicolon_before_statement/index.html b/files/ru/web/javascript/reference/errors/missing_semicolon_before_statement/index.html new file mode 100644 index 0000000000..ea2bf7e8ac --- /dev/null +++ b/files/ru/web/javascript/reference/errors/missing_semicolon_before_statement/index.html @@ -0,0 +1,82 @@ +--- +title: 'SyntaxError: missing ; before statement' +slug: Web/JavaScript/Reference/Errors/Missing_semicolon_before_statement +tags: + - JavaScript + - SyntaxError + - ru + - Ошибки +translation_of: Web/JavaScript/Reference/Errors/Missing_semicolon_before_statement +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщение">Сообщение</h2> + +<pre class="syntaxbox">SyntaxError: Expected ';' (Edge) +SyntaxError: missing ; before statement (Firefox)</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>{{jsxref("SyntaxError")}}.</p> + +<h2 id="Что_пошло_не_так">Что пошло не так?</h2> + +<p>Отсутствует точка с запятой (<code>;</code>). <a href="/ru/docs/Web/JavaScript/Reference/Statements">Инструкции JavaScript</a> должны заканчиваться точкой с запятой. В некоторых случаях имеет место <a href="/ru/docs/Web/JavaScript/Reference/Lexical_grammar#Автоматическая_вставка_точки_с_запятой">автоматическая вставка точки с запятой (ASI)</a>, но в данном случае необходимо её поставить, чтобы JavaScript мог правильно обработать исходный код.</p> + +<p><span id="result_box" lang="ru"><span>Часто эта ошибка является следствием другой ошибки, например, некорректного экранирования строк или неправильного использования <code>var</code>.</span> Кроме того, где-то может быть с<span>лишком много скобок.</span> <span>Тщательно проверьте синтаксис при возникновении этой ошибки.</span></span></p> + +<h2 id="Примеры">Примеры</h2> + +<h3 id="Неэкранированные_строки">Неэкранированные строки</h3> + +<p>Эта ошибка может легко возникнуть, если не экранировать строку правильным образом, из-за чего JavaScript будет рассматривать это место как конец строки. Например:</p> + +<pre class="brush: js example-bad">var foo = 'Tom's bar'; +// SyntaxError: missing ; before statement</pre> + +<p>Можно использовать двойные кавычки или экранировать апостроф:</p> + +<pre class="brush: js example-good">var foo = "Tom's bar"; +var foo = 'Tom\'s bar'; +</pre> + +<h3 id="Объявление_свойств_через_var">Объявление свойств через var</h3> + +<p><strong>Нельзя</strong> объявить свойство объекта или массива с помощью <code>var</code>.</p> + +<pre class="brush: js example-bad">var obj = {}; +var obj.foo = 'привет'; // SyntaxError missing ; before statement + +var array = []; +var array[0] = 'всем'; // SyntaxError missing ; before statement +</pre> + +<p>Ключевое слово <code>var</code> необходимо опустить:</p> + +<pre class="brush: js example-good">var obj = {}; +obj.foo = 'привет'; + +var array = []; +array[0] = 'всем'; +</pre> + +<h3 id="Неправильные_ключевые_слова">Неправильные ключевые слова</h3> + +<p>При переходе с другого языка программирования частой проблемой является использование ключевых слов, которые в JavaScript имеют другое значение или ничего не означают.</p> + +<pre class="brush: js example-bad">def print(info){ + console.log(info); +}; // SyntaxError missing ; before statement</pre> + +<p>Вместо <code>def</code> используйте <code>function</code>:</p> + +<pre class="brush: js example-good">function print(info){ + console.log(info); +};</pre> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li><a href="/ru/docs/Web/JavaScript/Reference/Lexical_grammar#Автоматическая_вставка_точки_с_запятой">Автоматическая вставка точки с запятой (ASI)</a></li> + <li><a href="/ru/docs/Web/JavaScript/Reference/Statements">Инструкции JavaScript</a></li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/more_arguments_needed/index.html b/files/ru/web/javascript/reference/errors/more_arguments_needed/index.html new file mode 100644 index 0000000000..2e7777939e --- /dev/null +++ b/files/ru/web/javascript/reference/errors/more_arguments_needed/index.html @@ -0,0 +1,48 @@ +--- +title: 'TypeError: More arguments needed' +slug: Web/JavaScript/Reference/Errors/More_arguments_needed +tags: + - Errors + - JavaScript + - TypeError +translation_of: Web/JavaScript/Reference/Errors/More_arguments_needed +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщение">Сообщение</h2> + +<pre class="syntaxbox">TypeError: Object.create requires more than 0 arguments +TypeError: Object.setPrototypeOf requires more than 1 argument +TypeError: Object.defineProperties requires more than 0 arguments +</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>{{jsxref("TypeError")}}.</p> + +<h2 id="Что_пошло_не_так">Что пошло не так?</h2> + +<p>Ошибка в вызове функции. Необходимо передать больше аргументов.</p> + +<h2 id="Примеры">Примеры</h2> + +<p>Метод {{jsxref("Object.create()")}} требует хотя бы один аргумент, а {{jsxref("Object.setPrototypeOf()")}} минимум двух:</p> + +<pre class="brush: js example-bad">var obj = Object.create(); +// TypeError: Object.create requires more than 0 arguments + +var obj = Object.setPrototypeOf({}); +// TypeError: Object.setPrototypeOf requires more than 1 argument +</pre> + +<p>Вы можете исправить это, установив {{jsxref("null")}} в качестве прототипа, например:</p> + +<pre class="brush: js example-good">var obj = Object.create(null); + +var obj = Object.setPrototypeOf({}, null);</pre> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li><a href="/ru/docs/Web/JavaScript/Guide/Functions">Функции</a></li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/negative_repetition_count/index.html b/files/ru/web/javascript/reference/errors/negative_repetition_count/index.html new file mode 100644 index 0000000000..ff60911f45 --- /dev/null +++ b/files/ru/web/javascript/reference/errors/negative_repetition_count/index.html @@ -0,0 +1,40 @@ +--- +title: 'RangeError: repeat count must be non-negative' +slug: Web/JavaScript/Reference/Errors/Negative_repetition_count +translation_of: Web/JavaScript/Reference/Errors/Negative_repetition_count +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщение">Сообщение</h2> + +<pre class="syntaxbox">RangeError: repeat count must be non-negative (Firefox) +RangeError: Invalid count value (Chrome) +</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>{{jsxref("RangeError")}}</p> + +<h2 id="Что_пошло_не_так">Что пошло не так?</h2> + +<p>Был использован метод {{jsxref("String.prototype.repeat()")}}, с параметром <code>count</code>, указывающим количество повторений строки. Параметр может принимать значения между 0 и положительной {{jsxref("Infinity")}}, и не может быть отрицательным числом. Диапазон допустимых значений может быть описан следующим образом: [0, + ∞).</p> + +<h2 id="Примеры">Примеры</h2> + +<h3 id="Неверно">Неверно</h3> + +<pre class="brush: js example-bad">'abc'.repeat(-1); // RangeError </pre> + +<h3 id="Верно">Верно</h3> + +<pre class="brush: js example-good">'abc'.repeat(0); // '' +'abc'.repeat(1); // 'abc' +'abc'.repeat(2); // 'abcabc' +'abc'.repeat(3.5); // 'abcabcabc' (count will be converted to integer) +</pre> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li>{{jsxref("String.prototype.repeat()")}}</li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/no_non-null_object/index.html b/files/ru/web/javascript/reference/errors/no_non-null_object/index.html new file mode 100644 index 0000000000..c00c5ff571 --- /dev/null +++ b/files/ru/web/javascript/reference/errors/no_non-null_object/index.html @@ -0,0 +1,65 @@ +--- +title: >- + TypeError: "x" is not a non-null object(Тип ошибки: "x" не является ненулевым + объектом) +slug: Web/JavaScript/Reference/Errors/No_non-null_object +translation_of: Web/JavaScript/Reference/Errors/No_non-null_object +--- +<div>{{JSSidebar("Errors")}}</div> + +<h2 id="Сообщения">Сообщения</h2> + +<pre class="syntaxbox">TypeError: недопустимый дескриптор свойства {x} (Edge) +TypeError: "x" не является ненулевым объектом (Firefox) +TypeError: описание свойства должно быть объектом: "x" (Chrome) +TypeError: недопустимое значение, используемое в слабом наборе (Chrome) + +</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>{{jsxref("TypeError")}}</p> + +<h2 id="Что_пошло_не_так">Что пошло не так?</h2> + +<p>Объект где-то ожидался и не был предоставлен. {{jsxref("null")}} не является объектом и не будет работать. Вы должны обеспечить надлежащий объект в данной ситуации.</p> + +<h2 id="Примеры">Примеры</h2> + +<h3 id="Ожидается_дескриптор_свойства">Ожидается дескриптор свойства</h3> + +<p>Когда такие методы, как {{jsxref("Object.create()")}} или {{jsxref("object.defineProperty()")}} и {{jsxref("object.defineProperties()")}} используются, дополнительный параметр дескриптора ожидает объект дескриптора свойства. Если не указать объект (например, просто число), возникнет ошибка:</p> + +<pre class="brush: js example-bad">Object.defineProperty({}, 'key', 1); +// TypeError: 1 is not a non-null object + +Object.defineProperty({}, 'key', null); +// TypeError: null is not a non-null object +</pre> + +<p>Допустимый объект дескриптора свойства может выглядеть следующим образом:</p> + +<pre class="brush: js example-good">Object.defineProperty({}, 'key', { value: 'foo', writable: false }); +</pre> + +<h3 id="СлабаяКарта_и_СлабыйСет_объектов_требуют_ключей_объектов"><code>СлабаяКарта</code> и <code>СлабыйСет</code> объектов требуют ключей объектов</h3> + +<p>{{jsxref("WeakMap")}} and {{jsxref("WeakSet")}} объекты хранят ключи объектов. Вы не можете использовать другие типы ключей.</p> + +<pre class="brush: js example-bad">var ws = new WeakSet(); +ws.add('foo'); +// TypeError: "foo" is not a non-null object</pre> + +<p>Создание обьекта вместо:</p> + +<pre class="brush: js example-good">ws.add({foo: 'bar'}); +ws.add(window); +</pre> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li>{{jsxref("Object.create()")}}</li> + <li>{{jsxref("Object.defineProperty()")}}, {{jsxref("Object.defineProperties()")}}</li> + <li>{{jsxref("WeakMap")}}, {{jsxref("WeakSet")}}</li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/no_properties/index.html b/files/ru/web/javascript/reference/errors/no_properties/index.html new file mode 100644 index 0000000000..7db5d305e9 --- /dev/null +++ b/files/ru/web/javascript/reference/errors/no_properties/index.html @@ -0,0 +1,41 @@ +--- +title: 'TypeError: "x" has no properties' +slug: Web/JavaScript/Reference/Errors/No_properties +tags: + - JavaScript + - TypeError + - Ошибки +translation_of: Web/JavaScript/Reference/Errors/No_properties +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщение">Сообщение</h2> + +<pre class="syntaxbox">TypeError: Unable to get property {x} of undefined or null reference (Edge) +TypeError: null has no properties (Firefox) +TypeError: undefined has no properties (Firefox) +</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>{{jsxref("TypeError")}}.</p> + +<h2 id="Что_пошло_не_так">Что пошло не так?</h2> + +<p>У {{jsxref("null")}} и {{jsxref("undefined")}} нет свойств, к которым можно было бы обратиться.</p> + +<h2 id="Примеры">Примеры</h2> + +<pre class="brush: js example-bad">null.foo; +// TypeError: null has no properties + +undefined.bar; +// TypeError: undefined has no properties +</pre> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li>{{jsxref("null")}}</li> + <li>{{jsxref("undefined")}}</li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/no_variable_name/index.html b/files/ru/web/javascript/reference/errors/no_variable_name/index.html new file mode 100644 index 0000000000..9ac5f9cb6e --- /dev/null +++ b/files/ru/web/javascript/reference/errors/no_variable_name/index.html @@ -0,0 +1,83 @@ +--- +title: 'SyntaxError: missing variable name' +slug: Web/JavaScript/Reference/Errors/No_variable_name +tags: + - JavaScript + - SyntaxError + - Ошибки +translation_of: Web/JavaScript/Reference/Errors/No_variable_name +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщение">Сообщение</h2> + +<pre class="syntaxbox">SyntaxError: missing variable name (Firefox) +SyntaxError: Unexpected token = (Chrome)</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>{{jsxref("SyntaxError")}}</p> + +<h2 id="Что_пошло_не_так">Что пошло не так?</h2> + +<p>У переменной отсутствует имя. Скорее всего, дело в синтаксической ошибке в вашем коде. Может, где-то неправильно стоит запятая, или у вас возникли трудности с именованием. Прекрасно вас понимаем! Придумывать названия – очень непросто.</p> + +<h2 id="Примеры">Примеры</h2> + +<h3 id="Отсутствует_имя_переменной">Отсутствует имя переменной</h3> + +<pre class="brush: js example-bad">var = "foo"; +</pre> + +<p>Придумывать хорошие имена переменным очень тяжело, все мы с таким сталкивались.</p> + +<pre class="brush: js example-good">var ohGodWhy = "foo";</pre> + +<h3 id="Зарезервированные_ключевые_слова_не_могут_использоваться_как_имена_переменных">Зарезервированные ключевые слова не могут использоваться как имена переменных</h3> + +<p>Есть несколько имен, которые являются <a href="/ru/docs/Web/JavaScript/Reference/Lexical_grammar#Ключевые_слова">зарезервированными ключевыми словами</a>. Их нельзя использовать. Увы :(</p> + +<pre class="brush: js example-bad">var debugger = "whoop"; +// SyntaxError: missing variable name +</pre> + +<h3 id="Объявление_нескольких_переменных">Объявление нескольких переменных</h3> + +<p>При объявлении нескольких переменных обращайте особое внимание на запятые. Нет ли лишних запятых? Не поставили ли вы случайно запятые вместо точек с запятыми?</p> + +<pre class="brush: js example-bad">var x, y = "foo", +var x, = "foo" + +var first = document.getElementById('раз'), +var second = document.getElementById('два'), + +// SyntaxError: missing variable name +</pre> + +<p>Исправленный вариант:</p> + +<pre class="brush: js example-good">var x, y = "foo"; +var x = "foo"; + +var first = document.getElementById('раз'); +var second = document.getElementById('два');</pre> + +<h3 id="Массивы">Массивы</h3> + +<p>Литералам {{jsxref("Array")}} в JavaScript необходимы квадратные скобки вокруг значений. Такое не сработает:</p> + +<pre class="brush: js example-bad">var arr = 1,2,3,4,5; +// SyntaxError: missing variable name +</pre> + +<p>А вот так будет правильно:</p> + +<pre class="brush: js example-good">var arr = [1,2,3,4,5];</pre> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li><a href="http://wiki.c2.com/?GoodVariableNames">Хорошие имена переменных (на англ.)</a></li> + <li><code><a href="/ru/docs/Web/JavaScript/Reference/Statements/var">var</a></code></li> + <li><a href="/ru/docs/Web/JavaScript/Guide/Grammar_and_types#Объявления">Объявления переменных в Руководстве по JavaScript</a></li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/non_configurable_array_element/index.html b/files/ru/web/javascript/reference/errors/non_configurable_array_element/index.html new file mode 100644 index 0000000000..b298844d17 --- /dev/null +++ b/files/ru/web/javascript/reference/errors/non_configurable_array_element/index.html @@ -0,0 +1,84 @@ +--- +title: >- + TypeError: can't delete non-configurable array element(Тип ошибки:не удается + удалить настраиваемый элемент массива) +slug: Web/JavaScript/Reference/Errors/Non_configurable_array_element +translation_of: Web/JavaScript/Reference/Errors/Non_configurable_array_element +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщения">Сообщения</h2> + +<pre class="syntaxbox">TypeError: не удается удалить не настраиваемый элемент массива (Firefox) +TypeError: не удается удалить свойство '2' из [массива объектов] (Chrome) +</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>{{jsxref("TypeError")}}</p> + +<h2 id="Что_пошло_не_так">Что пошло не так?</h2> + +<p> </p> + +<p>Была сделана попытка сократить длину массива, но один из элементов массива не изменяется. При укорочении массив, элементы за новую длину массива будут удалены, не в этой ситуации.</p> + +<p>Настраиваемый атрибут определяет, можно ли удалить свойство из объекта и можно ли изменить его атрибуты (отличные от доступных для записи).</p> + +<p>Обычно свойства объекта, созданного инициализатором массива, настраиваются. Однако, например, при использовании {{jsxref("Object.defineProperty()")}}, свойство не настраивается по умолчанию.</p> + +<p> </p> + +<h2 id="Examples">Examples</h2> + +<h3 id="Не_настраиваемые_свойства_созданные_Object.defineProperty">Не настраиваемые свойства, созданные <code>Object.defineProperty</code></h3> + +<p>The {{jsxref("Object.defineProperty()")}} создает не настраиваемые свойства по умолчанию, если они не указаны как настраиваемые.</p> + +<pre class="brush: js example-bad">var arr = []; +Object.defineProperty(arr, 0, {value: 0}); +Object.defineProperty(arr, 1, {value: "1"}); + +arr.length = 1; +// TypeError: не удается удалить не настраиваемый элемент массива +</pre> + +<p>Вам нужно будет установить элементы как конфигурируемые, если вы собираетесь сократить массив.</p> + +<pre class="brush: js example-good">var arr = []; +Object.defineProperty(arr, 0, {value: 0, configurable: true}); +Object.defineProperty(arr, 1, {value: "1", configurable: true}); + +arr.length = 1; +</pre> + +<h3 id="Seal-ed_Arrays_(Герметичные_Массивы)"><code>Seal</code>-ed Arrays (Герметичные Массивы)</h3> + +<p>The {{jsxref("Object.seal()")}} функция помечает все существующие элементы как не настраиваемые.</p> + +<pre class="brush: js example-bad">var arr = [1,2,3]; +Object.seal(arr); + +arr.length = 1; +// TypeError: can't delete non-configurable array element +</pre> + +<p>Вам или нужно извлечь {{jsxref("Object.seal()")}} позвоните или сделайте копию. В случае копирования сокращение копии массива не изменяет длину исходного массива.</p> + +<pre class="brush: js example-good">var arr = [1,2,3]; +Object.seal(arr); + +// Скопируйте исходный массив, чтобы сократить копию +var copy = Array.from(arr); +copy.length = 1; +// arr.length == 3 +</pre> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li><a href="/en-US/docs/Web/JavaScript/Data_structures#Properties">[[Configurable]]</a></li> + <li>{{jsxref("Array.length")}}</li> + <li>{{jsxref("Object.defineProperty()")}}</li> + <li>{{jsxref("Object.seal()")}}</li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/not_a_codepoint/index.html b/files/ru/web/javascript/reference/errors/not_a_codepoint/index.html new file mode 100644 index 0000000000..0b72d6c50f --- /dev/null +++ b/files/ru/web/javascript/reference/errors/not_a_codepoint/index.html @@ -0,0 +1,50 @@ +--- +title: 'RangeError: argument is not a valid code point' +slug: Web/JavaScript/Reference/Errors/Not_a_codepoint +translation_of: Web/JavaScript/Reference/Errors/Not_a_codepoint +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщение">Сообщение</h2> + +<pre class="syntaxbox">RangeError: Invalid code point {0} (Edge) +RangeError: {0} is not a valid code point (Firefox) +RangeError: Invalid code point {0} (Chrome) +</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>{{jsxref("RangeError")}}</p> + +<h2 id="Что_пошло_не_так">Что пошло не так?</h2> + +<p>Метод {{jsxref("String.fromCodePoint()")}} выдает ошибку, если ему было передано значение {{jsxref("NaN")}}, отрицательное целое число (-1), нецелое число (5.4) или значение, которое превышает 0x10FFFF (1114111).</p> + +<p><a href="https://en.wikipedia.org/wiki/Code_point">Кодовая точка (code point)</a> – это значение в кодовом пространстве Unicode, то есть диапазон целых чисел от <code>0</code> до <code>0x10FFFF</code>.</p> + +<h2 id="Примеры">Примеры</h2> + +<h3 id="Нерабочие_случаи">Нерабочие случаи</h3> + +<pre class="brush: js example-bad">String.fromCodePoint('_'); // RangeError +String.fromCodePoint(Infinity); // RangeError +String.fromCodePoint(-1); // RangeError +String.fromCodePoint(3.14); // RangeError +String.fromCodePoint(3e-2); // RangeError +String.fromCodePoint(NaN); // RangeError</pre> + +<h3 id="Рабочие_случаи">Рабочие случаи</h3> + +<pre class="brush: js example-good">String.fromCodePoint(42); // "*" +String.fromCodePoint(65, 90); // "AZ" +String.fromCodePoint(0x404); // "\u0404" +String.fromCodePoint(0x2F804); // "\uD87E\uDC04" +String.fromCodePoint(194564); // "\uD87E\uDC04" +String.fromCodePoint(0x1D306, 0x61, 0x1D307) // "\uD834\uDF06a\uD834\uDF07" +</pre> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li>{{jsxref("String.fromCodePoint()")}}</li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/not_a_constructor/index.html b/files/ru/web/javascript/reference/errors/not_a_constructor/index.html new file mode 100644 index 0000000000..e9c3aafb29 --- /dev/null +++ b/files/ru/web/javascript/reference/errors/not_a_constructor/index.html @@ -0,0 +1,96 @@ +--- +title: 'TypeError: "x" is not a constructor' +slug: Web/JavaScript/Reference/Errors/Not_a_constructor +tags: + - Errors + - JavaScript + - TypeError +translation_of: Web/JavaScript/Reference/Errors/Not_a_constructor +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщение">Сообщение</h2> + +<pre class="syntaxbox">TypeError: Object doesn't support this action (Edge) +TypeError: "x" is not a constructor + +TypeError: Math is not a constructor +TypeError: JSON is not a constructor +TypeError: Symbol is not a constructor +TypeError: Reflect is not a constructor +TypeError: Intl is not a constructor +TypeError: SIMD is not a constructor +TypeError: Atomics is not a constructor +</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>{{jsxref("TypeError")}}</p> + +<h2 id="Что_пошло_не_так">Что пошло не так?</h2> + +<p>Была попытка использовать объект или переменную как конструктор, однако этот объект или переменная - не конструктор. Смотрите {{Glossary("constructor")}} или <a href="/en-US/docs/Web/JavaScript/Reference/Operators/new"><code>new</code> operator</a>, чтобы получить больше информации о том, что такое конструктор.</p> + +<p>Существует множество глобальных объектов, таких как {{jsxref("String")}} или {{jsxref("Array")}}, которые можно построить с использованием <code>new</code>. Однако, некоторые глобальные объекты - нельзя, т.к. их свойства и методы статичны. Следующие стандартные встроенные объекты JavaScript - не конструкторы: {{jsxref("Math")}}, {{jsxref("JSON")}}, {{jsxref("Symbol")}}, {{jsxref("Reflect")}}, {{jsxref("Intl")}}, {{jsxref("SIMD")}}, {{jsxref("Atomics")}}.</p> + +<p><a href="/en-US/docs/Web/JavaScript/Reference/Statements/function*">Функции-генераторы</a> также не могут быть использованы как конструкторы.</p> + +<h2 id="Примеры">Примеры</h2> + +<h3 id="Неправильное_использование">Неправильное использование</h3> + +<pre class="brush: js example-bad">var Car = 1; +new Car(); +// TypeError: Car is not a constructor + +new Math(); +// TypeError: Math is not a constructor + +new Symbol(); +// TypeError: Symbol is not a constructor + +function* f() {}; +var obj = new f; +// TypeError: f is not a constructor +</pre> + +<h3 id="Конструктор_car_(автомобиль)">Конструктор "car" (автомобиль)</h3> + +<p>Представьте, что Вы хотите создать тип объекта для автомобилей. Вы хотите, чтобы этот тип объектов назывался <code>car</code>, и Вы хотите, чтобы были свойства для производителя, модели и года выпуска. Чтобы сделать это, Вы должны написать следующую функцию:</p> + +<pre class="brush: js">function Car(make, model, year) { + this.make = make; + this.model = model; + this.year = year; +} +</pre> + +<p>Теперь Вы можете создать объект, который называется <code>mycar</code> (мой автомобиль) следующим образом:</p> + +<pre class="brush: js">var mycar = new Car('Лада', 'Самара', 1993);</pre> + +<h3 id="В_Обещаниях_(Promises)">В Обещаниях (Promises)</h3> + +<p>В случае, когда возвращается незамедлительно разрешенное или незамедлительно отклоненное Обещание, Вам не нужно создавать новое Обещание <em>new Promise(...)</em> и работать с ним.</p> + +<p>Это неправильно (<a href="/en-US/docs/Mozilla/JavaScript_code_modules/Promise.jsm/Promise#Constructor">конструктор Обещания</a> вызывается неправильно) и будет вызывать исключение <code>TypeError: this is not a constructor</code>:</p> + +<pre class="brush: js example-bad">return new Promise.resolve(true); +</pre> + +<p>Вместо этого используйте <a href="https://en.wikipedia.org/wiki/Method_(computer_programming)#Static_methods">статические методы</a> - <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/resolve">Promise.resolve()</a> или <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/reject">Promise.reject()</a> :</p> + +<pre class="brush: js">// Это допустимо, но слишком длинно, в этом нет необходимости: +return new Promise((resolve, reject) => { resolve(true); }) + +// Вместо этого, возвращайте статический метод: +return Promise.resolve(true); +return Promise.reject(false); +</pre> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li>{{Glossary("constructor")}}</li> + <li><a href="/en-US/docs/Web/JavaScript/Reference/Operators/new"><code>new</code> operator</a></li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/not_a_function/index.html b/files/ru/web/javascript/reference/errors/not_a_function/index.html new file mode 100644 index 0000000000..400db48a69 --- /dev/null +++ b/files/ru/web/javascript/reference/errors/not_a_function/index.html @@ -0,0 +1,84 @@ +--- +title: 'TypeError: "x" is not a function' +slug: Web/JavaScript/Reference/Errors/Not_a_function +tags: + - JavaScript + - TypeError + - Ошибки +translation_of: Web/JavaScript/Reference/Errors/Not_a_function +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщение">Сообщение</h2> + +<pre class="syntaxbox">TypeError: "x" is not a function +</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>{{jsxref("TypeError")}}.</p> + +<h2 id="Что_пошло_не_так">Что пошло не так?</h2> + +<p><span id="result_box" lang="ru"><span>Была сделана попытка</span> <span>вызвать</span> <span>значение</span> <span>как</span> <span>функцию</span><span>, но</span> <span>оно</span> <span>на самом деле не</span> <span>является функцией.</span> <span class="alt-edited">Некоторый код</span> <span>ожидает, что вы предоставите функцию</span><span>, но</span> <span>этого не происходит</span><span>.</span></span></p> + +<p>Возможно, есть ошибка в имени функции? Возможно, объект, метод которого вы вызываете, не содержит в себе этой функции? Для примера, JavaScript объекты не имеют <code>map</code> функции, а JavaScript Array - имеют.</p> + +<p>Есть множество функций нуждающихся в функциях обратного вызова. <span id="result_box" lang="ru"><span>Вы должны будете</span> <span class="alt-edited">предоставить функцию обратного вызова</span> <span>для того,</span> <span>чтобы эти</span> <span>методы работы</span> <span class="alt-edited">правильно</span></span>:</p> + +<ul> + <li>Когда работаете с {{jsxref("Array")}} или {{jsxref("TypedArray")}} объектами: + <ul> + <li>{{jsxref("Array.prototype.every()")}}, {{jsxref("Array.prototype.some()")}}, {{jsxref("Array.prototype.forEach()")}}, {{jsxref("Array.prototype.map()")}}, {{jsxref("Array.prototype.filter()")}}, {{jsxref("Array.prototype.reduce()")}}, {{jsxref("Array.prototype.reduceRight()")}}, {{jsxref("Array.prototype.find()")}}</li> + </ul> + </li> + <li>Когда работаете с {{jsxref("Map")}} и {{jsxref("Set")}} объектами: + <ul> + <li>{{jsxref("Map.prototype.forEach()")}} и {{jsxref("Set.prototype.forEach()")}}</li> + </ul> + </li> +</ul> + +<h2 id="Примеры">Примеры</h2> + +<h3 id="Ошибки_в_имени_функции">Ошибки в имени функции</h3> + +<p>В данном случае, случающемся очень часто, есть опечатка в имени метода:</p> + +<pre class="brush: js example-bad">var x = document.getElementByID("foo"); +// TypeError: document.getElementByID is not a function +</pre> + +<p>Корректное имя функции - <code>getElementByI<strong>d</strong></code>:</p> + +<pre class="brush: js example-good">var x = document.getElementById("foo"); +</pre> + +<h3 id="Функция_вызвана_с_неверным_объектом">Функция вызвана с неверным объектом</h3> + +<p>Для некоторых методов, вы должны предоставить функцию обратного вызова и она будет работать только на корректных объектах. В этом примере используется {{jsxref("Array.prototype.map()")}}, в котором {{jsxref("Array")}} будет работать только с массивами.</p> + +<pre class="brush: js example-bad">var obj = { a: 13, b: 37, c: 42 }; + +obj.map(function(num) { + return num * 2; +}); + +// TypeError: obj.map is not a function</pre> + +<p>Использование с массивом:</p> + +<pre class="brush: js example-good">var numbers = [1, 4, 9]; + +numbers.map(function(num) { + return num * 2; +}); + +// Array [ 2, 8, 18 ] +</pre> + +<h2 id="Смотри_также">Смотри также</h2> + +<ul> + <li><a href="/en-US/docs/Web/JavaScript/Reference/Functions">Functions</a></li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/not_defined/index.html b/files/ru/web/javascript/reference/errors/not_defined/index.html new file mode 100644 index 0000000000..039044b94c --- /dev/null +++ b/files/ru/web/javascript/reference/errors/not_defined/index.html @@ -0,0 +1,66 @@ +--- +title: 'ReferenceError: "x" is not defined' +slug: Web/JavaScript/Reference/Errors/Not_defined +translation_of: Web/JavaScript/Reference/Errors/Not_defined +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщение">Сообщение</h2> + +<pre class="syntaxbox">ReferenceError: "x" is not defined +</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>{{jsxref("ReferenceError")}}.</p> + +<h2 id="Что_пошло_не_так"><font><font>Что пошло не так?</font></font></h2> + +<p>Есть несуществующая переменная, которая ссылается куда-то. Эта переменная должна быть объявлена, или вам необходимо убедиться, что она доступна в вашем текущем скрипте или области исходного кода ( {{Glossary("scope")}}).</p> + +<div class="note"> +<p><strong>Заметка: </strong>При использовании стороних библиотек (такие как jQuery), убедитесь, что они загружаются до того, как вы используете переменные "$". Поместите тег {{HTMLElement("script")}} загружающий вашу библиотеку до того как вы будете использовать ее.</p> +</div> + +<h2 id="Примеры"><font><font>Примеры</font></font></h2> + +<h3 id="Переменная_не_объявлена"><font><font>Переменная не объявлена</font></font></h3> + +<pre class="brush: js example-bad">foo.substring(1); // ReferenceError: foo is not defined +</pre> + +<p>Переменная "Foo" не определена где-либо. Она должна быть в какой-то строке, так чтобы {{jsxref("String.prototype.substring()")}} метод начал работать.</p> + +<pre class="brush: js example-good">var foo = "bar"; +foo.substring(1); // "ar"</pre> + +<h3 id="Неправильная_зона_доступности"><font><font>Неправильная зона доступности</font></font></h3> + +<p>Переменная должна быть доступна в текущем контексте исполнения. Переменные, определенные внутри <a href="/ru/docs/Web/JavaScript/Reference/Functions">функции</a> не могут быть доступны из любой точки за пределами функции, так как переменная определена только в области видимости самой функции.</p> + +<pre class="brush: js example-bad">function numbers () { + var num1 = 2, + num2 = 3; + return num1 + num2; +} + +console.log(num1); // ReferenceError num1 is not defined.</pre> + +<p>Тем не менее, функция может получить доступ ко всем переменным и функциям, определенным в области видимости, в которой она определена. Другими словами, функция, определенная в глобальной области может получить доступ ко всем переменным, определенным в глобальном масштабе.</p> + +<pre class="brush: js example-good">var num1 = 2, + num2 = 3; + +function numbers () { + return num1 + num2; +} + +console.log(num1); // 2</pre> + +<h2 id="Смотрите_также"><font><font>Смотрите также</font></font></h2> + +<ul> + <li>{{Glossary("Scope")}} - область видимости</li> + <li><a href="/ru/docs/Web/JavaScript/Guide/Grammar_and_types#Объявления">Объявление переменных в руководстве по JavaScript</a></li> + <li><a href="/ru/docs/Web/JavaScript/Guide/Functions#Область_данных_и_замыкания">Область видимости функций в руководстве по JavaScript</a></li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/precision_range/index.html b/files/ru/web/javascript/reference/errors/precision_range/index.html new file mode 100644 index 0000000000..74d433bc40 --- /dev/null +++ b/files/ru/web/javascript/reference/errors/precision_range/index.html @@ -0,0 +1,96 @@ +--- +title: 'RangeError: precision is out of range' +slug: Web/JavaScript/Reference/Errors/Precision_range +tags: + - JavaScript + - RangeError + - Ошибки +translation_of: Web/JavaScript/Reference/Errors/Precision_range +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщение">Сообщение</h2> + +<pre class="syntaxbox">RangeError: precision {0} out of range (Firefox) +RangeError: toExponential() argument must be between 0 and 20 (Chrome) +RangeError: toFixed() digits argument must be between 0 and 20 (Chrome) +RangeError: toPrecision() argument must be between 1 and 21 (Chrome) +</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>{{jsxref("RangeError")}}</p> + +<h2 id="Что_пошло_не_так">Что пошло не так?</h2> + +<p>В одном из следующих методов был использован аргумент, значение которого лежит вне допустимых интервалов:</p> + +<ul> + <li>{{jsxref("Number.prototype.toExponential()")}}</li> + <li>{{jsxref("Number.prototype.toFixed()")}}</li> + <li>{{jsxref("Number.prototype.toPrecision()")}}</li> +</ul> + +<p>Допустимые значения для аргументов данных методов обычно лежат в диапазоне от 0 до 20 (или 21), однако спецификация ECMAScript допускает его расширение.</p> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">Метод</th> + <th scope="col">Firefox (SpiderMonkey)</th> + <th scope="col">Chrome, Opera (V8)</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{jsxref("Number.prototype.toExponential()")}}</td> + <td>от 0 до 100</td> + <td>от 0 до 20</td> + </tr> + <tr> + <td>{{jsxref("Number.prototype.toFixed()")}}</td> + <td>от -20 до 100</td> + <td>от 0 до 20</td> + </tr> + <tr> + <td>{{jsxref("Number.prototype.toPrecision()")}}</td> + <td>от 1 до 100</td> + <td>от 1 до 21</td> + </tr> + </tbody> +</table> + +<h2 id="Примеры">Примеры</h2> + +<h3 id="Примеры_некорректного_кода">Примеры некорректного кода</h3> + +<pre class="brush: js example-bad">77.1234.toExponential(-1); // RangeError +77.1234.toExponential(101); // RangeError + +2.34.toFixed(-100); // RangeError +2.34.toFixed(1001); // RangeError + +1234.5.toPrecision(-1); // RangeError +1234.5.toPrecision(101); // RangeError +</pre> + +<h3 id="Примеры_правильного_кода">Примеры правильного кода</h3> + +<pre class="brush: js example-good">77.1234.toExponential(4); // 7.7123e+1 +77.1234.toExponential(2); // 7.71e+1 + +2.34.toFixed(1); // 2.3 +2.35.toFixed(1); // 2.4 (обратите внимание: в данном случае производится округление в большую сторону) + +5.123456.toPrecision(5); // 5.1235 +5.123456.toPrecision(2); // 5.1 +5.123456.toPrecision(1); // 5 +</pre> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li>{{jsxref("Number.prototype.toExponential()")}}</li> + <li>{{jsxref("Number.prototype.toFixed()")}}</li> + <li>{{jsxref("Number.prototype.toPrecision()")}}</li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/property_access_denied/index.html b/files/ru/web/javascript/reference/errors/property_access_denied/index.html new file mode 100644 index 0000000000..f59c2ceb92 --- /dev/null +++ b/files/ru/web/javascript/reference/errors/property_access_denied/index.html @@ -0,0 +1,47 @@ +--- +title: 'Error: Permission denied to access property "x"' +slug: Web/JavaScript/Reference/Errors/Property_access_denied +tags: + - Error + - Errors + - JavaScript + - Security +translation_of: Web/JavaScript/Reference/Errors/Property_access_denied +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщение">Сообщение</h2> + +<pre class="syntaxbox">Error: Permission denied to access property "x" +</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>{{jsxref("Error")}}.</p> + +<h2 id="Что_пошло_не_так">Что пошло не так?</h2> + +<p><span class="seoSummary">Была попытка получить доступ к объекту, на который у вас нет разрешения. Вероятно, это элемент {{HTMLElement("iframe")}}, для которого вы нарушили <a href="/en-US/docs/Web/Security/Same-origin_policy">правило ограничения домена</a>.</span></p> + +<h2 id="Примеры">Примеры</h2> + +<pre class="brush: html"><!DOCTYPE html> +<html> + <head> + <iframe id="myframe" src="http://www1.w3c-test.org/common/blank.html"></iframe> + <script> + onload = function() { + console.log(frames[0].document); + // Error: Permission denied to access property "document" + } + </script> + </head> + <body></body> +</html></pre> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li>{{HTMLElement("iframe")}}</li> + <li><a href="/en-US/docs/Web/Security/Same-origin_policy">Same-origin policy</a></li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/read-only/index.html b/files/ru/web/javascript/reference/errors/read-only/index.html new file mode 100644 index 0000000000..4675e8008f --- /dev/null +++ b/files/ru/web/javascript/reference/errors/read-only/index.html @@ -0,0 +1,82 @@ +--- +title: 'TypeError: "x" is read-only(Ошибка Типа: "x" только для чтения)' +slug: Web/JavaScript/Reference/Errors/Read-only +translation_of: Web/JavaScript/Reference/Errors/Read-only +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщения">Сообщения</h2> + +<pre class="syntaxbox">TypeError: назначение свойств только для чтения не допускается в строгом режиме (Edge) +TypeError: "x" доступен только для чтения (Firefox) +TypeError: 0 доступен только для чтения (Firefox) +TypeError: не удается назначить только для чтения свойство "x" из #<объект> (Chrome) +TypeError: не удается назначить только для чтения свойство '0' [массив объектов] (Chrome) +</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>{{jsxref("TypeError")}}</p> + +<h2 id="Что_пошло_не_так">Что пошло не так?</h2> + +<p>Назначенное свойство глобальной переменной или объекта является свойством только для чтения. (Технически это свойство данных, недоступное для записи.)</p> + +<p>Эта ошибка возникает только в коде строгого режима. В нестрогом коде назначение игнорируется.</p> + +<p> </p> + +<h2 id="Примеры">Примеры</h2> + +<h3 id="недействительные_кейсы">недействительные кейсы</h3> + +<p>Свойства только для чтения не очень распространены, но их можно создать с помощью {{jsxref("Object.defineProperty()")}} или {{jsxref("Object.freeze()")}}.</p> + +<pre class="brush: js example-bad">'use strict'; +var obj = Object.freeze({name: 'Elsa', score: 157}); +obj.score = 0; // TypeError + +'use strict'; +Object.defineProperty(this, 'LUNG_COUNT', {value: 2, writable: false}); +LUNG_COUNT = 3; // TypeError + +'use strict'; +var frozenArray = Object.freeze([0, 1, 2]); +frozenArray[0]++; // TypeError +</pre> + +<p>В JavaScript также встроено несколько свойств, доступных только для чтения. Возможно, вы пытались переопределить математическую константу.</p> + +<pre class="brush: js example-bad">'use strict'; +Math.PI = 4; // TypeError +</pre> + +<p> </p> + +<p>Прости, ты не можешь этого сделать.</p> + +<p>Глобальная переменная undefined также доступна только для чтения, поэтому вы не можете заставить замолчать печально известную ошибку "undefined is not a function:</p> + +<p> </p> + +<pre class="brush: js example-bad">'use strict'; +undefined = function() {}; // TypeError: "undefined" доступен только для чтения +</pre> + +<h3 id="Правильные_кейсы">Правильные кейсы</h3> + +<pre class="brush: js example-good">'use strict'; +var obj = Object.freeze({name: 'Score', points: 157}); +obj = {name: obj.name, points: 0}; // замена его на новый работающий объект + +'use strict'; +var LUNG_COUNT = 2; // "var` работает, потому что он не только для чтения +LUNG_COUNT = 3; // ok (анатомически маловероятно, хотя) +</pre> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li>{{jsxref("Object.defineProperty()")}}</li> + <li>{{jsxref("Object.freeze()")}}</li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/redeclared_parameter/index.html b/files/ru/web/javascript/reference/errors/redeclared_parameter/index.html new file mode 100644 index 0000000000..781ea495ec --- /dev/null +++ b/files/ru/web/javascript/reference/errors/redeclared_parameter/index.html @@ -0,0 +1,61 @@ +--- +title: 'SyntaxError: redeclaration of formal parameter "x"' +slug: Web/JavaScript/Reference/Errors/Redeclared_parameter +tags: + - JavaScript + - SyntaxError + - Ошибки +translation_of: Web/JavaScript/Reference/Errors/Redeclared_parameter +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщение">Сообщение</h2> + +<pre class="syntaxbox">SyntaxError: redeclaration of formal parameter "x" (Firefox) +SyntaxError: Identifier "x" has already been declared (Chrome) +</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>{{jsxref("SyntaxError")}}</p> + +<h2 id="Что_пошло_не_так">Что пошло не так?</h2> + +<p>Одно и то же имя переменной сначала использовано в качестве параметра, а потом объявлено еще раз в теле функции с помощью оператора присваивания <code><a href="/ru/docs/Web/JavaScript/Reference/Statements/let">let</a></code>. В JavaScript не допустимо переопределение переменной в рамках области видимости функции или блока при помощи <code>let</code>.</p> + +<h2 id="Примеры">Примеры</h2> + +<p>В данном случае переменная "arg" переопределяет аргумент:</p> + +<pre class="brush: js example-bad">function f(arg) { + let arg = 'foo'; +} + +// SyntaxError: redeclaration of formal parameter "arg" +</pre> + +<p>Если вы хотите изменить значение переменной "arg" в теле функции, это можно сделать, но для этого не требуется объявлять эту же переменную еще раз. Иначе говоря, ключевое слово <code>let</code> можно опустить. Если же вы хотите создать новую переменную, необходимо ее переименовать, поскольку в противном случае она вступает в конфликт с уже существующим параметром функции.</p> + +<pre class="brush: js example-good">function f(arg) { + arg = 'foo'; +} + +function f(arg) { + let bar = 'foo'; +} +</pre> + +<h2 id="Примечания_о_совместимости">Примечания о совместимости</h2> + +<ul> + <li>В версиях Firefox до Firefox 49 {{geckoRelease(49)}}, у данной ошибки был тип {{jsxref("TypeError")}} ({{bug(1275240)}}).</li> +</ul> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li><code><a href="/ru/docs/Web/JavaScript/Reference/Statements/let">let</a></code></li> + <li><code><a href="/ru/docs/Web/JavaScript/Reference/Statements/const">const</a></code></li> + <li><code><a href="/ru/docs/Web/JavaScript/Reference/Statements/var">var</a></code></li> + <li><a href="/ru/docs/Web/JavaScript/Guide/Grammar_and_types#Объявления">Объявления переменных</a> в <a href="/ru/docs/Web/JavaScript/Guide">Руководстве по JavaScript</a></li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/reduce_of_empty_array_with_no_initial_value/index.html b/files/ru/web/javascript/reference/errors/reduce_of_empty_array_with_no_initial_value/index.html new file mode 100644 index 0000000000..ef0179a7ca --- /dev/null +++ b/files/ru/web/javascript/reference/errors/reduce_of_empty_array_with_no_initial_value/index.html @@ -0,0 +1,89 @@ +--- +title: >- + TypeError: Reduce of empty array with no initial value(Тип ошибки: уменьшение + пустого массива без начального значения) +slug: Web/JavaScript/Reference/Errors/Reduce_of_empty_array_with_no_initial_value +translation_of: Web/JavaScript/Reference/Errors/Reduce_of_empty_array_with_no_initial_value +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщение">Сообщение</h2> + +<pre class="syntaxbox">TypeError: уменьшение пустого массива без начального значения +</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>{{jsxref("TypeError")}}</p> + +<h2 id="Что_пошло_не_так">Что пошло не так?</h2> + +<p>В JavaScript существует несколько уменьщающих функций :</p> + +<ul> + <li>{{jsxref("Array.prototype.reduce()")}}, {{jsxref("Array.prototype.reduceRight()")}} и</li> + <li>{{jsxref("TypedArray.prototype.reduce()")}}, {{jsxref("TypedArray.prototype.reduceRight()")}}).</li> +</ul> + +<p>Эти функции дополнительно принимают значение initialValue (которое будет использоваться в качестве первого аргумента для первого вызова обратного вызова). Однако если начальное значение не указано, будет использоваться первый элемент {{jsxref("Array")}} или {{jsxref("TypedArray")}} в качестве начального значения. Эта ошибка возникает, когда предоставляется пустой массив, так как в этом случае не может быть возвращено начальное значение.</p> + +<h2 id="Примеры">Примеры</h2> + +<h3 id="Неправильные_примеры">Неправильные примеры</h3> + +<p>Эта проблема часто возникает в сочетании с фильтром ({{jsxref("Array.prototype.filter()")}}, {{jsxref("TypedArray.prototype.filter()")}}) который удалит все элементы списка. Таким образом, не оставляя ни одного для использования в качестве начального значения.</p> + +<pre class="brush: js example-bad">var ints = [0, -1, -2, -3, -4, -5]; +ints.filter(x => x > 0) // удаление всех элементов + .reduce((x, y) => x + y) // no more elements to use for the initial value.</pre> + +<p>Аналогично, та же проблема может возникнуть, если в селекторе есть опечатка или непредвиденное количество элементов в списке:</p> + +<pre class="brush: js example-bad">var names = document.getElementsByClassName("names"); +var name_list = Array.prototype.reduce.call(names, (acc, name) => acc + ", " + name); +</pre> + +<h3 id="Правильные_примеры">Правильные примеры</h3> + +<p> </p> + +<p>Эти проблемы могут быть решены двумя различными способами.</p> + +<p>Один из способов - фактически предоставить initialValue в качестве нейтрального элемента оператора, например 0 для сложения, 1 для умножения или пустую строку для объединения</p> + +<p> </p> + +<pre class="brush: js example-good">var ints = [0, -1, -2, -3, -4, -5]; +ints.filter(x => x < 0) // removes all elements + .reduce((x, y) => x + y, 0) // the initial value is the neutral element of the addition +</pre> + +<p>Другим способом было бы два для обработки пустого случая, или перед вызовом reduce, или в обратном вызове после добавления неожиданного фиктивного начального значения.</p> + +<pre class="brush: js example-good">var names = document.getElementsByClassName("names"); + +var name_list1 = ""; +if (names1.length >= 1) + name_list1 = Array.prototype.reduce.call(names, (acc, name) => acc + ", " + name); +// name_list1 == "" when names is empty. + +var name_list2 = Array.prototype.reduce.call(names, (acc, name) => { + if (acc == "") // initial value + return name; + return acc + ", " + name; +}, ""); +// name_list2 == "" when names is empty. +</pre> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li>{{jsxref("Array.prototype.reduce()")}}</li> + <li>{{jsxref("Array.prototype.reduceRight()")}}</li> + <li>{{jsxref("TypedArray.prototype.reduce()")}}</li> + <li>{{jsxref("TypedArray.prototype.reduceRight()")}}</li> + <li>{{jsxref("Array")}}</li> + <li>{{jsxref("TypedArray")}}</li> + <li>{{jsxref("Array.prototype.filter()")}}</li> + <li>{{jsxref("TypedArray.prototype.filter()")}}</li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/reserved_identifier/index.html b/files/ru/web/javascript/reference/errors/reserved_identifier/index.html new file mode 100644 index 0000000000..28c0df1add --- /dev/null +++ b/files/ru/web/javascript/reference/errors/reserved_identifier/index.html @@ -0,0 +1,76 @@ +--- +title: 'SyntaxError: "x" is a reserved identifier' +slug: Web/JavaScript/Reference/Errors/Reserved_identifier +translation_of: Web/JavaScript/Reference/Errors/Reserved_identifier +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщение">Сообщение</h2> + +<pre class="syntaxbox">SyntaxError: The use of a future reserved word for an identifier is invalid (Edge) +SyntaxError: "x" is a reserved identifier (Firefox) +SyntaxError: Unexpected reserved word (Chrome)</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>{{jsxref("SyntaxError")}}</p> + +<h2 id="Что_пошло_не_так">Что пошло не так?</h2> + +<p><a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Lexical_grammar#Ключевые_слова">Ключевые слова</a> используются в качестве идентификаторов. Ключевые слова зарезервированные и в строгом и обычном режиме:</p> + +<ul> + <li><code>enum</code></li> +</ul> + +<p>Следующие ключевые слова резервируются для кода, который выполняется только в строгом режиме (strict mode):</p> + +<ul class="threecolumns"> + <li><code>implements</code></li> + <li><code>interface</code></li> + <li> <code><a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Statements/let">let</a></code></li> + <li><code>package</code></li> + <li><code>private</code></li> + <li><code>protected</code></li> + <li><code>public</code></li> + <li><code>static</code></li> +</ul> + +<h2 id="Примеры">Примеры</h2> + +<h3 id="Строгий_и_нестрогий_режимы_резервирования_ключевых_строк">Строгий и нестрогий режимы резервирования ключевых строк</h3> + +<p>Идентификатор <code>enum</code> зарезервирован.</p> + +<pre class="brush: js example-bad">var enum = { RED: 0, GREEN: 1, BLUE: 2 }; +// SyntaxError: enum is a reserved identifier +</pre> + +<p>Резервирование большего количества идентификаторов с использованием строгого режима.</p> + +<pre class="brush: js example-bad">"use strict"; +var package = ["potatoes", "rice", "fries"]; +// SyntaxError: package is a reserved identifier +</pre> + +<p>Вам необходимо переименовать следующие переменные.</p> + +<pre class="brush: js example-good">var colorEnum = { RED: 0, GREEN: 1, BLUE: 2 }; +var list = ["potatoes", "rice", "fries"];</pre> + +<h3 id="Обновление_старых_браузеров">Обновление старых браузеров</h3> + +<p>Например, если вы используете старый браузер, в котором еще не реализована функция <code><a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Statements/let">let</a></code> или <code><a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Statements/class">class</a></code>, вам следует перейти на более новую версию браузера, которая поддерживает данные языковые функции.</p> + +<pre class="brush: js">"use strict"; +class DocArchiver {} + +// SyntaxError: class is a reserved identifier +// (появится только в старых браузерах, например, Firefox 44 и старше) +</pre> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li><a href="http://wiki.c2.com/?GoodVariableNames">Правильные имена переменных</a></li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/resulting_string_too_large/index.html b/files/ru/web/javascript/reference/errors/resulting_string_too_large/index.html new file mode 100644 index 0000000000..c3127a2dbf --- /dev/null +++ b/files/ru/web/javascript/reference/errors/resulting_string_too_large/index.html @@ -0,0 +1,45 @@ +--- +title: 'RangeError: repeat count must be less than infinity' +slug: Web/JavaScript/Reference/Errors/Resulting_string_too_large +translation_of: Web/JavaScript/Reference/Errors/Resulting_string_too_large +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщение">Сообщение</h2> + +<pre class="syntaxbox">RangeError: repeat count must be less than infinity and not overflow maximum string size (Firefox) + +RangeError: Invalid count value (Chrome) +</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>{{jsxref("RangeError")}}</p> + +<h2 id="Что_пошло_не_так">Что пошло не так?</h2> + +<p>Был использован метод {{jsxref("String.prototype.repeat()")}}, с параметром <code>count</code>, указывающим количество повторений строки. Параметр может принимать значения между 0 и положительной {{jsxref("Infinity")}}, и не может быть отрицательным числом. Диапазон допустимых значений может быть описан следующим образом: [0, + ∞).</p> + +<p>Полученная строка также не может превышать максимальный размер строки, который может отличаться в различных движках JavaScript. В Firefox (SpiderMonkey) максимальный размер строки составляет 2<sup>28</sup> -1 (<code>0xFFFFFFF</code>).</p> + +<h2 id="Примеры">Примеры</h2> + +<h3 id="Неверно">Неверно</h3> + +<pre class="brush: js example-bad">'abc'.repeat(Infinity); // RangeError +'a'.repeat(2**28); // RangeError +</pre> + +<h3 id="Верно">Верно</h3> + +<pre class="brush: js example-good">'abc'.repeat(0); // '' +'abc'.repeat(1); // 'abc' +'abc'.repeat(2); // 'abcabc' +'abc'.repeat(3.5); // 'abcabcabc' (count will be converted to integer) +</pre> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li>{{jsxref("String.prototype.repeat()")}}</li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/stmt_after_return/index.html b/files/ru/web/javascript/reference/errors/stmt_after_return/index.html new file mode 100644 index 0000000000..fa7d1fe660 --- /dev/null +++ b/files/ru/web/javascript/reference/errors/stmt_after_return/index.html @@ -0,0 +1,84 @@ +--- +title: 'Warning: unreachable code after return statement' +slug: Web/JavaScript/Reference/Errors/Stmt_after_return +tags: + - JavaScript + - Return + - Warning + - Предупреждения +translation_of: Web/JavaScript/Reference/Errors/Stmt_after_return +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщение">Сообщение</h2> + +<pre class="syntaxbox">Warning: unreachable code after return statement (Firefox) +</pre> + +<pre class="syntaxbox">Предупреждение: недоступный код после оператора <code>return </code>(Firefox) +</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>Предупреждение</p> + +<h2 id="Что_пошло_не_так">Что пошло не так?</h2> + +<p>Недоступный код после оператора <code>return</code> может возникнуть в следующих ситуациях:</p> + +<ul> + <li>когда в коде программы есть какие-либо выражения после оператора {{jsxref("Statements/return", "return")}}</li> + <li>когда используется оператор <code>return</code> без точки с запятой, но далее непосредственно за ним следует выражение.</li> +</ul> + +<p>Когда присутствует выражение после оператора <code>return</code>, то выдаётся предупреждение о том, что код программы после <code>return</code> недоступен, то есть он никогда не запустится и не выполнится.</p> + +<p>Почему нужно ставить точку с запятой после оператора <code>return</code>? В случае оператора <code>return</code> без точки с запятой, совсем неясно, хотел ли разработчик вернуть результат, вычисляемый в следующей строке, или же он хочет остановиться сейчас и выйти из подпрограммы. Предупреждение указывает на неопределённость результата работы оператора <code>return</code>.</p> + +<p>Предупреждение не появится для оператора <code>return</code> без точки с запятой, если за данной строкой следуют:</p> + +<ul> + <li>{{jsxref("Statements/throw", "throw")}}</li> + <li>{{jsxref("Statements/break", "break")}}</li> + <li>{{jsxref("Statements/var", "var")}}</li> + <li>{{jsxref("Statements/function", "function")}}</li> +</ul> + +<h2 id="Примеры">Примеры</h2> + +<h3 id="Неверные_варианты">Неверные варианты</h3> + +<pre class="brush: js example-bad">function f() { + var x = 3; + x += 4; + return x; //return завершает функцию немедленно, + x -= 3; //поэтому эта строка никогда не запустится; она недоступна +} + +function f() { + return //эта строка трактуется как завершение функции оператором `return;`, + 3 + 4; //поэтому происходит выход из функции, и эта строка не выполнится +} +</pre> + +<h3 id="Верные_варианты">Верные варианты</h3> + +<pre class="brush: js example-good">function f() { + var x = 3; + x += 4; + x -= 3; + return x; //OK: return находится после всех остальных выражений +} + +function f() { + return 3 + 4 //OK: return без точки с запятой и вычисляемое выражение находятся на одной строке +} +</pre> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li>{{jsxref("Statements/return", "Automatic Semicolon Insertion", "#Automatic_Semicolon_Insertion", 1)}}</li> +</ul> + +<div id="dc_vk_code" style="display: none;"> </div> diff --git a/files/ru/web/javascript/reference/errors/strict_non_simple_params/index.html b/files/ru/web/javascript/reference/errors/strict_non_simple_params/index.html new file mode 100644 index 0000000000..48917edbc1 --- /dev/null +++ b/files/ru/web/javascript/reference/errors/strict_non_simple_params/index.html @@ -0,0 +1,126 @@ +--- +title: 'SyntaxError: "use strict" not allowed in function with non-simple parameters' +slug: Web/JavaScript/Reference/Errors/Strict_Non_Simple_Params +translation_of: Web/JavaScript/Reference/Errors/Strict_Non_Simple_Params +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщение">Сообщение</h2> + +<p> </p> + +<pre>Edge: +Cannot apply strict mode on functions with non-simple parameter list + +Firefox: +SyntaxError: "use strict" not allowed in function with default parameter +SyntaxError: "use strict" not allowed in function with rest parameter +SyntaxError: "use strict" not allowed in function with destructuring parameter + +Chrome: +SyntaxError: Illegal 'use strict' directive in function with non-simple parameter list</pre> + +<p>Перевод:</p> + +<pre class="syntaxbox">Edge: +Не удается применить строгий режим к функциям со списком, содержащим сложные параметры + +Firefox: +Ошибка синтаксиса: "use strict" не допускается в функции с параметром по умолчанию +Ошибка синтаксиса: "use strict" не допускается в функции с rest параметром +Ошибка синтаксиса: "use strict" не допускается в функции с параметром, использующим деструктуризацию + +Chrome: +Ошибка синтаксиса: недопустимая директива 'use strict' в функции со списком, содержащим сложные параметры +</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>{{jsxref("SyntaxError")}}.</p> + +<h2 id="Что_пошло_не_так">Что пошло не так?</h2> + +<p>Директива <code>"use strict"</code> была использована в верхней части функции, которая имеет один из следующих параметров:<br> + </p> + +<ul> + <li>{{jsxref("функции/Default_parameters", "параметры по умолчанию", "", 1)}}</li> + <li>{{jsxref("функции/rest_parameters", "остальные параметры", "", 1)}}</li> + <li>{{jsxref("операторы/Destructuring_assignment", "деконструкция параметров", "", 1)}}</li> +</ul> + +<p>Директива "use strict" не допускается в верхней части таких функций согласно спецификации ECMAScript.</p> + +<h2 id="Примеры">Примеры</h2> + +<h3 id="Функция_заявления">Функция заявления</h3> + +<p>В этом случае функция sum имеет параметры по умолчанию a=1 и b=2:</p> + +<pre class="brush: js example-bad">function sum(a = 1, b = 2) { + //SyntaxError: использовать "use strict" не разрешено в функции с параметром по умолчанию + 'use strict'; + return a + b; +} +</pre> + +<p>Если функция должна находиться в строгом режиме, и весь скрипт или заключающая функция также в порядке, чтобы быть в строгом режиме, вы можете переместить директиву "use strict" за пределы функции:</p> + +<pre class="brush: js example-good">'use strict'; +function sum(a = 1, b = 2) { + return a + b; +} +</pre> + +<h3 id="Функция_выражения">Функция выражения</h3> + +<p>Выражение функции может использовать еще один обходной путь:</p> + +<pre class="brush: js example-bad">var sum = function sum([a, b]) { + // SyntaxError: "use strict" не допускается в функции с параметром деструктурирования + 'use strict'; + return a + b; +}; +</pre> + +<p>Это может быть преобразовано в следующее выражение:</p> + +<pre class="brush: js example-good">var sum = (function() { + 'use strict'; + return function sum([a, b]) { + return a + b; + }; +})(); +</pre> + +<h3 id="Указательная_функция">Указательная функция</h3> + +<p>Если функция со стрелкой должна получить доступ к переменной this, можно использовать функцию со стрелкой в качестве функции включения:</p> + +<pre class="brush: js example-bad">var callback = (...args) => { + // SyntaxError: "use strict" не допускается в функции с параметром rest + 'use strict'; + return this.run(args); +}; +</pre> + +<p>Это может быть преобразовано в следующее выражение:</p> + +<pre class="brush: js example-good">var callback = (() => { + 'use strict'; + return (...args) => { + return this.run(args); + }; +})(); +</pre> + +<h2 id="Смотри_также">Смотри также</h2> + +<ul> + <li>{{jsxref("Strict_mode", "строгий режим", "", 1)}}</li> + <li>{{jsxref("Ведомости/функция", "оператор function", "", 1)}}</li> + <li>{{jsxref("операторы/функции", "свободное выражение функции", "", 1)}}</li> + <li>{{jsxref("функции/Default_parameters", "параметры по умолчанию", "", 1)}}</li> + <li>{{jsxref("функции/rest_parameters", "остальные параметры", "", 1)}}</li> + <li>{{jsxref("операторы/Destructuring_assignment", "деконструкция параметры", "", 1)}}</li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/too_much_recursion/index.html b/files/ru/web/javascript/reference/errors/too_much_recursion/index.html new file mode 100644 index 0000000000..45f59393a4 --- /dev/null +++ b/files/ru/web/javascript/reference/errors/too_much_recursion/index.html @@ -0,0 +1,54 @@ +--- +title: 'InternalError: too much recursion' +slug: Web/JavaScript/Reference/Errors/Too_much_recursion +tags: + - Errors + - InternalError + - JavaScript +translation_of: Web/JavaScript/Reference/Errors/Too_much_recursion +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщение">Сообщение</h2> + +<pre class="syntaxbox">InternalError: too much recursion +</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>{{jsxref("InternalError")}}.</p> + +<h2 id="Что_пошло_не_так">Что пошло не так?</h2> + +<p>Функция, вызывающая сама себя, называется <em>рекурсивной функцией</em>. В некотором смысле рекурсия аналогична циклу. Оба выполняют один и тот же код несколько раз, и оба требуют условия (чтобы избежать бесконечного цикла или, вернее, бесконечной рекурсии в этом случае). Когда функция вызывается рекурсивно слишком много раз или бесконечно, JavaScript выдаёт эту ошибку<span class="seoSummary">.</span></p> + +<h2 id="Примеры">Примеры</h2> + +<p>Функция выполняется рекурсивно 10 раз, в соответствии с условием выхода:</p> + +<pre class="brush: js">function loop(x) { + if (x >= 10) // "x >= 10" это условие выхода + return; + // do stuff + loop(x + 1); // рекурсивный вызов +} +loop(0);</pre> + +<p>В условии установлено слишком большое значение, не будет работать:</p> + +<pre class="brush: js example-bad">function loop(x) { + if (x >= 1000000000000) + return; + // do stuff + loop(x + 1); +} +loop(0); + +// InternalError: too much recursion</pre> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li>{{Glossary("Recursion")}}</li> + <li><a href="/ru/docs/Web/JavaScript/Guide/Functions#Рекурсия">Рекурсия</a></li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/typed_array_invalid_arguments/index.html b/files/ru/web/javascript/reference/errors/typed_array_invalid_arguments/index.html new file mode 100644 index 0000000000..076743b50c --- /dev/null +++ b/files/ru/web/javascript/reference/errors/typed_array_invalid_arguments/index.html @@ -0,0 +1,78 @@ +--- +title: 'TypeError: invalid arguments' +slug: Web/JavaScript/Reference/Errors/Typed_array_invalid_arguments +tags: + - Error + - Errors + - JavaScript + - TypeError + - Ошибки +translation_of: Web/JavaScript/Reference/Errors/Typed_array_invalid_arguments +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщение">Сообщение</h2> + +<pre class="syntaxbox">TypeError: invalid arguments (Firefox)</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>{{jsxref("TypeError")}}</p> + +<h2 id="Что_не_так">Что не так?</h2> + +<p>Конструкторы <a href="/ru/docs/Web/JavaScript/Typed_arrays">типизированных массивов</a> требуют либо</p> + +<ul> + <li>длину,</li> + <li>другой типизированный массив,</li> + <li>массивоподобные объекты,</li> + <li>итерируемые объекты либо</li> + <li>объект {{jsxref("ArrayBuffer")}}</li> +</ul> + +<p>чтобы создать новый типизированный массив. Другие аргументы конструктора не создают допустимый типизированный массив.</p> + +<h2 id="Примеры">Примеры</h2> + +<p>Типизированные массивы, например {{jsxref("Uint8Array")}}, не могут быть построены из строки. На самом деле строки вообще не могут быть в типизированных массивах.</p> + +<pre class="brush: js example-bad">var ta = new Uint8Array("nope"); +// TypeError: invalid arguments +</pre> + +<p>Различные способы создания допустимого {{jsxref("Uint8Array")}}:</p> + +<pre class="brush: js example-good"> // From a length +var uint8 = new Uint8Array(2); +uint8[0] = 42; +console.log(uint8[0]); // 42 +console.log(uint8.length); // 2 +console.log(uint8.BYTES_PER_ELEMENT); // 1 + +// From an array +var arr = new Uint8Array([21,31]); +console.log(arr[1]); // 31 + +// From another TypedArray +var x = new Uint8Array([21, 31]); +var y = new Uint8Array(x); +console.log(y[0]); // 21 + +// From an ArrayBuffer +var buffer = new ArrayBuffer(8); +var z = new Uint8Array(buffer, 1, 4); + +// From an iterable +var iterable = function*(){ yield* [1,2,3]; }(); +var uint8 = new Uint8Array(iterable); +// Uint8Array[1, 2, 3] +</pre> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li><a href="/ru/docs/Web/JavaScript/Typed_arrays">Типизированные массивы</a></li> + <li>{{jsxref("ArrayBuffer")}}</li> + <li>{{jsxref("Uint8Array")}}</li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/undeclared_var/index.html b/files/ru/web/javascript/reference/errors/undeclared_var/index.html new file mode 100644 index 0000000000..2c6705c496 --- /dev/null +++ b/files/ru/web/javascript/reference/errors/undeclared_var/index.html @@ -0,0 +1,66 @@ +--- +title: 'ReferenceError: assignment to undeclared variable "x"' +slug: Web/JavaScript/Reference/Errors/Undeclared_var +translation_of: Web/JavaScript/Reference/Errors/Undeclared_var +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщение">Сообщение</h2> + +<pre class="syntaxbox">ReferenceError: assignment to undeclared variable "x" (Firefox) +ReferenceError: "x" is not defined (Chrome) +ReferenceError: Variable undefined in strict mode (Edge) +</pre> + +<h2 id="Тип_ошбки">Тип ошбки</h2> + +<p>{{jsxref("ReferenceError")}} предупреждение только в <a href="/ru/docs/Web/JavaScript/Reference/Strict_mode">строгом режиме</a>.</p> + +<h2 id="Что_пошло_не_так">Что пошло не так?</h2> + +<div id="gt-res-content"> +<div class="trans-verified-button-small" dir="ltr" id="gt-res-dir-ctr"><span id="result_box" lang="ru"><span>Значению присвоена необъявленная переменная.</span> <span>Другими словами, было задание без ключевого слова var.</span> <span>Существуют некоторые различия между объявленными и необъявленными переменными, что может привести к неожиданным результатам, поэтому JavaScript представляет ошибку в строгом режиме.</span></span></div> + +<div class="trans-verified-button-small" dir="ltr"> </div> +</div> + +<p><span id="result_box" lang="ru"><span>Три примечания о объявленных и необъявленных переменных:</span></span></p> + +<ul> + <li><span id="result_box" lang="ru"><span>Объявленные переменные ограничены в контексте выполнения, в котором они объявлены.</span> <span>Необъявленные переменные всегда глобальны.</span></span></li> + <li><span id="result_box" lang="ru"><span>Объявленные переменные создаются до выполнения любого кода.</span> <span>Необъявленные переменные не существуют до тех пор, пока не будет выполняться присвоение им кода.</span></span></li> + <li><span id="result_box" lang="ru"><span>Объявленные переменные - это неконфигурируемое свойство контекста их выполнения (функция или глобальная).</span> <span>Необъявленные переменные настраиваются (например, могут быть удалены).</span></span></li> +</ul> + +<p><span id="result_box" lang="ru"><span>Более подробную информацию и примеры см. На странице справки <code><a class="color:#3F93BC;" href="/ru/docs/Web/JavaScript/Reference/Statements/var">Переменных</a> </code></span></span></p> + +<p>Errors about undeclared variable assignments occur in <a href="/en-US/docs/Web/JavaScript/Reference/Strict_mode">strict mode code</a> only. In non-strict code, they are silently ignored.</p> + +<h2 id="Примеры">Примеры</h2> + +<h3 id="Неправильно">Неправильно</h3> + +<p>В этом случае переменная "bar" является необъявленной переменной.</p> + +<pre class="brush: js example-bad">function foo() { + 'use strict'; + bar = true; +} +foo(); // ReferenceError: assignment to undeclared variable bar +</pre> + +<h3 id="Правильно">Правильно</h3> + +<p>Чтобы сделать "bar" объявленной переменной, вы можете добавить перед ней ключевое слово <code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/var">var</a></code> .</p> + +<pre class="brush: js example-good">function foo() { + 'use strict'; + var bar = true; +} +foo();</pre> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li><a href="/en-US/docs/Web/JavaScript/Reference/Strict_mode">режим Strict</a></li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/undefined_prop/index.html b/files/ru/web/javascript/reference/errors/undefined_prop/index.html new file mode 100644 index 0000000000..fe6487cfa6 --- /dev/null +++ b/files/ru/web/javascript/reference/errors/undefined_prop/index.html @@ -0,0 +1,57 @@ +--- +title: 'ReferenceError: reference to undefined property "x"' +slug: Web/JavaScript/Reference/Errors/Undefined_prop +tags: + - JavaScript + - ReferenceError + - Ошибки + - Строгий режим +translation_of: Web/JavaScript/Reference/Errors/Undefined_prop +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщение">Сообщение</h2> + +<pre class="syntaxbox">ReferenceError: reference to undefined property "x" (Firefox) +</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>(только в Firefox) Предупреждение {{jsxref("ReferenceError")}}, возникает, только если значение настройки <code>javascript.options.strict</code> равно <code>true</code>.</p> + +<h2 id="Что_пошло_не_так">Что пошло не так?</h2> + +<p>Совершена попытка обращения к свойству объекта, которое не определено. Существует два способа обращения к свойствам: обратитесь к странице справочника {{jsxref("Operators/Property_Accessors", "property accessors", 0, 1)}} для более подробной информации.</p> + +<h2 id="Примеры">Примеры</h2> + +<h3 id="Случаи_возникновения_ошибки">Случаи возникновения ошибки</h3> + +<p>В данном примере свойство <code>bar</code> не определено, поэтому возникнет ошибка <code>ReferenceError</code>.</p> + +<pre class="brush: js example-bad">var foo = {}; +foo.bar; // ReferenceError: reference to undefined property "bar" +</pre> + +<h3 id="Правильный_код">Правильный код</h3> + +<p>Чтобы избежать ошибки, потребуется либо задать для объекта свойство <code>bar</code>, либо проверить существование данного свойства, прежде чем обращаться к нему. Одним из способов это сделать является использование метода {{jsxref("Object.prototype.hasOwnProperty()")}}:</p> + +<pre class="brush: js example-good">var foo = {}; + +// Задать свойство bar + +foo.bar = 'moon'; +console.log(foo.bar); // "moon" + +// Убедиться, что свойство bar существует, прежде чем обращаться к нему + +if (foo.hasOwnProperty('bar')) { + console.log(foo.bar); +}</pre> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li>{{jsxref("Operators/Property_Accessors", "property accessors", 0, 1)}}</li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/unexpected_token/index.html b/files/ru/web/javascript/reference/errors/unexpected_token/index.html new file mode 100644 index 0000000000..52b6bca2de --- /dev/null +++ b/files/ru/web/javascript/reference/errors/unexpected_token/index.html @@ -0,0 +1,74 @@ +--- +title: 'SyntaxError: Unexpected token' +slug: Web/JavaScript/Reference/Errors/Unexpected_token +tags: + - JavaScript + - SyntaxError + - Ошибки +translation_of: Web/JavaScript/Reference/Errors/Unexpected_token +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщение">Сообщение</h2> + +<pre class="syntaxbox">SyntaxError: expected expression, got "x" +SyntaxError: expected property name, got "x" +SyntaxError: expected target, got "x" +SyntaxError: expected rest argument name, got "x" +SyntaxError: expected closing parenthesis, got "x" +SyntaxError: expected '=>' after argument list, got "x" +</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>{{jsxref("SyntaxError")}}</p> + +<h2 id="Что_пошло_не_так">Что пошло не так?</h2> + +<p>Вместо определенной конструкции языка было использовано что-то другое. Возможно, просто опечатка.</p> + +<h2 id="Примеры">Примеры</h2> + +<h3 id="Ожидаемое_выражение">Ожидаемое выражение</h3> + +<p>Недопустимыми являются, к примеру, запятые после элементов цепочки выражений.</p> + +<pre class="brush: js example-bad">for (let i = 0; i < 5,; ++i) { + console.log(i); +} +// SyntaxError: expected expression, got ';' +</pre> + +<p>Правильным вариантом будет убрать запятую или добавить еще одно выражение:</p> + +<pre class="brush: js example-good">for (let i = 0; i < 5; ++i) { + console.log(i); +} +</pre> + +<h3 id="Недостаточно_скобок">Недостаточно скобок</h3> + +<p>Иногда можно потерять скобки при использовании <code>if</code>:</p> + +<pre class="brush: js example-bad line-numbers language-js">function round(n, upperBound, lowerBound){ + if(n > upperBound) || (n < lowerBound){ + throw 'Число ' + String(n) + ' больше, чем ' + String(upperBound) + ', или меньше, чем ' + String(lowerBound); + }else if(n < ((upperBound + lowerBound)/2)){ + return lowerBound; + }else{ + return upperBound; + } +} // SyntaxError: expected expression, got '||'</pre> + +<p>На первый взгляд кажется, что скобки расставлены правильно, но обратите внимание, что <code>||</code> находится не в скобках. Необходимо заключить <code>||</code> в скобки:</p> + +<pre class="brush: js example-good">function round(n, upperBound, lowerBound){ + if((n > upperBound) || (n < lowerBound)){ + throw 'Число ' + String(n) + ' больше, чем ' + String(upperBound) + ', или меньше, чем ' + String(lowerBound); + }else if(n < ((upperBound + lowerBound)/2)){ + return lowerBound; + }else{ + return upperBound; + } +} +</pre> diff --git a/files/ru/web/javascript/reference/errors/unexpected_type/index.html b/files/ru/web/javascript/reference/errors/unexpected_type/index.html new file mode 100644 index 0000000000..c8ccbe028f --- /dev/null +++ b/files/ru/web/javascript/reference/errors/unexpected_type/index.html @@ -0,0 +1,63 @@ +--- +title: 'TypeError: "x" is (not) "y"' +slug: Web/JavaScript/Reference/Errors/Unexpected_type +translation_of: Web/JavaScript/Reference/Errors/Unexpected_type +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщение">Сообщение</h2> + +<pre class="syntaxbox">TypeError: "x" is (not) "y" + +Examples: +TypeError: "x" is undefined +TypeError: "x" is null +TypeError: "undefined" is not an object +TypeError: "x" is not an object or null +TypeError: "x" is not a symbol +</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>{{jsxref("TypeError")}}.</p> + +<h2 id="Что_случилось">Что случилось?</h2> + +<p>Встречен неожиданный тип. Это часто случается со значениями {{jsxref("null")}} или {{jsxref("undefined")}}.</p> + +<p>Так же, некоторые методы, такие как {{jsxref("Object.create()")}} или {{jsxref("Symbol.keyFor()")}}, требуют определенный тип, который должен быть предоставлен.</p> + +<h2 id="Примеры">Примеры</h2> + +<h3 id="Недопустимые_случаи">Недопустимые случаи</h3> + +<pre class="brush: js example-bad">// Случаи undefined и null, при которых метод substring не будет работать +var foo = undefined; +foo.substring(1); // TypeError: foo is undefined + +var foo = null; +foo.substring(1); // TypeError: foo is null + + +// Некоторые методы могут требовать определенный тип +var foo = {} +Symbol.keyFor(foo); // TypeError: foo is not a symbol + +var foo = 'bar' +Object.create(foo); // TypeError: "foo" is not an object or null +</pre> + +<h3 id="Решение_проблемы">Решение проблемы</h3> + +<p>Что бы исправить ошибку пустого указателя вы можете использовать оператор <a href="/en-US/docs/Web/JavaScript/Reference/Operators/typeof">typeof.</a></p> + +<pre class="brush: js">if (typeof foo !== 'undefined') { + // Теперь мы знаем, что foo определено. +}</pre> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li>{{jsxref("undefined")}}</li> + <li>{{jsxref("null")}}</li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/unnamed_function_statement/index.html b/files/ru/web/javascript/reference/errors/unnamed_function_statement/index.html new file mode 100644 index 0000000000..791a215d11 --- /dev/null +++ b/files/ru/web/javascript/reference/errors/unnamed_function_statement/index.html @@ -0,0 +1,111 @@ +--- +title: 'SyntaxError: function statement requires a name(функция оператор требует имя)' +slug: Web/JavaScript/Reference/Errors/Unnamed_function_statement +translation_of: Web/JavaScript/Reference/Errors/Unnamed_function_statement +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщение">Сообщение</h2> + +<pre class="syntaxbox">SyntaxError: ожидаемый идентификатор (Edge) +SyntaxError: оператор функции требует имя [Firefox] +SyntaxError: непредвиденный токен ( [Chrome] +</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>{{jsxref("SyntaxError")}}</p> + +<h2 id="Что_пошло_не_так">Что пошло не так?</h2> + +<p>В коде есть оператор function, для которого требуется имя. Вам нужно будет проверить, как определены функции и нужно ли предоставить для них имя, или если рассматриваемая функция должна быть выражением функции, {{Glossary("IIFE")}}, или если код функции вообще правильно размещен в этом контексте.</p> + +<h2 id="Примеры">Примеры</h2> + +<h3 id="Операторы_vs_выражения">Операторы vs выражения</h3> + +<p>Оператор функции (или объявление функции) требует имя, это не будет работать:</p> + +<pre class="brush: js example-bad">function () { + return 'Hello world'; +} +// SyntaxError: function statement requires a name +</pre> + +<p>Вы можете использовать выражение функции (назначять) вместо:</p> + +<pre class="brush: js example-good">var greet = function() { + return 'Hello world'; +};</pre> + +<p>Или, ваша функция возможно, предназначена для IIFE (немедленно вызываемое выражение функции), которое является функцией, которая запускается, как только она определена. В этом случае вам понадобится еще несколько брекетов:</p> + +<pre class="brush: js example-good">(function () { + +})();</pre> + +<h3 id="Помеченные_функции">Помеченные функции</h3> + +<p>При использовании меток функций после ключевого слова function все равно потребуется указать имя функции. Это не работает:</p> + +<pre class="brush: js example-bad">function Greeter() { + german: function () { + return "Moin"; + } +} +// SyntaxError: оператор функции требует имя +</pre> + +<p>Это будет работать, например так:</p> + +<pre class="brush: js example-good">function Greeter() { + german: function g() { + return "Moin"; + } +}</pre> + +<h3 id="Методы_обьекта">Методы обьекта</h3> + +<p>Если вы намеревались создать метод объекта, вам нужно будет создать объект. Тогда допустим следующий синтаксис без имени после ключевого слова function.</p> + +<pre class="brush: js example-good">var greeter = { + german: function () { + return "Moin"; + } +};</pre> + +<h3 id="Синтаксис_вызова">Синтаксис вызова</h3> + +<p>Кроме того, проверьте синтаксис при использовании обратных вызовов. Скобки и запятые может получить трудно легко.</p> + +<pre class="brush: js example-bad">promise.then( + function() { + console.log("success"); + }); + function() { + console.log("error"); +} +// SyntaxError: function statement requires a name +</pre> + +<p>как бы было правильно:</p> + +<pre class="brush: json example-good">promise.then( + function() { + console.log("success"); + }, + function() { + console.log("error"); + } +); +</pre> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li><a href="/en-US/docs/Web/JavaScript/Guide/Functions">Functions in the JavaScript Guide</a> (функции в javascript"e гайд)</li> + <li><a href="/en-US/docs/Web/JavaScript/Reference/Statements/function">Оператор функции</a></li> + <li><a href="/en-US/docs/Web/JavaScript/Reference/Operators/function">Выражение функции</a></li> + <li><a href="https://en.wikipedia.org/wiki/Immediately-invoked_function_expression">IIFE</a></li> + <li><a href="/en-US/docs/Web/JavaScript/Reference/Statements/label">label</a> </li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/unterminated_string_literal/index.html b/files/ru/web/javascript/reference/errors/unterminated_string_literal/index.html new file mode 100644 index 0000000000..4cd1fbdc1e --- /dev/null +++ b/files/ru/web/javascript/reference/errors/unterminated_string_literal/index.html @@ -0,0 +1,64 @@ +--- +title: 'SyntaxError: unterminated string literal(незавершенный строковый литерал)' +slug: Web/JavaScript/Reference/Errors/Unterminated_string_literal +translation_of: Web/JavaScript/Reference/Errors/Unterminated_string_literal +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщение">Сообщение</h2> + +<pre class="syntaxbox">SyntaxError: незадействованная строковая константа (Edge) +SyntaxError: незадействованный строковый литерал (Firefox) +</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>{{jsxref("SyntaxError")}}</p> + +<h2 id="Что_пошло_не_так">Что пошло не так?</h2> + +<p>Где-то есть unterminated {{jsxref("String")}}. Строковые литералы должны быть заключены в одинарные <code>(')</code> или двойные <code>(")</code> кавычки. JavaScript не делает различий между строками в одинарных и двойных кавычках. Escape-последовательности работают в строках, созданных с одинарными или двойными кавычками. Чтобы исправить эту ошибку, проверьте:</p> + +<ul> + <li>у вас есть открывающие и закрывающие кавычки (одинарные или двойные) для строкового литерала,</li> + <li>вы правильно экранировали строковый литерал,</li> + <li>строковый литерал не разбивается на несколько строк.</li> +</ul> + +<h2 id="Примеры">Примеры</h2> + +<h3 id="Несколько_строк">Несколько строк</h3> + +<p>Вы не можете разделить строку на несколько строк, как в JavaScript:</p> + +<pre class="brush: js example-bad">var longString = 'Это очень длинная строка, которая нуждается + перенос через несколько строк, потому что + в противном случае мой код нечитаем."; +// SyntaxError: незавершонный строковый литерал</pre> + +<p>Вместо этого используйте оператор+, обратную косую черту или литералы шаблона. Вариант оператора + выглядит следующим образом:</p> + +<pre class="brush: js example-good">var longString = ' Это очень длинная строка, которая нуждается в ' + + 'чтобы обернуть через несколько строк, потому что' + + -иначе мой код будет нечитабелен."; +</pre> + +<p>Или можно использовать символ обратной косой черты ("\") в конце каждой строки, чтобы указать, что строка будет продолжаться в следующей строке. Убедитесь, что после обратной косой черты нет пробелов или других символов (кроме разрыва строки) или отступа; в противном случае это не сработает. Эта форма выглядит следующим образом:</p> + +<pre class="brush: js example-good">var longString = 'Это очень длинная строка, которая нуждается \ + переносе через несколько строк, потому что \ + в противном случае мой код нечитаем."; +</pre> + +<p>Еще одна возможность-использовать шаблонные литералы, поддерживаемые в средах ECMAScript 2015:</p> + +<pre class="brush: js example-good">var longString = `Это очень длинная строка, которая нуждается + в переносе через несколько строк, потому что + в противном случае мой код нечитаем.`;</pre> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li>{{jsxref("String")}}</li> + <li><a href="/en-US/docs/Web/JavaScript/Reference/Template_literals">Template literals</a>(шаблонные литералы)</li> +</ul> diff --git a/files/ru/web/javascript/reference/errors/переменные_скрывают_аргумент/index.html b/files/ru/web/javascript/reference/errors/переменные_скрывают_аргумент/index.html new file mode 100644 index 0000000000..85ad505cbd --- /dev/null +++ b/files/ru/web/javascript/reference/errors/переменные_скрывают_аргумент/index.html @@ -0,0 +1,60 @@ +--- +title: 'TypeError: переменная "x" переопределяет аргумент' +slug: Web/JavaScript/Reference/Errors/Переменные_скрывают_аргумент +tags: + - Errors + - JavaScript + - Strict Mode + - TypeError +translation_of: Web/JavaScript/Reference/Errors/Var_hides_argument +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Сообщение">Сообщение</h2> + +<pre class="syntaxbox">TypeError: переменная "x" повторно объявляет аргумент (Firefox) +</pre> + +<h2 id="Тип_ошибки">Тип ошибки</h2> + +<p>{{jsxref("TypeError")}} предупреждение только в строгом режиме.</p> + +<h2 id="Что_пошло_не_так">Что пошло не так?</h2> + +<p> </p> + +<p>То же имя переменной происходит в качестве параметра функции, и затем повторно объявляется с помощью назначения var в теле функции. Это может быть конфликт имен, поэтому JavaScript предупреждает об этом.</p> + +<p>Эта ошибка возникает как предупреждение только в коде строгого режима. В нестрогом коде повторное объявление игнорируется.</p> + +<p> </p> + +<h2 id="Примеры">Примеры</h2> + +<h3 id="Неправильные_примеры">Неправильные примеры</h3> + +<p>В этом случае переменная "arg" объявляет аргумент повторно.</p> + +<pre class="brush: js example-bad">'use strict'; + +function f(arg) { + var arg = 'foo'; +} +</pre> + +<h3 id="Правильные_примеры">Правильные примеры</h3> + +<p>Чтобы исправить это предупреждение, оператор var можно просто опустить, так как переменная уже существует. В других случаях можно переименовать параметр функции или имя переменной. </p> + +<pre class="brush: js example-good">'use strict'; + +function f(arg) { + arg = 'foo'; +} +</pre> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li><a href="/en-US/docs/Web/JavaScript/Reference/Strict_mode">Strict mode</a></li> +</ul> |