From 074785cea106179cb3305637055ab0a009ca74f2 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:42:52 -0500 Subject: initial commit --- .../reference/errors/already_has_pragma/index.html | 44 ++++++ .../errors/array_sort_argument/index.html | 45 ++++++ .../reference/errors/bad_octal/index.html | 53 +++++++ .../reference/errors/bad_radix/index.html | 61 ++++++++ .../reference/errors/bad_regexp_flag/index.html | 102 +++++++++++++ .../errors/bad_return_or_yield/index.html | 56 +++++++ .../errors/called_on_incompatible_type/index.html | 67 +++++++++ .../index.html | 60 ++++++++ .../errors/cant_access_property/index.html | 58 ++++++++ .../errors/cant_assign_to_property/index.html | 52 +++++++ .../index.html | 65 ++++++++ .../reference/errors/cant_delete/index.html | 60 ++++++++ .../errors/cant_redefine_property/index.html | 49 +++++++ .../errors/cyclic_object_value/index.html | 70 +++++++++ .../reference/errors/dead_object/index.html | 48 ++++++ .../errors/delete_in_strict_mode/index.html | 68 +++++++++ .../index.html | 76 ++++++++++ .../deprecated_expression_closures/index.html | 76 ++++++++++ .../reference/errors/deprecated_octal/index.html | 70 +++++++++ .../errors/deprecated_source_map_pragma/index.html | 113 ++++++++++++++ .../errors/deprecated_string_generics/index.html | 103 +++++++++++++ .../errors/deprecated_tolocaleformat/index.html | 90 ++++++++++++ .../reference/errors/equal_as_assign/index.html | 51 +++++++ .../for-each-in_loops_are_deprecated/index.html | 163 +++++++++++++++++++++ .../reference/errors/getter_only/index.html | 81 ++++++++++ .../errors/identifier_after_number/index.html | 58 ++++++++ .../reference/errors/illegal_character/index.html | 70 +++++++++ .../errors/in_operator_no_object/index.html | 71 +++++++++ .../ru/web/javascript/reference/errors/index.html | 25 ++++ .../errors/invalid_array_length/index.html | 76 ++++++++++ .../invalid_assignment_left-hand_side/index.html | 54 +++++++ .../errors/invalid_const_assignment/index.html | 87 +++++++++++ .../reference/errors/invalid_date/index.html | 54 +++++++ .../errors/invalid_for-in_initializer/index.html | 73 +++++++++ .../errors/invalid_for-of_initializer/index.html | 63 ++++++++ .../index.html | 61 ++++++++ .../reference/errors/is_not_iterable/index.html | 100 +++++++++++++ .../reference/errors/json_bad_parse/index.html | 111 ++++++++++++++ .../errors/malformed_formal_parameter/index.html | 61 ++++++++ .../reference/errors/malformed_uri/index.html | 61 ++++++++ .../errors/missing_bracket_after_list/index.html | 56 +++++++ .../missing_colon_after_property_id/index.html | 72 +++++++++ .../missing_curly_after_function_body/index.html | 66 +++++++++ .../missing_curly_after_property_list/index.html | 51 +++++++ .../errors/missing_formal_parameter/index.html | 75 ++++++++++ .../errors/missing_initializer_in_const/index.html | 54 +++++++ .../missing_name_after_dot_operator/index.html | 63 ++++++++ .../index.html | 38 +++++ .../missing_parenthesis_after_condition/index.html | 70 +++++++++ .../missing_semicolon_before_statement/index.html | 82 +++++++++++ .../errors/more_arguments_needed/index.html | 48 ++++++ .../errors/negative_repetition_count/index.html | 40 +++++ .../reference/errors/no_non-null_object/index.html | 65 ++++++++ .../reference/errors/no_properties/index.html | 41 ++++++ .../reference/errors/no_variable_name/index.html | 83 +++++++++++ .../non_configurable_array_element/index.html | 84 +++++++++++ .../reference/errors/not_a_codepoint/index.html | 50 +++++++ .../reference/errors/not_a_constructor/index.html | 96 ++++++++++++ .../reference/errors/not_a_function/index.html | 84 +++++++++++ .../reference/errors/not_defined/index.html | 66 +++++++++ .../reference/errors/precision_range/index.html | 96 ++++++++++++ .../errors/property_access_denied/index.html | 47 ++++++ .../reference/errors/read-only/index.html | 82 +++++++++++ .../errors/redeclared_parameter/index.html | 61 ++++++++ .../index.html | 89 +++++++++++ .../errors/reserved_identifier/index.html | 76 ++++++++++ .../errors/resulting_string_too_large/index.html | 45 ++++++ .../reference/errors/stmt_after_return/index.html | 84 +++++++++++ .../errors/strict_non_simple_params/index.html | 126 ++++++++++++++++ .../reference/errors/too_much_recursion/index.html | 54 +++++++ .../typed_array_invalid_arguments/index.html | 78 ++++++++++ .../reference/errors/undeclared_var/index.html | 66 +++++++++ .../reference/errors/undefined_prop/index.html | 57 +++++++ .../reference/errors/unexpected_token/index.html | 74 ++++++++++ .../reference/errors/unexpected_type/index.html | 63 ++++++++ .../errors/unnamed_function_statement/index.html | 111 ++++++++++++++ .../errors/unterminated_string_literal/index.html | 64 ++++++++ .../index.html" | 60 ++++++++ 78 files changed, 5423 insertions(+) create mode 100644 files/ru/web/javascript/reference/errors/already_has_pragma/index.html create mode 100644 files/ru/web/javascript/reference/errors/array_sort_argument/index.html create mode 100644 files/ru/web/javascript/reference/errors/bad_octal/index.html create mode 100644 files/ru/web/javascript/reference/errors/bad_radix/index.html create mode 100644 files/ru/web/javascript/reference/errors/bad_regexp_flag/index.html create mode 100644 files/ru/web/javascript/reference/errors/bad_return_or_yield/index.html create mode 100644 files/ru/web/javascript/reference/errors/called_on_incompatible_type/index.html create mode 100644 files/ru/web/javascript/reference/errors/cant_access_lexical_declaration_before_init/index.html create mode 100644 files/ru/web/javascript/reference/errors/cant_access_property/index.html create mode 100644 files/ru/web/javascript/reference/errors/cant_assign_to_property/index.html create mode 100644 files/ru/web/javascript/reference/errors/cant_define_property_object_not_extensible/index.html create mode 100644 files/ru/web/javascript/reference/errors/cant_delete/index.html create mode 100644 files/ru/web/javascript/reference/errors/cant_redefine_property/index.html create mode 100644 files/ru/web/javascript/reference/errors/cyclic_object_value/index.html create mode 100644 files/ru/web/javascript/reference/errors/dead_object/index.html create mode 100644 files/ru/web/javascript/reference/errors/delete_in_strict_mode/index.html create mode 100644 files/ru/web/javascript/reference/errors/deprecated_caller_or_arguments_usage/index.html create mode 100644 files/ru/web/javascript/reference/errors/deprecated_expression_closures/index.html create mode 100644 files/ru/web/javascript/reference/errors/deprecated_octal/index.html create mode 100644 files/ru/web/javascript/reference/errors/deprecated_source_map_pragma/index.html create mode 100644 files/ru/web/javascript/reference/errors/deprecated_string_generics/index.html create mode 100644 files/ru/web/javascript/reference/errors/deprecated_tolocaleformat/index.html create mode 100644 files/ru/web/javascript/reference/errors/equal_as_assign/index.html create mode 100644 files/ru/web/javascript/reference/errors/for-each-in_loops_are_deprecated/index.html create mode 100644 files/ru/web/javascript/reference/errors/getter_only/index.html create mode 100644 files/ru/web/javascript/reference/errors/identifier_after_number/index.html create mode 100644 files/ru/web/javascript/reference/errors/illegal_character/index.html create mode 100644 files/ru/web/javascript/reference/errors/in_operator_no_object/index.html create mode 100644 files/ru/web/javascript/reference/errors/index.html create mode 100644 files/ru/web/javascript/reference/errors/invalid_array_length/index.html create mode 100644 files/ru/web/javascript/reference/errors/invalid_assignment_left-hand_side/index.html create mode 100644 files/ru/web/javascript/reference/errors/invalid_const_assignment/index.html create mode 100644 files/ru/web/javascript/reference/errors/invalid_date/index.html create mode 100644 files/ru/web/javascript/reference/errors/invalid_for-in_initializer/index.html create mode 100644 files/ru/web/javascript/reference/errors/invalid_for-of_initializer/index.html create mode 100644 files/ru/web/javascript/reference/errors/invalid_right_hand_side_instanceof_operand/index.html create mode 100644 files/ru/web/javascript/reference/errors/is_not_iterable/index.html create mode 100644 files/ru/web/javascript/reference/errors/json_bad_parse/index.html create mode 100644 files/ru/web/javascript/reference/errors/malformed_formal_parameter/index.html create mode 100644 files/ru/web/javascript/reference/errors/malformed_uri/index.html create mode 100644 files/ru/web/javascript/reference/errors/missing_bracket_after_list/index.html create mode 100644 files/ru/web/javascript/reference/errors/missing_colon_after_property_id/index.html create mode 100644 files/ru/web/javascript/reference/errors/missing_curly_after_function_body/index.html create mode 100644 files/ru/web/javascript/reference/errors/missing_curly_after_property_list/index.html create mode 100644 files/ru/web/javascript/reference/errors/missing_formal_parameter/index.html create mode 100644 files/ru/web/javascript/reference/errors/missing_initializer_in_const/index.html create mode 100644 files/ru/web/javascript/reference/errors/missing_name_after_dot_operator/index.html create mode 100644 files/ru/web/javascript/reference/errors/missing_parenthesis_after_argument_list/index.html create mode 100644 files/ru/web/javascript/reference/errors/missing_parenthesis_after_condition/index.html create mode 100644 files/ru/web/javascript/reference/errors/missing_semicolon_before_statement/index.html create mode 100644 files/ru/web/javascript/reference/errors/more_arguments_needed/index.html create mode 100644 files/ru/web/javascript/reference/errors/negative_repetition_count/index.html create mode 100644 files/ru/web/javascript/reference/errors/no_non-null_object/index.html create mode 100644 files/ru/web/javascript/reference/errors/no_properties/index.html create mode 100644 files/ru/web/javascript/reference/errors/no_variable_name/index.html create mode 100644 files/ru/web/javascript/reference/errors/non_configurable_array_element/index.html create mode 100644 files/ru/web/javascript/reference/errors/not_a_codepoint/index.html create mode 100644 files/ru/web/javascript/reference/errors/not_a_constructor/index.html create mode 100644 files/ru/web/javascript/reference/errors/not_a_function/index.html create mode 100644 files/ru/web/javascript/reference/errors/not_defined/index.html create mode 100644 files/ru/web/javascript/reference/errors/precision_range/index.html create mode 100644 files/ru/web/javascript/reference/errors/property_access_denied/index.html create mode 100644 files/ru/web/javascript/reference/errors/read-only/index.html create mode 100644 files/ru/web/javascript/reference/errors/redeclared_parameter/index.html create mode 100644 files/ru/web/javascript/reference/errors/reduce_of_empty_array_with_no_initial_value/index.html create mode 100644 files/ru/web/javascript/reference/errors/reserved_identifier/index.html create mode 100644 files/ru/web/javascript/reference/errors/resulting_string_too_large/index.html create mode 100644 files/ru/web/javascript/reference/errors/stmt_after_return/index.html create mode 100644 files/ru/web/javascript/reference/errors/strict_non_simple_params/index.html create mode 100644 files/ru/web/javascript/reference/errors/too_much_recursion/index.html create mode 100644 files/ru/web/javascript/reference/errors/typed_array_invalid_arguments/index.html create mode 100644 files/ru/web/javascript/reference/errors/undeclared_var/index.html create mode 100644 files/ru/web/javascript/reference/errors/undefined_prop/index.html create mode 100644 files/ru/web/javascript/reference/errors/unexpected_token/index.html create mode 100644 files/ru/web/javascript/reference/errors/unexpected_type/index.html create mode 100644 files/ru/web/javascript/reference/errors/unnamed_function_statement/index.html create mode 100644 files/ru/web/javascript/reference/errors/unterminated_string_literal/index.html create mode 100644 "files/ru/web/javascript/reference/errors/\320\277\320\265\321\200\320\265\320\274\320\265\320\275\320\275\321\213\320\265_\321\201\320\272\321\200\321\213\320\262\320\260\321\216\321\202_\320\260\321\200\320\263\321\203\320\274\320\265\320\275\321\202/index.html" (limited to 'files/ru/web/javascript/reference/errors') 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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщение

+ +
Опасно: Внимание: -file- является в сущности назначенным //# sourceMappingURL, но уже имеет один)
+ +

Тип ошибки

+ +

Предупреждение. Выполнение скрипта не будет остановлено.

+ +

Что вы сделали не так?

+ +

 

+ +

Для данного источника JavaScript исходная карта была указана несколько раз.

+ +

Источники JavaScript часто объединяются и минимизируются, чтобы сделать их доставку с сервера более эффективной. С помощью сопоставлений исходного кода отладчик может сопоставить выполняемый код с исходными файлами. Существует два способа назначения исходной карты: с помощью комментария или путем установки заголовка для файла JavaScript.

+ +

 

+ +

Примеры

+ +

Настройка исходной карты с помощью комментария в файле:

+ +
//# sourceMappingURL=http://example.com/path/to/your/sourcemap.map
+ +

Или, в качестве альтернативы, вы можете установить заголовок, на ваш JavaScript файл :

+ +
X-SourceMap: /path/to/file.js.map
+ +

Смотрите также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщение

+ +
TypeError: аргумент не является объектом функции (Edge)
+TypeError: недопустимый Array.prototype.sort аргумент для (Firefox)
+ +

Тип ошибки

+ +

{{jsxref("TypeError")}}

+ +

Что пошло не так?

+ +

Аргумент {{jsxref("Array.prototype.sort()")}} предполагается либо {{jsxref("undefined")}} или функцию, которая сравнивает его операндов.

+ +

Примеры

+ +

Неправильные примеры

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

правильные

+ +
[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]
+ +

Смотрите также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщение

+ +
Внимание: Синтаксическая ошибка: 08 не является восьмеричной постоянной по ECMA-262.
+Внимание: Синтаксическая ошибка: 09 не является восьмеричной постоянной по ECMA-262.
+
+ +

Тип ошибки

+ +

Предупреждение. Выполнение JavaScript не будет остановлено.

+ +

Что пошло не так?

+ +

Десятеричные литералы могут начинаться с нуля (0), за которым следуют другие десятеричные цифры. Но, если все цифры после начального нуля (0) меньше 8, то число интерпретируется как восьмеричное. Т.к. 08 и 09 не соответствуют даному условию, JavaScript выводит предупреждение об этом.

+ +

Следует отметить, что восьмеричные литералы и восьмеричные управляющие последовательности являются устаревшими и будут содержать дополнительное предупреждение об этом. С выпуском ECMAScript 6 версии в синтаксисе используется начальный нуль (0), за которым следует строчная или прописная Латинская буква "O" (0o или 0O)Дополнительную информацию смотрите на странице о  лексической грамматике.

+ +

Примеры

+ +

Недопустимые восьмеричные числа

+ +
08;
+09;
+// Синтаксическая ошибка: 08 не является восьмеричной постоянной по ECMA-262.
+// Синтаксическая ошибка: восьмеричные литералы с "0"-префиксом и восьмеричные управляющие последовательности
+// являются устаревшими
+ +

Допустимые восьмеричные числа

+ +

Используйте начальный нуль, за которым следует буква «o»;

+ +
0O755;
+0o644;
+
+ +

Смотрите также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщение

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

Тип ошибки

+ +

{{jsxref("RangeError")}}

+ +

Что пошло не так?

+ +

Метод  {{jsxref("Number.prototype.toString()")}} был вызван с дополнительным параметром radix. Его значение должно быть целым числом, принадлежащим промежутку от 2 до 36 и указывающим основание системы счисления, которая должна быть использована для представления численных значений. Например, десятичное (основание 10) число 169 представляется в шестнадцатеричном виде (основание 16) как A9.

+ +

Почему значение этого параметра не может быть больше, чем 36? Для оснований, превышающих 10, в качестве цифр используются алфавитные символы; следовательно, основание не может быть больше 36, поскольку в латинском алфавите (используемом английским и многими другими языками) только 26 символов.

+ +

Наиболее распространенные основания систем счисления:

+ + + +

Примеры

+ +

Некорректное применение

+ +
(42).toString(0);
+(42).toString(1);
+(42).toString(37);
+(42).toString(150);
+// Нельзя использовать для форматирования строку данного вида:
+(12071989).toString('MM-dd-yyyy');
+
+ +

Корректное применение

+ +
(42).toString(2);     // "101010" (двоичная система)
+(13).toString(8);     // "15"     (восьмеричная)
+(0x42).toString(10);  // "66"     (десятичная)
+(100000).toString(16) // "186a0"  (шестнадцатеричная)
+
+ +

Смотрите также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщение

+ +
SyntaxError: invalid regular expression flag "x" (Firefox)
+SyntaxError: Invalid regular expression flags (Chrome)
+
+ +

Тип ошибки

+ +

{{jsxref("SyntaxError")}}

+ +

Что пошло не так?

+ +

В коде есть недопустимые флаги регулярных выражений. Литерал в регулярном выражении, который содержит шаблон заключенный между двумя слэшами, флаги определяются после второго флага. Они также могут быть объявлены в конструкторе функции {{jsxref("RegExp")}} object (второй параметр). Флаги регулярного выражения могут быть использованы отдельно или вместе в любой очередности, но в ECMAScript их только пять.

+ +

Чтоб включить флаг в регулярное выражение, используйте синтаксис:

+ +
var re = /pattern/flags;
+
+ +

или

+ +
var re = new RegExp('pattern', 'flags');
+ +

Флаги регулярного выражения

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ФлагОписание
gГлобальный поиск.
iНечувствительный к регистру поиск.
mПоиск по всем строкам.
uUnicode; обрабатывать шаблон как последовательность кода Unicode
yВыполняет «липкий» поиск, который будет начинаться с текущей позиции в целевой строке. Cм. {{jsxref("RegExp.sticky", "sticky")}}
+ +

Примеры

+ +

Существует только пять действительных флагов регулярных выражений.

+ +
/foo/bar;
+
+// Ошибка синтаксиса: недействительный флаг "b" для регулярного выражения
+
+ +

Вы намеревались создать регулярное выражение? Выражение, содержащее два слэша, интерпретируется как литерал регулярного выражения.

+ +
let obj = {
+  url: /docs/Web
+};
+
+// Ошибка синтаксиса: недействительный флаг "W" для регулярного выражения
+
+ +

Или вы хотели создать строку вместо этого? Добавьте одинарные или двойные кавычки, чтобы создать строковый литерал. 

+ +
let obj = {
+  url: '/docs/Web'
+};
+ +

Действительные флаги регулярного выражения 

+ +

Вгляните на таблицу выше, где представлены пять действительных флагов регулярного выражения, которые разрешены в JavaScript

+ +
/foo/g;
+/foo/gim;
+/foo/uy;
+
+ +

Смотрите также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщение

+ +
SyntaxError: 'return' statement outside of function (Edge)
+SyntaxError: return not in function (Firefox)
+SyntaxError: yield not in function (Firefox)
+
+ +

Тип ошибки

+ +

{{jsxref("SyntaxError")}}.

+ +

Что пошло не так?

+ +

Вызов оператора return или yield был осуществлен вне функции. Может, где-то пропущена фигурная скобка? Операторы return и yield не могут существовать вне функции, поскольку они завершают (или останавливают и возобновляют) её исполнение и указывают значение, возвращаемое в место, откуда она была вызвана.

+ +

Примеры

+ +
var cheer = function(score) {
+  if (score === 147)
+    return 'Максимум!';
+  };
+  if (score > 100) {
+    return 'Столетие!';
+  }
+}
+
+// SyntaxError: return not in function
+ +

На первый взгляд кажется, что фигурные скобки расставлены правильно, но в данном примере пропущена { после первого оператора if. Правильный вариант:

+ +
var cheer = function(score) {
+  if (score === 147) {
+    return 'Максимум!';
+  }
+  if (score > 100) {
+    return 'Столетие!';
+  }
+};
+ +

Смотрите также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +
 
+ +

Сообщение

+ +
TypeError: 'this' не является  Set объектом (EdgE)
+TypeError: Function.prototype.toString вызывается несовместимый объект (Firefox)
+TypeError: Function.prototype.bind вызывается несовместимая цель (Firefox)
+TypeError: Метод Set.prototype.add called вызывается несовместимый приемник undefined (Chrome)
+TypeError: Bind должен вызываться для функции(Chrome)
+
+ +

Тип ошибки 

+ +

{{jsxref("TypeError")}}

+ +

Что пошло не так?

+ +

При возникновении этой ошибки вызывается функция (для данного объекта) с типом this, не соответствующим типу, ожидаемому функцией.

+ +

Эта проблема может возникнуть при использовании {{jsxref("Function.prototype.call()")}} ил {{jsxref("Function.prototype.apply()")}} методы и предоставление аргумента this, который не имеет ожидаемого типа.

+ +

Эта проблема также может возникнуть при предоставлении функции (хранящейся в объекте) в качестве аргумента другой функции. В этом случае объект не будет целью this функции. Чтобы обойти эту проблему, необходимо либо предоставить лямбда-код, который выполняет вызов, либо использовать{{jsxref("Function.prototype.bind()")}} функция для принудительной передачи аргумента this ожидаемому объекту.

+ +

Примеры

+ +

Неправильные

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

Правильные

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

Смотрите также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщение

+ +
ReferenceError: can't access lexical declaration `X' before initialization (Firefox)
+ReferenceError: 'x' is not defined (Chrome)
+
+ +

Тип ошибки

+ +

{{jsxref("ReferenceError")}}

+ +

Что случилось?

+ +

Попытка доступа к лексической переменной до ее инициализации. Это может произойти в любом блоке, если попытаться обратиться к переменной, объявленной с помощью ключевых слов let или const до того, как им было присвоено значение.

+ +

Примеры

+ +

Неправильно

+ +

Здесь переменная "foo" заново объявляется внутри блока с помощью ключевого слова let.

+ +
function test() {
+  let foo = 33;
+  if (true) {
+    let foo = (foo + 55);
+    // ReferenceError: can't access lexical
+    // declaration `foo' before initialization
+  }
+}
+test();
+
+ +

Правильно

+ +

Чтобы изменить "foo" в теле выражения if, надо убрать ключевое слово let и таким образом избавиться от повторного объявления.

+ +
function test(){
+   let foo = 33;
+   if (true) {
+      foo = (foo + 55);
+   }
+}
+test();
+
+ +

См. также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Message

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

Тип ошибки

+ +

{{jsxref("TypeError")}}.

+ +

Что не так?

+ +

Доступ к собственности осуществлялся {{jsxref("undefined")}} или {{jsxref("null")}} переменными

+ +

Примеры

+ +

Неправильные примеры

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

Исправление проблемы

+ +

Чтобы исправить указатель null на неопределенные или нулевые значения, можно использовать оператор typeof, например.

+ +
if (typeof foo !== 'undefined') {
+  // Теперь мы знаем, что foo определен.
+}
+ +

Смотрите также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +
Ошибка строгого режима JavaScript "can't assign to property" ("невозможно присвоить свойство") происходит в тот момент, когда Вы пытаетесь создать свойство примитивного типа данных (такого как символ, строка, число или булевое значение). Примитивные типы данных не могут содержать никаких свойств. 
+ +

Message

+ +
TypeError: can't assign to property "x" on {y}: not an object (Firefox)
+TypeError: Cannot create property 'x' on {y} (Chrome)
+
+ +

Error type

+ +

{{jsxref("TypeError")}}.

+ +

What went wrong?

+ +

In {{jsxref("Strict_mode")}}, a {{jsxref("TypeError")}} is raised when attempting to create a property on primitive value such as a symbol, a string, a number or a boolean. Primitive values cannot hold any property.

+ +

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.

+ +

Examples

+ +

Invalid cases

+ +
'use strict';
+
+var foo = "my string";
+// The following line does nothing if not in strict mode.
+foo.bar = {}; // TypeError: can't assign to property "bar" on "my string": not an object
+
+ +

Fixing the issue

+ +

Either fix the code to prevent the primitive from being used in such places, or fix the issue is to create the object equivalent {{jsxref("Object")}}.

+ +
'use strict';
+
+var foo = new String("my string");
+foo.bar = {};
+
+ +

See also

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщение

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

Тип ошибки

+ +

{{jsxref("TypeError")}}

+ +

Что произошло не так?

+ +

Обычно, объект расширяемый и к нему можно добавать новые свойства. Однако в этой ситуации {{jsxref("Object.preventExtensions()")}} сделал объект нерасширяемым, так что у него не может появиться других свойств, отличных от тех, которые были объявлены когда объект стал нерасширяемым.

+ +

Примеры

+ +

В строгом режиме при попытке добавить новые свойства в нерасширяемый объект возникает ошибка TypeError. В нестрогом режиме добавление свойства "x" игнорируется.

+ +
'use strict';
+
+var obj = {};
+Object.preventExtensions(obj);
+
+obj.x = 'foo';
+// TypeError: can't define property "x": "obj" is not extensible
+
+ +

В обеих, строгом и нестрогом режимах, вызов {{jsxref("Object.defineProperty()")}} вызывает исключнеие при добавлении нового свойства в нерасширяемый объект.

+ +
var obj = { };
+Object.preventExtensions(obj);
+
+Object.defineProperty(obj,
+  'x', { value: "foo" }
+);
+// TypeError: can't define property "x": "obj" is not extensible
+
+ +

Чтобы исправить эту ошибку, необходимо удалить вызов {{jsxref("Object.preventExtensions()")}} полностью или переместить его в положение, чтобы сначала свойство добавлялось, а потом объект помечался как нерасширяемый. Конечно вы также можете удалить свойство, которое пытались добавить, если оно вам не нужно.

+ +
'use strict';
+
+var obj = {};
+obj.x = 'foo'; // add property first and only then prevent extensions
+
+Object.preventExtensions(obj);
+ +

Смотрите также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщение

+ +
TypeError: вызов delete на 'x' не разрешен в строгом режиме (Edge)
+TypeError: свойство "x" не настраивается и не может быть удалено. (браузер Firefox)
+TypeError: не удается удалить свойство "x" из #<Object> (Chrome)
+
+ +

Тип ошибки

+ +

{{jsxref("TypeError")}} in strict mode only.

+ +

Что пошло не так?

+ +

 

+ +

Была сделана попытка удалить свойство, но это свойство не изменяется. Настраиваемый атрибут определяет, можно ли удалить свойство из объекта и можно ли изменить его атрибуты (отличные от доступных для записи).

+ +

Эта ошибка возникает только в коде строгого режима. В нестрогом коде операция возвращает false.

+ +

 

+ +

Примеры

+ +

Не настраиваемые свойства не очень распространены, но их можно создать с помощью {{jsxref("Object.defineProperty()")}} или {{jsxref("Object.freeze()")}}.

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

В JavaScript также встроено несколько настраиваемых свойств. Возможно, вы пытались удалить математическую константу.

+ +
'use strict';
+delete Math.PI;  // TypeError
+ +

Смотрите также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщения

+ +
TypeError: невозможно изменить свойство, недоступное для записи {x} (Edge)
+TypeError: невозможно переопределить не настраиваемое свойство "x" (Firefox)
+TypeError: не удается переопределить свойство: "x" (Chrome)
+
+ +

Тип ошибки 

+ +

{{jsxref("TypeError")}}

+ +

Что не так?

+ +

Была предпринята попытка переопределить свойство, но это свойство не настраивается. Настраиваемый атрибут определяет, можно ли удалить свойство из объекта и можно ли изменить его атрибуты (отличные от доступных для записи). Обычно свойства объекта, созданного инициализатором объекта, настраиваются. Однако, например, при использовании {{jsxref("Object.defineProperty()")}}, свойство не настраивается по умолчанию.

+ +

Примеры

+ +

Не настраиваемые свойства, созданные Object.defineProperty

+ +

The {{jsxref("Object.defineProperty()")}} создает не настраиваемые свойства, если они не указаны как настраиваемые.

+ +
var obj = Object.create({});
+Object.defineProperty(obj, "foo", {value: "bar"});
+
+Object.defineProperty(obj, "foo", {value: "baz"});
+// TypeError: не удается переопределить не настраиваемое свойство "foo"
+
+ +

Вам нужно будет установить свойство "foo" в конфигурируемое, если вы собираетесь переопределить его позже в коде.

+ +
var obj = Object.create({});
+Object.defineProperty(obj, "foo", {value: "bar", configurable: true});
+Object.defineProperty(obj, "foo", {value: "baz", configurable: true});
+ +

Смотрите также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщения

+ +
TypeError: циклическое значение объекта (Firefox)
+TypeError: преобразование круговой структуры в JSON (Chrome и Opera)
+TypeError: циклическая ссылка в аргументе значения не поддерживается (Edge)
+
+ +

Тип ошибки?

+ +

{{jsxref("TypeError")}}

+ +

Что не так?

+ +

The JSON format per se doesn't support object references (although an IETF draft exists), hence {{jsxref("JSON.stringify()")}} doesn't try to solve them and fail accordingly.

+ +

Примеры

+ +

В круговой структуре как эта

+ +
var circularReference = {otherData: 123};
+circularReference.myself = circularReference;
+
+ +

{{jsxref("JSON.stringify()")}} закончится неудачей

+ +
JSON.stringify(circularReference);
+// TypeError: циклическое значение объекта
+
+ + + +

Для сериализации циклических ссылок можно использовать библиотеку, которая их поддерживает (например, cycle.js) или самостоятельно реализовать решение, которое потребует поиска и замены (или удаления) циклических ссылок сериализуемыми значениями.

+ +

Во фрагменте кода ниже показано, как найти и отфильтровать циклическую ссылку (что приводит к потере данных) с помощью параметра replacer{{jsxref("JSON.stringify()")}}:

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

Смотрите также

+ + 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 +--- +
{{JSSidebar("Errors")}}
+ +

Сообщение

+ +
TypeError: can't access dead object
+
+ +

Тип ошибки

+ +

{{jsxref("TypeError")}}

+ +

Что не так?

+ +

Для улучшения использования памяти и предотвращения утечек памяти Firefox запрещает надстройкам сохранять строгие ссылки на объекты DOM после уничтожения родительского документа. Мертвый объект содержит сильную ссылку (keep alive) на элемент DOM, который сохраняется даже после того, как он был уничтожен в DOM. Чтобы избежать этих проблем, ссылки на узлы DOM во внешнем документе должны храниться в объекте, который относится к этому документу, и очищаться при выгрузке документа или храниться как слабые ссылки.

+ +

Проверка, если объект мертв

+ +

Components.utils предлагает isDeadWrapper()метод, который может использовать привилегированный код. 
+  

+ +
if (Components.utils.isDeadWrapper(window)) {
+  // dead
+}
+ +

Непривилегированный код не имеет доступа к Component.utils и мог бы просто быть в состоянии поймать исключение.

+ +
try {
+  String(window);
+}
+catch (e) {
+  console.log("window is likely dead");
+}
+ +

Смотрите также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщение

+ +
SyntaxError: вызов delete on expression запрещен в строгом режиме в (Edge)
+SyntaxError: применение оператора 'delete' к неполному имени не рекомендуется в (Firefox)
+SyntaxError: удаление неполного идентификатора в строгом режиме запрещенно в (Chrome)
+
+ +

Тип ошибки

+ +

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

+ +

В чем ошибка?

+ +

Обычные переменные в JavaScript нельзя удалить с помощью оператора delete. В строгом режиме попытка удалить переменную вызовет ошибку и не будет разрешена.

+ +

Оператор delete может удалять только свойства объекта. Свойства объекта "квалифицированы", если они конфигурируемы.

+ +

В отличие от общепринятого мнения, оператор delete не имеет ничего общего с непосредственным освобождением памяти. Управление памятью осуществляется косвенным образом через нарушение ссылок см.memory management . В разделе управление памятью и страницы оператора delete для более подробной информации.

+ +

Эта ошибка возникает только в коде строгого режима. В нестрогом коде операция просто возвращает false.

+ +

 

+ +

Примеры

+ +

Попытка удалить простую переменную не работает в JavaScript и выдает ошибку в строгом режиме:

+ +
'use strict';
+
+var x;
+
+// ...
+
+delete x;
+
+// SyntaxError: применение оператора 'delete' к неполному имени является устаревшим
+
+ +

Чтобы освободить содержимое переменной, задайте для нее значение {{jsxref("null")}}:

+ +
'use strict';
+
+var x;
+
+// ...
+
+x = null;
+
+// X может быть собран "мусор"
+
+ +

Смотри также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Message(сообщение)

+ +
TypeError(Ошибка Типа): 'arguments', 'callee' и 'caller' являются ограниченными свойствами функции и не могут быть доступны в этом контексте (EDGE)
+Warning: ReferenceError(Ошибка Ссылки): deprecated caller usage (устаревшие использование вызывающего абонента Firefox)
+Warning: ReferenceError(Ошибка Ссылки): deprecated arguments usage (использование устаревших аргументов Firefox)
+TypeError(Ошибка Типа): 'callee' и 'caller' (не может быть доступен в строгом режиме safari)
+
+ +

Error type (Тип ошибки)

+ +

Предупреждение строгого режима, при котором произошла операция {{jsxref("ReferenceError")}} выполнение JavaScript не будет остановлено.

+ +

What went wrong?(Что пошло не так?)

+ +

В строгом режиме используются свойства {{jsxref("Function.caller")}} или {{jsxref("Function.arguments")}} которых не должны быть. Они являются устаревшими, потому что они утечка вызывающей функции, являются нестандартными, и их трудно оптимизировать, и это потенциально опасный для производительности компонент. 

+ +

Examples(Примеры)

+ +

Устаревшая function.caller или arguments.callee.caller

+ +

{{jsxref("Function.caller")}} и arguments.callee.caller являются устаревшими (Дополнительные сведения см. в справочных статьях).

+ +
'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: устаревшее использование вызывающего абонента
+// "функция была вызвана сверху!"
+ +

Function.arguments

+ +

{{jsxref("Function.arguments")}} является устаревшим (Дополнительные сведения см. в справочной статье).

+ +
'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: использование устаревших аргументов
+
+ +

Смотрите также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщение

+ +
Warning: замыкания выражений являются устаревшими
+
+ +

Тип ошибки

+ +

Предупреждающий. Выполнение скрипта не будет остановлено.

+ +

Что пошло не так?

+ +

Нестандартный синтаксис закрытия выражений (сокращенный синтаксис функций) устарел и больше не должен использоваться. Этот синтаксис будет полностью удален в Этот синтаксис будет полностью удален в {{bug(1083458)}} а скрипты с его помощью {{jsxref("SyntaxError")}} затем.

+ +

Примеры

+ +

Неправильтный синтаксис

+ +

Замыкания выражений пропускают фигурные скобки или операторы return из объявлений функций или определений методов в объектах.

+ +
var x = function() 1;
+
+var obj = {
+  count: function() 1
+};
+
+ +

Стандартный синтаксис

+ +

To convert the non-standard expression closures syntax to standard ECMAScript syntax, you can add curly braces and return statements.

+ +
var x = function() { return 1; }
+
+var obj = {
+  count: function() { return 1; }
+};
+
+ +

Стандартный синтаксис с использованием функций со стрелками:

+ +
var x = () => 1;
+ +

Стандартный синтаксис с использованием сокращенного синтаксиса метода

+ +

Замыкания выражений также можно найти с помощью getter'а и setter'а, например:

+ +
var obj = {
+  get x() 1,
+  set x(v) this.v = v
+};
+
+ +

With ES2015 method definitions, это может быть конвертированно в:

+ +
var obj = {
+  get x() { return 1 },
+  set x(v) { this.v = v }
+};
+
+ +

Смотрите также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщение

+ +

 

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

Перевод:

+ +
Ошибка синтаксиса: Восьмеричные числовые литералы и escape-последовательности, не разрешены в строгом режиме (Edge)
+Ошибка синтаксиса: восьмеричные литералы с префиксом "0", и восьмеричные escape-последовательности считаются устаревшими;
+для восьмеричных литералов используйте префикс "0o"
+
+ +

Тип ошибки

+ +

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

+ +

Что пошло не так?

+ +

Восьмеричные литералы и восьмеричные escape-последовательности являются устаревшими и будут выдавать {{jsxref("SyntaxError")}} в строгом режиме. С ECMAScript2015 стандартным синтаксисом является использование ведующего нуля с последующеей заглавной или строчной латинской буквой "O" (0o bили 0O)

+ +

Примеры

+ +

"0"-prefixed octal literals (восьмеричные литералы с префиксом "0")
+  

+ +
"use strict";
+
+03;
+
+// Ошибка синтаксиса: восьмеричные литералы с префиксом "0" и восьмеричные escape-последовательности считаются устаревшими
+
+ +

Octal escape sequences (Восьмеричные escape-последовательности)

+ +
"use strict";
+
+"\251";
+
+// SyntaxError: восьмеричные литералы с префиксом "0" и восьмеричные escape-последовательности считаются устаревшими
+
+ +

Valid octal numbers (Допустимые восьмеричные числа)

+ +

Используйте ноль с последующей латинской буквой "o" или "O".

+ +
0o3;
+
+ +

Вместо escape-последовательностей можно использовать шестнадцатеричные escape-последовательности:

+ +
'\xA9';
+ +

Смотрите также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщение

+ +
Warning: SyntaxError: Using //@ to indicate sourceURL pragmas is deprecated. Use //# instead
+
+Warning: SyntaxError: Using //@ to indicate sourceMappingURL pragmas is deprecated. Use //# instead
+
+ +

Тип ошибки

+ +

Предупреждение о том, что произошла ошибка {{jsxref("SyntaxError")}}. Выполнение скрипта не будет остановлено.

+ +

Что пошло не так?

+ +

Есть устаревший синтаксис карты кода в исходном коде JavaScript.

+ +

Файлы JavaScript нередко объединяются и сокращаются, чтобы доставлять их с сервера более эффективно. С картой кода, отладчик может сопоставить код выполнения для исходных файлов.

+ +

Спецификация карты кода меняет синтаксис из-за конфликта с IE всякий раз, когда он был найден в странице после //@cc_on было интерпретировано для включения условной компиляции в IE JScript engine. Комментарий условной компиляции для IE малоизвестен, и это разбивает карты кода jQuery и других библиотек.

+ +

Примеры

+ +

Устаревший синтаксис

+ +

Синтаксис с использованием знака "@" устарел.

+ +
//@ sourceMappingURL=http://example.com/path/to/your/sourcemap.map
+
+ +

Стандартный синтаксис

+ +

Используйте знак "#".

+ +
//# sourceMappingURL=http://example.com/path/to/your/sourcemap.map
+ +

Или, в качестве альтернативы, вы можете установить заголовок для Вашего JavaScript-файла чтобы избежать комментирования:

+ +
X-SourceMap: /path/to/file.js.map
+ +

Браузерная совместимость

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + +
ХарактеристикаChromeFirefox (Gecko)Internet ExplorerOperaSafari
Новый синтаксис{{CompatVersionUnknown}}{{ CompatGeckoDesktop(24) }}{{CompatUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
ХарактеристикаAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Новый синтаксис{{CompatUnknown}}{{CompatUnknown}}{{ CompatGeckoMobile(24) }}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
+
+ +

 

+ +

Смотрите также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +
Поддержка строковых обобщенных методов прекращена с версии Firefox 68. Более старые версии предупреждают об использовании данных методов следующим образом:
+ +

Сообщение

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

Тип ошибки

+ +

Предупреждение. Исполнение кода JavaScript не будет остановлено.

+ +

Что пошло не так?

+ +

Нестандартные обобщенные методы {{jsxref("String")}} являются устаревшими, поддержка в Firefox прекращена, начиная с версии 68. Строковые обобщенные методы предоставляют возможность применять методы экземпляров String к любым объектам.

+ +

Примеры

+ +

Устаревший синтаксис

+ +
var num = 15;
+String.replace(num, /5/, '2');
+ +

Стандартный синтаксис

+ +
var num = 15;
+String(num).replace(/5/, '2');
+
+ +

Прослойка

+ +

Ниже приведен код прослойки, с помощью которой можно добавить поддержку обобщенных методов String в другие браузеры:

+ +
/*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]);
+  }
+}());
+ +

Смотрите также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщение

+ +
Внимание: Date.prototype.toLocaleFormat устарело; рассмотрите возможность использования Intl.DateTimeFormat взамен.
+
+ +

Тип ошибки

+ +

предупреждающий. Выполнение скрипта не будет остановлено.

+ +

Что пошло не так?  

+ +

Нестандартный {{jsxref("Date.prototype.toLocaleFormat")}} метод, устарел и больше не должен использоваться. Он использует строку формата в том же формате, ожидаемом
+ strftime() функция в C. функция больше не доступна в Firefox 58+.

+ +

Примеры

+ +

Неправильный синтаксис

+ +

В {{jsxref("Date.prototype.toLocaleFormat")}} метод устарел и будет удален (поддержка кроссбраузерных браузеров, доступна только в Firefox).

+ +
var today = new Date();
+var date = today.toLocaleFormat('%A, %e. %B %Y');
+
+console.log(date);
+// In German locale
+// "Freitag, 10. März 2017"
+ +

Альтернативный стандартный синтаксис с использованием ECMAScript IntlAPI

+ +

Стандарт ECMA-402 (ECMAScript Intl API) определяет стандартные объекты и методы, которые позволяют форматировать дату и время с учетом языка (доступно в Chrome 24+, Firefox 29+, IE11+, Safari10+).

+ +

You can now either use the {{jsxref("Date.prototype.toLocaleDateString")}} method if you just want to format one date.

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

 

+ +

Или, вы можете использовать {{jsxref("DateTimeFormat", "Intl.DateTimeFormat")}} объект, который позволяет кэшировать объект с большинством вычислений, выполненных таким образом, чтобы Форматирование было быстрым. Это полезно, если у вас есть цикл дат для форматирования.

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

Альтернативный стандартный ситнаксис с использованием Дата методов

+ +

{{jsxref("Date")}} объект предлагает несколько методов для построения пользовательской строки даты.

+ +
(new Date()).toLocaleFormat("%Y%m%d");
+// "20170310"
+
+ +

Может быть преобразован в:

+ +
let now = new Date();
+let date = now.getFullYear() * 10000 +
+          (now.getMonth() + 1) * 100 + now.getDate();
+
+console.log(date);
+// "20170310"
+ +

Смотрите также 

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщения

+ +
Warning: SyntaxError: тест на равенство (==) опечатка как присваивание (=)?
+
+ +

Тип ошибки

+ +

(Только в Firefox) {{jsxref("SyntaxError")}} предупреждение, в котором сообщается, только если javascript.options.strict предпочтение установлено вtrue.

+ +

Что пошло не так?

+ +

Было присвоение ( = ), когда вы обычно ожидали тест на присвоение (==). Чтобы помочь отладке, JavaScript (с включенными строгими предупреждениями) предупреждает об этом шаблоне.

+ +

Примеры

+ +

Задание в условных выражениях

+ +

Рекомендуется не использовать простые назначения в условном выражении (например, if...else), поскольку при просмотре кода назначение можно спутать с равенством. Например, не используйте следующий код:

+ +
if (x = y) {
+  // делать правильные вещи
+}
+
+ +

Если необходимо использовать присваивание в условном выражении, то обычно вокруг него ставят дополнительные скобки. Например:

+ +
if ((x = y)) {
+  // делать правильные вещи
+}
+ +

В противном случае вы, вероятно, хотели использовать оператор сравнения (например, = = или ===):

+ +
if (x == y) {
+  // делать правильные вещи
+}
+ +

Смотрите также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщение

+ +
Предупреждение: циклы JavaScript 1.6 for-each-in устарели; вместо них рекомендуется использовать ES6 for-of
+
+ +

Что пошло не так?

+ +

JavaScript 1.6's {{jsxref("Statements/for_each...in", "for each (variable in obj)")}} оператор устарел и будет удален в ближайшем будущем.

+ +

Примеры

+ +

Итерация обьекта

+ +

{{jsxref("Statements/for_each...in", "for each...in")}} используется для итерации по указанным значениям объектов.

+ +

Устаревший синтаксис

+ +
var object = { a: 10, b: 20 };
+
+for each (var x in object) {
+  console.log(x);        // 10
+                         // 20
+}
+
+ +

Альтернативный стандартный синтаксис

+ +

Теперь вы можете использовать стандартный {{jsxref("Statements/for...in", "for...in")}} цикл для итерации по указанным ключам объекта и получения каждого значения внутри цикла:

+ +
var object = { a: 10, b: 20 };
+
+for (var key in object) {
+  var x = object[key];
+  console.log(x);        // 10
+                         // 20
+}
+
+ +

Or, using {{jsxref("Statements/for...of", "for...of")}} (ES2015) and {{jsxref("Object.values")}} (ES2017), можно получить массив указанных значений объекта и выполнить итерацию по массиву следующим образом:

+ +
var object = { a: 10, b: 20 };
+
+for (var x of Object.values(object)) {
+  console.log(x);        // 10
+                         // 20
+}
+
+ +

Итерация массива

+ +

{{jsxref("Statements/for_each...in", "for each...in")}} используется для итерации по заданным элементам массива.

+ +

Устаревший синтаксис

+ +
var array = [10, 20, 30];
+
+for each (var x in array) {
+  console.log(x);        // 10
+                         // 20
+                         // 30
+}
+
+ +

Альтернативный стандартный синтаксис

+ +

Это теперь возможно с {{jsxref("Statements/for...of", "for...of")}} (ES2015) петли также.

+ +
var array = [10, 20, 30];
+
+for (var x of array) {
+  console.log(x);        // 10
+                         // 20
+                         // 30
+}
+
+ +

Итерация по нулевому массиву

+ +

{{jsxref("Statements/for_each...in", "for each...in")}} ничего не делает, если указанное значение null или undefined, но {{jsxref("Statements/for...of", "for...of")}} выдаст исключение в этих случаях.

+ +

Непрвильный синтаксис

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

Альтернативный стандартный синтаксис

+ +

Переписать  {{jsxref("Statements/for_each...in", "for each...in")}} операторы, чтобы значения могли быть null или undefined с{{jsxref("Statements/for...of", "for...of")}} также необходимо охранять {{jsxref("Statements/for...of", "for...of")}}.

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

Итерация по паре ключ-значение объекта

+ +

Неправильный синтаксис

+ +

Существует устаревшая идиома для итерации по парам ключ-значение указанного объекта с помощью {{jsxref("Statements/for_each...in", "for each...in")}} и осужденный {{jsxref("Iterator")}} обьект.

+ +
var object = { a: 10, b: 20 };
+
+for each (var [key, value] in Iterator(object)) {
+  console.log(key, value);  // "a", 10
+                            // "b", 20
+}
+
+ +

Альтернативный стандартный ситнтаксис

+ +

Теперь можно использовать стандартный цикл {{jsxref("Statements/for...in", "for...in")}} цикл для итерации по указанным ключам объекта и получения каждого значения внутри цикла:

+ +
var object = { a: 10, b: 20 };
+
+for (var key in object) {
+  var value = object[key];
+  console.log(key, value);  // "a", 10
+                            // "b", 20
+}
+
+ +

Или, использовать {{jsxref("Statements/for...of", "for...of")}} (ES2015) и {{jsxref("Object.entries")}} (ES2017), можно получить массив указанных значений объекта и выполнить итерацию по массиву следующим образом:

+ +
var object = { a: 10, b: 20 };
+
+for (var [key, value] of Object.entries(object)) {
+  console.log(key, value);  // "a", 10
+                            // "b", 20
+}
+
+ +

Смотрите также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщения

+ +
TypeError: назначение свойств только для чтения не допускается в строгом режиме (Edge)
+TypeError: установка свойства только для геттера "x" (Firefox)
+TypeError: не удается установить свойство "prop" из #<Object>, который имеет только геттер (Chrome)
+
+
+ +

Тип ошибки

+ +

{{jsxref("TypeError")}} только в строгом режиме.

+ +

Что пошло не так?

+ +

Предпринята попытка задать новое значение свойству, для которого указан только геттер. . Пока это молча будет проигнорировано в non-strict режиме, оно бросит {{jsxref("TypeError")}} в strict mode.

+ +

Примеры

+ +

В приведенном ниже примере показано, как установить getter для свойства. Он не задает сеттер, так TypeError выдается при попытке установить свойство температуры до 30. Дополнительные сведения см. Также в {{jsxref("Object.defineProperty()")}} странице.

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

Чтобы устранить эту ошибку, необходимо либо удалить строку 16, в которой предпринята попытка задать свойство temperature, либо реализовать для нее сеттер, например, как показано ниже:

+ +
"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 }]
+ +

Смотрите также

+ + 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 +--- +
{{JSSidebar("Errors")}}
+ +

Сообщение

+ +
SyntaxError: непредвиденный идентификатор после числового литерала (Edge)
+SyntaxError: идентификатор запускается сразу после числового литерала (Firefox)
+SyntaxError: непредвиденное число (Chrome)
+
+ +

Тип ошибки

+ +

{{jsxref("SyntaxError")}}

+ +

Что пошло не так?

+ +

 

+ +

Имена переменных, называемых {{Glossary("Identifier", "identifiers")}} соответствуют определенным правилам, которых должен придерживаться ваш код!

+ +

Идентификатор JavaScript должен начинаться с буквы, символа подчеркивания ( _ ) или знака доллара ($). Они не могут начать с цифры! Только последующие символы могут быть цифрами (0-9).

+ +

 

+ +

Примеры

+ +

Имена переменных, начинающиеся с числовых литералов

+ +

Имена переменных не могут начинаться с чисел в JavaScript. Следующие сбои:

+ +
var 1life = 'foo';
+// SyntaxError:  идентификатор начинается сразу после числового литерала
+
+var foo = 1life;
+// SyntaxError:  идентификатор начинается сразу после числового литерала
+
+alert(1.foo);
+// SyntaxError:  идентификатор начинается сразу после числового литерала
+
+ +

Вы можете переназвать вашу перемменную чтобы избежать ведущего числа.

+ +
var life1 = 'foo';
+var foo = life1;
+
+ +

Смотрите также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщение

+ +
SyntaxError: illegal character (Firefox)
+SyntaxError: Invalid or unexpected token (Chrome)
+
+ +

Тип ошибки

+ +

{{jsxref("SyntaxError")}}

+ +

Что пошло не так?

+ +

Присутсвует недопустимый или неожиданный знак, который не принадлежит данной позиции в коде. Используйте редактор, поддерживающий подсветку синтаксиса, и внимательно проверьте ваш код на предмет таких несовпадений, как знак минус ( - ) вместо тире  () или простые кавычки ( " ) вместо нестандратных знаков цитирования ().

+ +

Примеры

+ +

Несоответсвующие символы

+ +

Некоторые символы выглядят одинаково, но становтся причиной того, что анализатор не выполняет итерпретацию вашего кода.

+ +
“This looks like a string”;
+// SyntaxError: illegal character
+
+42 – 13;
+// SyntaxError: illegal character
+
+ +

Так должно работать:

+ +
"This is actually a string";
+
+42 - 13;
+
+ +

Пропущенные символы

+ +

Это просто пропустить символ здесь или там.

+ +
var colors = ['#000', #333', '#666'];
+// SyntaxError: illegal character
+
+ +

Добавляем пропущенную кавычку для '#333' .

+ +
var colors = ['#000', '#333', '#666'];
+ +

Скрытые символы

+ +

Подчас копирования кода из внешнего источника могут встречаться недействительные символы. Будьте внимательны!

+ +
var foo = 'bar';​
+// SyntaxError: illegal character
+
+ +

Если проверить этот код в редакторе вроде Vim, вы можете увидеть, что в коде присутсвтует символ, именуемый нулевой пробел (zero-width space (ZWSP) (U+200B)).

+ +
var foo = 'bar';​<200b>
+ +

Смотрите также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщения

+ +
TypeError: недопустимый операнд в "in" (edge)
+TypeError: правая часть 'in' должна быть объектом, есть 'x' (Firefox)
+TypeError: невозможно использовать оператор 'in' для поиска 'x' в 'y' (Firefox, Chrome)
+
+
+ +

Тип ошибки

+ +

{{jsxref("TypeError")}}

+ +

Что пошло не так?

+ +

Оператор in можно использовать только для проверки наличия свойства в объекте. Вы не можете искать в строках, числах или других примитивных типах.

+ +

Примеры

+ +

Поиск в строках

+ +

В отличие от других языков программирования (например, Python), поиск в строках с помощью оператора in невозможен.

+ +
"Hello" in "Hello World";
+// TypeError: cannot use 'in' operator to search for 'Hello' in 'Hello World'
+ +

Вместо этого вам нужно будет использовать{{jsxref("String.prototype.indexOf()")}}или примеры

+ +
"Hello World".indexOf("Hello") !== -1;
+// true
+ +

Операнд не может бытьnull или undefined

+ +

Убедитесь, что объект, который вы осматриваете, на самом деле не {{jsxref("null")}} или {{jsxref("undefined")}}.

+ +
var foo = null;
+"bar" in foo;
+// TypeError: не удается использовать оператор 'in' для поиска 'bar' в 'foo' (Chrome)
+// TypeError: правая часть 'in' должна быть объектом, полученным null (Firefox)
+
+ +

Оператор in всегда ожидает объект.

+ +
var foo = { baz: "bar" };
+"bar" in foo; // false
+
+"PI" in Math; // true
+"pi" in Math; // false
+
+ +

Поиск в Массивах

+ +

Будьте осторожны при использовании оператора для поиска {{jsxref("Array")}} объекты. the in оператор проверяет номер индекса, а не его значение.

+ +
var trees = ['redwood', 'bay', 'cedar', 'oak', 'maple'];
+3 in trees; // true
+"oak" in trees; // false
+ +

See also

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

{{jsSidebar("Errors")}}

+ +

Ниже, Вы найдете список ошибок, которые возвращает JavaScript. Эти ошибки могут буть полезны при отладке, но неполадки не всегда сразу понятны. Страницы ниже  предлагают дополнительную информацию об этих ошибках. Каждая ошибка это Объект на основании {{jsxref("Error")}} object, и имеет имя (name) и сообщение (message).

+ +

Ошибки отображенные в Web консоли могут содержать ссылку на соответствующую страницу ниже, чтобы помочь вам быстро понять проблему в коде.

+ +

Список ошибок

+ +

В представленном списке, каждая страница проименована (тип ошибки) и сообщение (более подробное удобочитаемое сообщение об ошибке). Вместе, эти два свойства послужат отправной точкой к пониманию и устранению ошибки. Для большей информации, перейдите по ссылкам ниже!

+ +

{{ListSubPages("/ru/docs/Web/JavaScript/Reference/Errors")}}

+ +

Смотрите также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщение

+ +
RangeError: invalid array length (Firefox)
+RangeError: Invalid array length (Chrome)
+RangeError: Invalid array buffer length (Chrome)
+
+ +

Тип ошибки

+ +

{{jsxref("RangeError")}}

+ +

Что пошло не так?

+ +

Ошибка, связанная с размером массива может произойти в следующих случаях:

+ + + +

Поскольку свойство length в  Array или ArrayBuffer представлено в виде беззнакового 32-битного целого числа (integer), значение этого свойства находится в диапазоне от 0 до 232-1.

+ +

В конструкторе (new Array()) первым аргументом является длина массива, поэтому при создании можно задать нужное значение. Так же, можно задать размер массива, обратившись к свойству length напрямую.

+ +

Примеры

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

 

+ +
[ 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)
+ +

 

+ +

Смотрите также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщение

+ +
ReferenceError: invalid assignment left-hand side
+
+ +

Тип ошибки

+ +

{{jsxref("ReferenceError")}}.

+ +

Что пошло не так?

+ +

Найдено неожиданное присваивание. Это может быть связано, например, с несоответствием оператора присваивания и оператора сравнения: один знак «=» присваивает значение переменной, а операторы «==» или «===» осуществляют сравнение.

+ +

Пример

+ +
if (Math.PI = 3 || Math.PI = 4) {
+  console.log('исключено!');
+}
+// ReferenceError: invalid assignment left-hand side
+
+var str = 'Привет, '
++= 'не меня ли '
++= 'ты ищешь?';
+// ReferenceError: invalid assignment left-hand side
+
+ +

В выражении if вам нужно использовать оператор сравнения («==»), а для конкатенации строк необходим оператор плюс («+»).

+ +
if (Math.PI == 3 || Math.PI == 4) {
+  console.log('исключено!');
+}
+
+var str = 'Привет '
++ 'с другой '
++ 'стороны!';
+
+ +

Смотрите также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщение

+ +
TypeError: недопустимое назначение const "x" (Firefox)
+TypeError: присвоение переменной константы. (Хромированный)
+TypeError: присвоение const (Edge)
+TypeError: повторное объявление const 'x' (IE)
+
+ +

Тип ошибки

+ +

{{jsxref("TypeError")}}

+ +

Что пошло не так?

+ +

Константа-это значение, которое не может быть изменено программой в обычном исполнении. Он не может быть изменен путем повторного назначения и не может быть повторно объявлен. В JavaScript, константы объявляются с помощью ключевого слова const.

+ +

Примеры

+ +

Недопустимое повторное объявление

+ +

Assigning a value to the same constant name in the same block-scope will throw.

+ +
const COLUMNS = 80;
+
+// ...
+
+COLUMNS = 120; // TypeError: invalid assignment to const `COLUMNS'
+ +

Решение проблемы

+ +

Есть несколько вариантов, чтобы исправить эту ошибку. Проверьте, что должно было быть достигнуто с рассматриваемой константой.

+ +

Переназавите

+ +

Если вы хотели объявить другую константу, выберите другое имя и переименовать. Это имя константы уже используется в этой области.

+ +
const COLUMNS = 80;
+const WIDE_COLUMNS = 120;
+ +

const, let или var?

+ +

Не используйте const, если вы не хотели объявлять константу. Возможно, вы хотели объявить переменную в области блока с let или глобальную переменную с var.

+ +
let columns = 80;
+
+// ...
+
+let columns = 120;
+
+ +

Обзор

+ +

Проверить, если вы находитесь в правильной области. Должна ли эта константа появиться в этой области или она должна была появиться в функции, например?

+ +
const COLUMNS = 80;
+
+function setupBigScreenEnvironment() {
+  const COLUMNS = 120;
+}
+ +

const и неизменность

+ +

Объявление const создает ссылку только для чтения на значение. Это не означает, что значение, которое он содержит, является неизменяемым, просто идентификатор переменной не может быть переназначен. Например, если содержимое является объектом, это означает, что сам объект все еще может быть изменен. Это означает, что нельзя изменить значение, хранящееся в переменной:

+ +
const obj = {foo: 'bar'};
+obj = {foo: 'baz'}; // TypeError: invalid assignment to const `obj'
+
+ +

Но можно изменить свойства в переменной:

+ +
obj.foo = 'baz';
+obj; // Object { foo: "baz" }
+ +

Смотрите также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщение

+ +
RangeError: invalid date (Firefox)
+RangeError: invalid time value (Chrome)
+RangeError: Provided date is not in valid range (Chrome)
+
+ +

Тип ошибки

+ +

{{jsxref("RangeError")}}

+ +

Что пошло не так?

+ +

Строка, ведущая к недопустимой дате, была выведена {{jsxref("Date")}} или {{jsxref("Date.parse()")}}.

+ +

Примеры

+ +

Неверные записи

+ +

Неопознанные строки или даты, содержащие недопустимые значения элементов в строках, отформатированных ISO, обычно возвращают NaN. Тем не менее, в зависимости от реализации, при несоответствии строкам формата ISO, может также возникнуть ошибка RangeError: invalid date, например в следующих случаях, в Firefox.

+ +
new Date('foo-bar 2014');
+new Date('2014-25-23').toISOString();
+new Date('foo-bar 2014').toString();
+
+ +

Это, без сомнения, вернёт {{jsxref("NaN")}} в Firefox:

+ +
Date.parse('foo-bar 2014'); // NaN
+ +

Для получения более подробной информации, смотрите документацию по {{jsxref("Date.parse()")}}

+ +

Верная запись

+ +
new Date('05 October 2011 14:48 UTC');
+ +

Смотрите также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Message

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

Тип ошибки

+ +

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

+ +

Что пошло нетак?

+ +

Глава цикла for...in содержит выражение инициализатора. То есть переменная объявляется и присваивается значение |for (var i = 0 in obj)|. В нестрогом режиме это объявление head игнорируется и ведет себя как |for (var i in obj)|. Однако в строгом режиме создается синтаксическая ошибка.

+ +

Примеры

+ +

Данный пример дает SyntaxError:

+ +
"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 могут не иметь инициализаторов
+
+ +

Правильный for-in loop

+ +

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

+ +
"use strict";
+
+var obj = {a: 1, b: 2, c: 3 };
+
+for (var i in obj) {
+  console.log(obj[i]);
+}
+
+ +

Итерация массива

+ +

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

+ +
var arr = [ "a", "b", "c" ]
+
+for (var i = 2; i < arr.length; i++) {
+  console.log(arr[i]);
+}
+
+// "c"
+ +

Смотри также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщение

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

Тип ошибки

+ +

{{jsxref("SyntaxError")}}

+ +

Что случилось?

+ +

В заголовке цикла for...of инициализируется переменная.  Иными словами, переменная объявляется и получает значение|for (var i = 0 of iterable)|. В подобных циклах это не допускается. Инициализировать переменные можно в циклах for.

+ +

Примеры

+ +

Неправильный цикл for-of

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

Правильный цикл for-of

+ +

Надо убрать инициализацию (value = 50) в заголовке цикла for-of. Если требуется использовать смещение 50, это можно сделать в теле цикла.

+ +
let iterable = [10, 20, 30];
+
+for (let value of iterable) {
+  value += 50;
+  console.log(value);
+}
+// 60
+// 70
+// 80
+
+ +

Смотри также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщение

+ +
TypeError: недопустимый операнд "instanceof" "x" (Firefox)
+TypeError: "x" не является функцией (Firefox)
+TypeError: правая часть "instanceof" не является объектом (Chrome)
+TypeError: правая часть "instanceof" не вызывается (Chrome)
+
+ +

Тип ошибки

+ +

{{jsxref("TypeError")}}

+ +

Что не так?

+ +

The instanceof operator ожидает, что операнды правой стороны будут объектом конструктора, т. е. объектом, который имеет свойство прототипа и является вызываемым.

+ +

Примеры

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

Чтобы исправить эти ошибки, необходимо либо заменить оператор instanceof оператором typeof, либо убедиться, что вместо результата его вычисления используется имя функции.

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

Смотрите также

+ + + +

Админ дрочит на постер ОБАМКИ и это случайный аргумент!

+ +

 

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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщение

+ +
TypeError: "x" не является итерационным (Firefox, Chrome)
+TypeError: 'x' не является функцией или ее возвращаемое значение не является итерационным (Chrome)
+
+ +

Тип ошибки

+ +

{{jsxref("TypeError")}}

+ +

Что пошло не так?

+ +

Значение, которое дается как правая сторона for...of или как аргумент функции, такой как {{jsxref("Promise.all")}} или {{jsxref("TypedArray.from")}}, не является итерационным объектом.  Повторяемое может быть, встроенный итератор типа, такие как {{jsxref("Array")}}, {{jsxref("String")}} или {{jsxref("Map")}}, генератор результатом, или объект, реализующий итератор протокол.

+ +

Примеры

+ +

Итерация по свойствам объекта

+ +

В JavaScript, {{jsxref("object")}} не повторяется, если они реализуют итерационный протокол . Поэтому нельзя использовать for...of для перебора свойств объекта.

+ +
var obj = { 'France': 'Paris', 'England': 'London' };
+for (let p of obj) { // TypeError: obj не является итерационным
+    // …
+}
+
+ +

Вместо этого вы должны использовать {{jsxref("Object.keys")}} или {{jsxref("Object.entries")}}, для итерации по свойствам или записям объекта.

+ +
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);
+
+
+
+ +

Другим вариантом для этого варианта использования может быть использование  {{jsxref("Map")}}:

+ +
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);
+
+ +

Итерация по генератору

+ +

Генераторы - это функции, вызываемые для создания итерационного объекта.

+ +
function* generate(a, b) {
+  yield a;
+  yield b;
+}
+
+for (let x of generate) // TypeError: генерация не является итерационной
+    console.log(x);
+
+ +

Если они не вызываются, то объект {{jsxref("Function")}}, соответствующий генератору, можно вызвать, но нельзя выполнить итерацию. Вызов генератора создает итерационный объект, который будет выполнять итерацию по значениям, полученным во время выполнения генератора.

+ +
function* generate(a, b) {
+    yield a;
+    yield b;
+}
+
+for (let x of generate(1,2))
+    console.log(x);
+
+ +

Смотрите также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщение

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

Тип ошибки

+ +

{{jsxref("SyntaxError")}}

+ +

Что пошло не так?

+ +

{{jsxref("JSON.parse()")}} обрабатывает (парсит) строку в формате JSON. Это строка должна соответствовать формату, иначе будет выведена ошибка, что был нарушен синтаксис.

+ +

Examples

+ +

JSON.parse() не допускает запятые

+ +

Метод JSON.parse() не разрешает использование, так называемых, trailling запятых.

+ +

Обе строки выдадут ошибку типа SyntaxError:

+ +
JSON.parse('[1, 2, 3, 4,]');
+JSON.parse('{"foo": 1,}');
+// SyntaxError JSON.parse: unexpected character
+// at line 1 column 14 of the JSON data
+
+ +

Необходимо убрать последние запятые в строках и тогда ошибки не будет:

+ +
JSON.parse('[1, 2, 3, 4]');
+JSON.parse('{"foo": 1}');
+ +

Названия свойств должны быть в двойных кавычках

+ +

Вы не можете использовать одинарные кавычки в именах свойств. Например, 'foo'.

+ +
JSON.parse("{'foo': 1}");
+// SyntaxError: JSON.parse: expected property name or '}'
+// at line 1 column 2 of the JSON data
+ +

Вместо этого необходимо написать "foo":

+ +
JSON.parse('{"foo": 1}');
+ +

Незначащие нули или плавающая точка без последующей цифры

+ +

Вы не можете использовать незначащие нули, например, 01. Плавающая точка должна всегда сопровождаться хотя бы одной цифрой после неё.

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

Вместо этого напишите просто 1 без нуля и используйте хотя бы одну цифру после точки:

+ +
JSON.parse('{"foo": 1}');
+JSON.parse('{"foo": 1.0}');
+
+ +

Смотрите также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщение

+ +
SyntaxError: malformed formal parameter (Firefox)
+
+ +

Тип ошибки

+ +

{{jsxref("SyntaxError")}}

+ +

Что пошло не так?

+ +

Существует конструктор Function(), который принимает в коде как минимум два аргумента. Последний аргумент – это исходный код создаваемой функции, а все остальные представляют собой список её аргументов.

+ +

Ошибка возникает, когда список аргументов по какой-то причине не является корректным. Возможно, вы случайно взяли в качестве имени аргумента ключевое слово, такое как if или var. Или в списке аргументов затерялся лишний знак пунктуации. Или вы случайно передали некорректное значение, например, число или объект.

+ +

OK, это решило мою проблему. Но почему нельзя было сразу так и сказать?

+ +

Нельзя не признать, что формулировка сообщения об ошибке немного странная. "Formal parameter" (формальный параметр) – это всего лишь необычный способ сказать "function argument" (аргумент функции). А слово "malformed" (уродливый, некорректный) мы используем потому, что все инженеры Firefox без ума от готических романов 19-го века.

+ +

Примеры

+ +

Код с ошибками

+ +
var f = Function('x y', 'return x + y;');
+// SyntaxError (пропуск запятой)
+
+var f = Function('x,', 'return x;');
+// SyntaxError (лишняя запятая)
+
+var f = Function(37, "alert('OK')");
+// SyntaxError (числа не могут использоваться в качестве имен аргументов)
+
+ +

Правильный код

+ +
var f = Function('x, y', 'return x + y;');  // правильная пунктуация
+
+var f = Function('x', 'return x;');
+
+// если есть возможность, не используйте Function - так гораздо быстрее:
+var f = function(x) { return x; };
+
+ +

Смотрите также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщение

+ +
URIError: malformed URI sequence (Firefox)
+URIError: URI malformed (Chrome)
+
+ +

Тип ошибки

+ +

{{jsxref("URIError")}}

+ +

Что пошло не так?

+ +

Декодирование или кодирование URI не было успешным. Аргумент переданный функциям {{jsxref("decodeURI")}}, {{jsxref("encodeURI")}}, {{jsxref("encodeURIComponent")}},  или {{jsxref("decodeURIComponent")}} был недопустимым, из-за этого функция не смогла выполнить кодирование или декодирование.

+ +

Примеры

+ +

Кодирование

+ +

Кодирование заменяет каждое вхождение конкретного символа одним, двумя, тремя или четырьмя управляющими последовательностями, представленными  стандартом UTF-8. {{jsxref("URIError")}} возникнет, при попытке кодирования суррогата, не являющегося частью high-low пары, например:

+ +
encodeURI('\uD800');
+// "URIError: malformed URI sequence"
+
+encodeURI('\uDFFF');
+// "URIError: malformed URI sequence"
+
+ +

Нормальная high-low пара. Например:

+ +
encodeURI('\uD800\uDFFF');
+// "%F0%90%8F%BF"
+ +

Декодирование

+ +

Декодирование заменяет каждую управляющую последовательность в закодированном URI компоненте символом, который она предстваляет. Если такого символа нет, возникнет ошибка:

+ +
decodeURIComponent('%E0%A4%A');
+// "URIError: malformed URI sequence"
+
+ +

Правильный вариант обычно выглядит так:

+ +
decodeURIComponent('JavaScript_%D1%88%D0%B5%D0%BB%D0%BB%D1%8B');
+// "JavaScript_шеллы"
+ +

Смотрите также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщение

+ +
SyntaxError: missing ] after element list
+
+ +

Тип ошибки

+ +

{{jsxref("SyntaxError")}}.

+ +

Что пошло не так?

+ +

Ошибка в синтаксисе инициализации массива. Скорее всего, пропущена закрывающая квадратная скобка ("]") или запятая (",").

+ +

Примеры

+ +

Незавершенный инициализатор массива

+ +
var list = [1, 2,
+
+var instruments = [
+  'Укулеле',
+  'Гитара',
+  'Пианино'
+};
+
+var data = [{foo: 'bar'} {bar: 'foo'}];
+
+ +

Правильные варианты:

+ +
var list = [1, 2];
+
+var instruments = [
+ 'Укулеле',
+ 'Гитара',
+ 'Пианино'
+];
+
+var data = [{foo: 'bar'}, {bar: 'foo'}];
+ +

Смотрите также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщение

+ +
SyntaxError: missing : after property id
+
+ +

Тип ошибки

+ +

{{jsxref("SyntaxError")}}

+ +

Что пошло не так?

+ +

При создании объекта с помощью инициализатора объекта, двоеточие (:) разделяет ключи и значения свойств объекта.

+ +
var obj = { propertyKey: 'value' };
+
+ +

Примеры

+ +

Двоеточие vs. знака равенства

+ +

Этот код не работает, потому что знак равенства не может быть использован при инициализации объекта.

+ +
var obj = { propertyKey = 'value' };
+// SyntaxError: missing : after property id
+
+ +

Корректно будет использовать двоеточие или квадратные скобки для назначения нового свойства после того, как объект уже был создан.

+ +
var obj = { propertyKey: 'value' };
+
+// or alternatively
+
+var obj = { };
+obj['propertyKey'] = 'value';
+
+ +

Пустые свойства

+ +

Вы не можете создать пустые свойства, подобные этому:

+ +
var obj = { propertyKey; };
+// SyntaxError: missing : after property id
+
+ +

Если вам необходимо задать свойство без значения, то вы можете использовать {{jsxref("null")}}.

+ +
var obj = { propertyKey: null };
+ +

Вычисляемые свойства

+ +

Если вы создаете ключ свойства из выражения, то вам необходимо использовать квадратные скобки. В противном случае имя свойства не будет вычислено:

+ +
var obj = { 'b'+'ar': 'foo' };
+// SyntaxError: missing : after property id
+
+ +

Поместите выражение в скобки []:

+ +
var obj = { ['b'+'ar']: 'foo' };
+ +

Смотрите также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщение

+ +
SyntaxError: missing } after function body
+
+ +

Тип ошибки

+ +

{{jsxref("SyntaxError")}}

+ +

Что пошло не так?

+ +

Допущена синтаксическая ошибка где-то в коде создания функции. Кроме того, проверьте, все ли закрывающие круглые и фигурные скобки расставлены в правильном порядке. Справиться с беспорядком поможет использование отступов, а также более аккуратное форматирование кода в целом.

+ +

Примеры

+ +

Забытая закрывающая фигурная скобка

+ +

Часто в коде функции может быть забыта фигурная скобка:

+ +
var charge = function() {
+  if (sunny) {
+    useSolarCells();
+  } else {
+    promptBikeRide();
+};
+
+ +

Правильный код:

+ +
var charge = function() {
+  if (sunny) {
+    useSolarCells();
+  } else {
+    promptBikeRide();
+  }
+};
+ +

Еще больше путаницы может внести использование {{Glossary("IIFE")}}, замыканий и прочих конструкций, где используется большое количество различных скобок:

+ +
(function() { if (true) { return false; } );
+
+ +

Зачастую облегчить поиск ошибок можно, проверив отступы еще раз или расставив их по-другому.

+ +
(function() {
+  if (true) {
+    return false;
+  }
+});
+ +

Смотрите также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщение

+ +
SyntaxError: missing } after property list
+
+ +

Тип ошибки

+ +

{{jsxref("SyntaxError")}}

+ +

Что пошло не так?

+ +

Произошла ошибка в синтаксисе инициализатора объекта. Причиной может быть отсутствующая фигурная скобка или, к примеру, недостающая запятая. Также проверьте, в правильном ли порядке расположены закрывающие круглые и фигурные скобки. Добаление отсупов или форматирование кода в более благоприятный вид также могут помочь разобраться в беспорядке.

+ +

Примеры

+ +

Забытая запятая

+ +

Зачастую в коде инициализатора объекта есть недостающая запятая:

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

Правильный вариант:

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

Смотрите также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщениe

+ +
SyntaxError: идентификатор начинается сразу после числового литерала
+
+ +

Тип ошибки

+ +

{{jsxref("SyntaxError")}}

+ +

Что пошло не так?

+ +

"Формальный параметр" - это причудливый способ сказать "параметр функции". В объявлении функции отсутствуют допустимые параметры. В объявлении функции параметры должны быть {{Glossary("Identifier", "identifiers")}}, не любое значение, как числа, строки или объекты. Объявление функций и вызов функций - это два отдельных шага. Объявления требуют идентификатор в качестве параметров, и только при вызове (призыва) функции, вы предоставляете значения, которые функция должна использовать.

+ +

В {{glossary("JavaScript")}}, идентификаторы могут содержать только буквенно-цифровые символы (или "$" или "_") и не могут начинаться с цифры. Идентификатор отличается от строки тем, что строка является данными, а идентификатор - частью кода.

+ +

Примеры

+ +

Параметры функции должны быть идентификаторами при настройке функции. Все эти объявления функций, которые обеспечивают значения их параметров:

+ +
function square(3) {
+  return number * number;
+};
+// SyntaxError: отсутствует формальный параметр
+
+function greet("Howdy") {
+  return greeting;
+};
+// SyntaxError: отсутствует формальный параметр
+
+function log({ obj: "value"}) {
+  console.log(arg)
+};
+// SyntaxError: отсутствует формальный параметр
+
+ +

В объявлениях функций необходимо использовать идентификаторы:

+ +
function square(number) {
+  return number * number;
+};
+
+function greet(greeting) {
+  return greeting;
+};
+
+function log(arg) {
+  console.log(arg)
+};
+ +

Затем можно вызвать эти функции с аргументами, которые вам нравятся:

+ +
square(2); // 4
+
+greet("Howdy"); // "Howdy"
+
+log({obj: "value"}); // Object { obj: "value" }
+
+ +

Смотрите также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщение

+ +
SyntaxError: missing = in const declaration (Firefox)
+SyntaxError: Missing initializer in const declaration (Chrome)
+
+ +

Тип ошибки

+ +

{{jsxref("SyntaxError")}}

+ +

Что пошло не так?

+ +

Константа это значение, которое не может быть изменено программой в процессе своего выполнения. Оно не может меняться посредством повторного назначения, и не может быть переопределено. В JavaScript константы объявляются с использованием ключевого слова const. Инициализация для константы является обязательной; то есть вы должны указать значение сразу же при её объявлении (что имеет смысл, учитывая, что оно не может быть изменено позже).

+ +

Примеры

+ +

Отсутствие инициализатора константы

+ +

В отличие от var или let, вы должны указать значение при объявлении const. В противном случае возникнет ошибка:

+ +
const COLUMNS;
+// SyntaxError: missing = in const declaration
+ +

Исправление ошибки

+ +

Существует несколько вариантов исправления этой ошибки. Проверьте, что должно быть достигнуто с помощью данной константы.

+ +

Добавление значения константы

+ +

Укажите значение константы при её объявлении.

+ +
const COLUMNS = 80;
+ +

const, let или var?

+ +

Не используйте const, если вы не хотели объявить константу. Возможно, вы подразумевали объявление переменную с блочной областью видимости с помощью let или глобальную переменную с помощью var. Оба варианта не требуют начального значения.

+ +
let columns;
+
+ +

Смотрите также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщение

+ +
SyntaxError: missing name after . operator
+
+ +

Тип ошибки

+ +

{{jsxref("SyntaxError")}}

+ +

Что пошло не так?

+ +

Оператор точки (.) используется для доступа к свойству. Необходимо указать имя свойства, к которому требуется получить доступ. Для доступа к вычисляемому свойству может потребоваться изменить доступ к свойству с точки на квадратные скобки. Это позволит вычислить выражение. Может быть, вы собирались сделать конкатенацию вместо этого? В этом случае необходим оператор plus ( + ). См. примеры ниже.

+ +

Примеры

+ +

Доступ к свойствам

+ +

Методы доступа к свойствам в JavaScript используют точку (.) или квадратные скобки ([]), но не оба. Квадратные скобки обеспечивают доступ к вычисляемым свойствам.

+ +
var obj = { foo: { bar: "baz", bar2: "baz2" } };
+var i = 2;
+
+obj.[foo].[bar]
+// SyntaxError: отсутсвует имя после. оператора
+
+obj.foo."bar"+i;
+// SyntaxError: отсутсвует имя после. оператора
+
+ +

Чтобы исправить этот код, необходимо получить доступ к объекту следующим образом:

+ +
obj.foo.bar; // "baz"
+//или же
+obj["foo"]["bar"]; // "baz"
+
+//вычисляемые свойства требуют квадратных скобок
+obj.foo["bar" + i]; // "baz2"
+
+ +

Доступ к свойствам против конкатенации

+ +

Если вы пришли из другого языка программирования (например, {{Glossary("PHP")}}), также легко перепутать оператор точки (.) и оператор конкатенации (+).

+ +
console.log("Hello" . "world");
+
+// SyntaxError: missing name after . operator
+ +

Вместо этого необходимо использовать знак плюс для объединения:

+ +
console.log("Hello" + "World");
+ +

Смотрите также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщение

+ +
Синтаксическая ошибка: пропущенный символ ")" после списка аргументов
+
+ +

Тип ошибки

+ +

{{jsxref("SyntaxError")}}.

+ +

Причина возникновения ошибки

+ +

Ошибка в вызове функции. Например, опечатка, пропущенный оператор, или некорректно обрамлённая кавычками строка.

+ +

Примеры

+ +

Из-за отсутствия оператора конкатенации "+", JavaScript ожидает аргумент функции log просто "PI: ". В этом случае, он должен быть заключен в закрывающие скобки.

+ +
console.log('PI: ' Math.PI);
+// SyntaxError: missing ) after argument list
+
+ +

Можно скорректировать вызов функции log добавлением оператора "+":

+ +
console.log('PI: ' + Math.PI);
+// "PI: 3.141592653589793"
+ +

Смотрите также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщение

+ +
SyntaxError: missing ) after condition
+
+ +

Тип ошибки

+ +

{{jsxref("SyntaxError")}}

+ +

Что пошло не так?

+ +

Произошла ошибка в написании условия if. В любом языке программирования код принимает решение выполнять действия в зависимости от входных параметров. Оператор if выполняет действия, если условие истинно. В JavaScript это условие должно заключаться в скобки после ключевого слова if, например:

+ +
if (condition) {
+  // сделать что-то если условие истинно
+}
+ +

Примеры

+ +

Это может быть просто недосмотр, внимательно проверьте все скобки в коде.

+ +
if (3 > Math.PI {
+  console.log("Что?");
+}
+
+// SyntaxError: missing ) after condition
+
+ +

Чтобы исправить ошибку вы должны поставить закрывающую скобку после условия.

+ +
if (3 > Math.PI) {
+  console.log("Что?");
+}
+ +

Если вы пришли из других языков программирования, то можете случайно использовать ключевые слова, которые в JavaScript обозначают что-то другое или вообще не имеют смысла.

+ +
if (done is true) {
+ console.log("мы сделали!");
+}
+
+// SyntaxError: missing ) after condition
+
+ +

Вместо этого используйте нужный оператор сравнения. Для примера:

+ +
if (done === true) {
+ console.log("мы сделали!");
+}
+ +

Смотрите также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщение

+ +
SyntaxError: Expected ';' (Edge)
+SyntaxError: missing ; before statement (Firefox)
+ +

Тип ошибки

+ +

{{jsxref("SyntaxError")}}.

+ +

Что пошло не так?

+ +

Отсутствует точка с запятой (;). Инструкции JavaScript должны заканчиваться точкой с запятой. В некоторых случаях имеет место автоматическая вставка точки с запятой (ASI), но в данном случае необходимо её поставить, чтобы JavaScript мог правильно обработать исходный код.

+ +

Часто эта ошибка является следствием другой ошибки, например, некорректного экранирования строк или неправильного использования var. Кроме того, где-то может быть слишком много скобок. Тщательно проверьте синтаксис при возникновении этой ошибки.

+ +

Примеры

+ +

Неэкранированные строки

+ +

Эта ошибка может легко возникнуть, если не экранировать строку правильным образом, из-за чего JavaScript будет рассматривать это место как конец строки. Например:

+ +
var foo = 'Tom's bar';
+// SyntaxError: missing ; before statement
+ +

Можно использовать двойные кавычки или экранировать апостроф:

+ +
var foo = "Tom's bar";
+var foo = 'Tom\'s bar';
+
+ +

Объявление свойств через var

+ +

Нельзя объявить свойство объекта или массива с помощью var.

+ +
var obj = {};
+var obj.foo = 'привет'; // SyntaxError missing ; before statement
+
+var array = [];
+var array[0] = 'всем'; // SyntaxError missing ; before statement
+
+ +

Ключевое слово var необходимо опустить:

+ +
var obj = {};
+obj.foo = 'привет';
+
+var array = [];
+array[0] = 'всем';
+
+ +

Неправильные ключевые слова

+ +

При переходе с другого языка программирования частой проблемой является использование ключевых слов, которые в JavaScript имеют другое значение или ничего не означают.

+ +
def print(info){
+  console.log(info);
+}; // SyntaxError missing ; before statement
+ +

Вместо def используйте function:

+ +
function print(info){
+  console.log(info);
+};
+ +

Смотрите также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщение

+ +
TypeError: Object.create requires more than 0 arguments
+TypeError: Object.setPrototypeOf requires more than 1 argument
+TypeError: Object.defineProperties requires more than 0 arguments
+
+ +

Тип ошибки

+ +

{{jsxref("TypeError")}}.

+ +

Что пошло не так?

+ +

Ошибка в вызове функции. Необходимо передать больше аргументов.

+ +

Примеры

+ +

Метод {{jsxref("Object.create()")}} требует хотя бы один аргумент, а {{jsxref("Object.setPrototypeOf()")}} минимум двух:

+ +
var obj = Object.create();
+// TypeError: Object.create requires more than 0 arguments
+
+var obj = Object.setPrototypeOf({});
+// TypeError: Object.setPrototypeOf requires more than 1 argument
+
+ +

Вы можете исправить это, установив {{jsxref("null")}} в качестве прототипа, например:

+ +
var obj = Object.create(null);
+
+var obj = Object.setPrototypeOf({}, null);
+ +

Смотрите также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщение

+ +
RangeError: repeat count must be non-negative (Firefox)
+RangeError: Invalid count value (Chrome)
+
+ +

Тип ошибки

+ +

{{jsxref("RangeError")}}

+ +

Что пошло не так?

+ +

Был использован метод {{jsxref("String.prototype.repeat()")}}, с параметром count, указывающим количество повторений строки. Параметр может принимать значения между 0 и положительной {{jsxref("Infinity")}}, и не может быть отрицательным числом. Диапазон допустимых значений может быть описан следующим образом: [0, + ∞).

+ +

Примеры

+ +

Неверно

+ +
'abc'.repeat(-1); // RangeError 
+ +

Верно

+ +
'abc'.repeat(0);    // ''
+'abc'.repeat(1);    // 'abc'
+'abc'.repeat(2);    // 'abcabc'
+'abc'.repeat(3.5);  // 'abcabcabc' (count will be converted to integer)
+
+ +

Смотрите также

+ + 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 +--- +
{{JSSidebar("Errors")}}
+ +

Сообщения

+ +
TypeError: недопустимый дескриптор свойства {x} (Edge)
+TypeError: "x" не является ненулевым объектом (Firefox)
+TypeError: описание свойства должно быть объектом: "x" (Chrome)
+TypeError: недопустимое значение, используемое в слабом наборе (Chrome)
+
+
+ +

Тип ошибки

+ +

{{jsxref("TypeError")}}

+ +

Что пошло не так?

+ +

Объект где-то ожидался и не был предоставлен. {{jsxref("null")}} не является объектом и не будет работать. Вы должны обеспечить надлежащий объект в данной ситуации.

+ +

Примеры

+ +

Ожидается дескриптор свойства

+ +

Когда такие методы, как {{jsxref("Object.create()")}} или {{jsxref("object.defineProperty()")}} и {{jsxref("object.defineProperties()")}} используются, дополнительный параметр дескриптора ожидает объект дескриптора свойства. Если не указать объект (например, просто число), возникнет ошибка:

+ +
Object.defineProperty({}, 'key', 1);
+// TypeError: 1 is not a non-null object
+
+Object.defineProperty({}, 'key', null);
+// TypeError: null is not a non-null object
+
+ +

Допустимый объект дескриптора свойства может выглядеть следующим образом:

+ +
Object.defineProperty({}, 'key', { value: 'foo', writable: false });
+
+ +

СлабаяКарта и СлабыйСет объектов требуют ключей объектов

+ +

{{jsxref("WeakMap")}} and {{jsxref("WeakSet")}} объекты хранят ключи объектов. Вы не можете использовать другие типы ключей.

+ +
var ws = new WeakSet();
+ws.add('foo');
+// TypeError: "foo" is not a non-null object
+ +

Создание обьекта вместо:

+ +
ws.add({foo: 'bar'});
+ws.add(window);
+
+ +

Смотрите также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщение

+ +
TypeError: Unable to get property {x} of undefined or null reference (Edge)
+TypeError: null has no properties (Firefox)
+TypeError: undefined has no properties (Firefox)
+
+ +

Тип ошибки

+ +

{{jsxref("TypeError")}}.

+ +

Что пошло не так?

+ +

У {{jsxref("null")}} и {{jsxref("undefined")}} нет свойств, к которым можно было бы обратиться.

+ +

Примеры

+ +
null.foo;
+// TypeError: null has no properties
+
+undefined.bar;
+// TypeError: undefined has no properties
+
+ +

Смотрите также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщение

+ +
SyntaxError: missing variable name (Firefox)
+SyntaxError: Unexpected token = (Chrome)
+ +

Тип ошибки

+ +

{{jsxref("SyntaxError")}}

+ +

Что пошло не так?

+ +

У переменной отсутствует имя. Скорее всего, дело в синтаксической ошибке в вашем коде. Может, где-то неправильно стоит запятая, или у вас возникли трудности с именованием. Прекрасно вас понимаем! Придумывать названия – очень непросто.

+ +

Примеры

+ +

Отсутствует имя переменной

+ +
var = "foo";
+
+ +

Придумывать хорошие имена переменным очень тяжело, все мы с таким сталкивались.

+ +
var ohGodWhy = "foo";
+ +

Зарезервированные ключевые слова не могут использоваться как имена переменных

+ +

Есть несколько имен, которые являются зарезервированными ключевыми словами. Их нельзя использовать. Увы :(

+ +
var debugger = "whoop";
+// SyntaxError: missing variable name
+
+ +

Объявление нескольких переменных

+ +

При объявлении нескольких переменных обращайте особое внимание на запятые. Нет ли лишних запятых? Не поставили ли вы случайно запятые вместо точек с запятыми?

+ +
var x, y = "foo",
+var x, = "foo"
+
+var first = document.getElementById('раз'),
+var second = document.getElementById('два'),
+
+// SyntaxError: missing variable name
+
+ +

Исправленный вариант:

+ +
var x, y = "foo";
+var x = "foo";
+
+var first = document.getElementById('раз');
+var second = document.getElementById('два');
+ +

Массивы

+ +

Литералам {{jsxref("Array")}} в JavaScript необходимы квадратные скобки вокруг значений. Такое не сработает:

+ +
var arr = 1,2,3,4,5;
+// SyntaxError: missing variable name
+
+ +

А вот так будет правильно:

+ +
var arr = [1,2,3,4,5];
+ +

Смотрите также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщения

+ +
TypeError: не удается удалить не настраиваемый элемент массива (Firefox)
+TypeError: не удается удалить свойство '2' из [массива объектов] (Chrome)
+
+ +

Тип ошибки

+ +

{{jsxref("TypeError")}}

+ +

Что пошло не так?

+ +

 

+ +

Была сделана попытка сократить длину массива, но один из элементов массива не изменяется. При укорочении массив, элементы за новую длину массива будут удалены, не в этой ситуации.

+ +

Настраиваемый атрибут определяет, можно ли удалить свойство из объекта и можно ли изменить его атрибуты (отличные от доступных для записи).

+ +

Обычно свойства объекта, созданного инициализатором массива, настраиваются. Однако, например, при использовании {{jsxref("Object.defineProperty()")}}, свойство не настраивается по умолчанию.

+ +

 

+ +

Examples

+ +

Не настраиваемые свойства, созданные Object.defineProperty

+ +

The {{jsxref("Object.defineProperty()")}} создает не настраиваемые свойства по умолчанию, если они не указаны как настраиваемые.

+ +
var arr = [];
+Object.defineProperty(arr, 0, {value: 0});
+Object.defineProperty(arr, 1, {value: "1"});
+
+arr.length = 1;
+// TypeError: не удается удалить не настраиваемый элемент массива
+
+ +

Вам нужно будет установить элементы как конфигурируемые, если вы собираетесь сократить массив.

+ +
var arr = [];
+Object.defineProperty(arr, 0, {value: 0, configurable: true});
+Object.defineProperty(arr, 1, {value: "1", configurable: true});
+
+arr.length = 1;
+
+ +

Seal-ed Arrays (Герметичные Массивы)

+ +

The {{jsxref("Object.seal()")}} функция помечает все существующие элементы как не настраиваемые.

+ +
var arr = [1,2,3];
+Object.seal(arr);
+
+arr.length = 1;
+// TypeError: can't delete non-configurable array element
+
+ +

Вам или нужно извлечь {{jsxref("Object.seal()")}} позвоните или сделайте копию. В случае копирования сокращение копии массива не изменяет длину исходного массива.

+ +
var arr = [1,2,3];
+Object.seal(arr);
+
+// Скопируйте исходный массив, чтобы сократить копию
+var copy = Array.from(arr);
+copy.length = 1;
+// arr.length == 3
+
+ +

Смотрите также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщение

+ +
RangeError: Invalid code point {0} (Edge)
+RangeError: {0} is not a valid code point (Firefox)
+RangeError: Invalid code point {0} (Chrome)
+
+ +

Тип ошибки

+ +

{{jsxref("RangeError")}}

+ +

Что пошло не так?

+ +

Метод {{jsxref("String.fromCodePoint()")}} выдает ошибку, если ему было передано значение {{jsxref("NaN")}}, отрицательное целое число (-1), нецелое число (5.4) или значение, которое превышает 0x10FFFF (1114111).

+ +

Кодовая точка (code point) – это значение в кодовом пространстве Unicode, то есть диапазон целых чисел от 0 до 0x10FFFF.

+ +

Примеры

+ +

Нерабочие случаи

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

Рабочие случаи

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

Смотрите также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщение

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

Тип ошибки

+ +

{{jsxref("TypeError")}}

+ +

Что пошло не так?

+ +

Была попытка использовать объект или переменную как конструктор, однако этот объект или переменная - не конструктор. Смотрите {{Glossary("constructor")}}  или new operator, чтобы получить больше информации о том, что такое конструктор.

+ +

Существует множество глобальных объектов, таких как {{jsxref("String")}} или {{jsxref("Array")}}, которые можно построить с использованием new. Однако, некоторые глобальные объекты - нельзя, т.к. их свойства и методы статичны. Следующие стандартные встроенные объекты JavaScript - не конструкторы: {{jsxref("Math")}}, {{jsxref("JSON")}}, {{jsxref("Symbol")}}, {{jsxref("Reflect")}}, {{jsxref("Intl")}}, {{jsxref("SIMD")}}, {{jsxref("Atomics")}}.

+ +

Функции-генераторы также не могут быть использованы как конструкторы.

+ +

Примеры

+ +

Неправильное использование

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

Конструктор "car" (автомобиль)

+ +

Представьте, что Вы хотите создать тип объекта для автомобилей. Вы хотите, чтобы этот тип объектов назывался car, и Вы хотите, чтобы были свойства для производителя, модели и года выпуска. Чтобы сделать это, Вы должны написать следующую функцию:

+ +
function Car(make, model, year) {
+  this.make = make;
+  this.model = model;
+  this.year = year;
+}
+
+ +

Теперь Вы можете создать объект, который называется mycar (мой автомобиль) следующим образом:

+ +
var mycar = new Car('Лада', 'Самара', 1993);
+ +

В Обещаниях (Promises)

+ +

В случае, когда возвращается незамедлительно разрешенное или незамедлительно отклоненное Обещание, Вам не нужно создавать новое Обещание new Promise(...) и работать с ним.

+ +

Это неправильно (конструктор Обещания вызывается неправильно) и будет вызывать исключение TypeError: this is not a constructor:

+ +
return new Promise.resolve(true);
+
+ +

Вместо этого используйте статические методы - Promise.resolve() или Promise.reject() :

+ +
// Это допустимо, но слишком длинно, в этом нет необходимости:
+return new Promise((resolve, reject) => { resolve(true); })
+
+// Вместо этого, возвращайте статический метод:
+return Promise.resolve(true);
+return Promise.reject(false);
+
+ +

Смотрите также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщение

+ +
TypeError: "x" is not a function
+
+ +

Тип ошибки

+ +

{{jsxref("TypeError")}}.

+ +

Что пошло не так?

+ +

Была сделана попытка вызвать значение как функцию, но оно на самом деле не является функцией. Некоторый код ожидает, что вы предоставите функцию, но этого не происходит.

+ +

Возможно, есть ошибка в имени функции? Возможно, объект, метод которого вы вызываете, не содержит в себе этой функции? Для примера, JavaScript объекты не имеют map функции, а JavaScript Array - имеют.

+ +

Есть множество функций нуждающихся в функциях обратного вызова. Вы должны будете предоставить функцию обратного вызова для того, чтобы эти методы работы правильно:

+ + + +

Примеры

+ +

Ошибки в имени функции

+ +

В данном случае, случающемся очень часто, есть опечатка в имени метода:

+ +
var x = document.getElementByID("foo");
+// TypeError: document.getElementByID is not a function
+
+ +

Корректное имя функции - getElementById:

+ +
var x = document.getElementById("foo");
+
+ +

Функция вызвана с неверным объектом

+ +

Для некоторых методов, вы должны предоставить функцию обратного вызова и она будет работать только на корректных объектах.  В этом примере используется {{jsxref("Array.prototype.map()")}}, в котором {{jsxref("Array")}} будет работать только с массивами.

+ +
var obj = { a: 13, b: 37, c: 42 };
+
+obj.map(function(num) {
+  return num * 2;
+});
+
+// TypeError: obj.map is not a function
+ +

Использование с массивом:

+ +
var numbers = [1, 4, 9];
+
+numbers.map(function(num) {
+  return num * 2;
+});
+
+// Array [ 2, 8, 18 ]
+
+ +

Смотри также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщение

+ +
ReferenceError: "x" is not defined
+
+ +

Тип ошибки

+ +

{{jsxref("ReferenceError")}}.

+ +

Что пошло не так?

+ +

Есть несуществующая переменная, которая ссылается куда-то. Эта переменная должна быть объявлена, или вам необходимо убедиться, что она доступна в вашем текущем скрипте или области исходного кода ( {{Glossary("scope")}}).

+ +
+

Заметка: При использовании стороних библиотек (такие как jQuery), убедитесь, что они загружаются до того, как вы используете переменные "$". Поместите тег {{HTMLElement("script")}} загружающий вашу библиотеку до того как вы будете использовать ее.

+
+ +

Примеры

+ +

Переменная не объявлена

+ +
foo.substring(1); // ReferenceError: foo is not defined
+
+ +

Переменная "Foo" не определена где-либо. Она должна быть в какой-то строке, так чтобы {{jsxref("String.prototype.substring()")}} метод начал работать.

+ +
var foo = "bar";
+foo.substring(1); // "ar"
+ +

Неправильная зона доступности

+ +

Переменная должна быть доступна в текущем контексте исполнения. Переменные, определенные внутри функции не могут быть доступны из любой точки за пределами функции, так как переменная определена только в области видимости самой функции.

+ +
function numbers () {
+  var num1 = 2,
+      num2 = 3;
+  return num1 + num2;
+}
+
+console.log(num1); // ReferenceError num1 is not defined.
+ +

Тем не менее, функция может получить доступ ко всем переменным и функциям, определенным в области видимости, в которой она определена.  Другими словами, функция, определенная в глобальной области может получить доступ ко всем переменным, определенным в глобальном масштабе.

+ +
var num1 = 2,
+    num2 = 3;
+
+function numbers () {
+  return num1 + num2;
+}
+
+console.log(num1); // 2
+ +

Смотрите также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщение

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

Тип ошибки

+ +

{{jsxref("RangeError")}}

+ +

Что пошло не так?

+ +

В одном из следующих методов был использован аргумент, значение которого лежит вне допустимых интервалов:

+ + + +

Допустимые значения для аргументов данных методов обычно лежат в диапазоне от 0 до 20 (или 21), однако спецификация ECMAScript допускает его расширение.

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
МетодFirefox (SpiderMonkey)Chrome, Opera (V8)
{{jsxref("Number.prototype.toExponential()")}}от 0 до 100от 0 до 20
{{jsxref("Number.prototype.toFixed()")}}от -20 до 100от 0 до 20
{{jsxref("Number.prototype.toPrecision()")}}от 1 до 100от 1 до 21
+ +

Примеры

+ +

Примеры некорректного кода

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

Примеры правильного кода

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

Смотрите также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщение

+ +
Error: Permission denied to access property "x"
+
+ +

Тип ошибки

+ +

{{jsxref("Error")}}.

+ +

Что пошло не так?

+ +

Была попытка получить доступ к объекту, на который у вас нет разрешения. Вероятно, это элемент {{HTMLElement("iframe")}}, для которого вы нарушили правило ограничения домена.

+ +

Примеры

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

Смотрите также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщения

+ +
TypeError: назначение свойств только для чтения не допускается в строгом режиме (Edge)
+TypeError: "x" доступен только для чтения (Firefox)
+TypeError: 0 доступен только для чтения (Firefox)
+TypeError: не удается назначить только для чтения свойство "x" из #<объект> (Chrome)
+TypeError: не удается назначить только для чтения свойство '0' [массив объектов] (Chrome)
+
+ +

Тип ошибки

+ +

{{jsxref("TypeError")}}

+ +

Что пошло не так?

+ +

Назначенное свойство глобальной переменной или объекта является свойством только для чтения. (Технически это свойство данных, недоступное для записи.)

+ +

Эта ошибка возникает только в коде строгого режима. В нестрогом коде назначение игнорируется.

+ +

 

+ +

Примеры

+ +

недействительные кейсы

+ +

Свойства только для чтения не очень распространены, но их можно создать с помощью {{jsxref("Object.defineProperty()")}} или {{jsxref("Object.freeze()")}}.

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

В JavaScript также встроено несколько свойств, доступных только для чтения. Возможно, вы пытались переопределить математическую константу.

+ +
'use strict';
+Math.PI = 4;  // TypeError
+
+ +

 

+ +

Прости, ты не можешь этого сделать.

+ +

Глобальная переменная undefined также доступна только для чтения, поэтому вы не можете заставить замолчать печально известную ошибку "undefined is not a function:

+ +

 

+ +
'use strict';
+undefined = function() {};  // TypeError: "undefined" доступен только для чтения
+
+ +

Правильные кейсы

+ +
'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 (анатомически маловероятно, хотя)
+
+ +

Смотрите также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщение

+ +
SyntaxError: redeclaration of formal parameter "x" (Firefox)
+SyntaxError: Identifier "x" has already been declared (Chrome)
+
+ +

Тип ошибки

+ +

{{jsxref("SyntaxError")}}

+ +

Что пошло не так?

+ +

Одно и то же имя переменной сначала использовано в качестве параметра, а потом объявлено еще раз в теле функции с помощью оператора присваивания let. В JavaScript не допустимо переопределение переменной в рамках области видимости функции или блока при помощи let.

+ +

Примеры

+ +

В данном случае переменная "arg" переопределяет аргумент:

+ +
function f(arg) {
+  let arg = 'foo';
+}
+
+// SyntaxError: redeclaration of formal parameter "arg"
+
+ +

Если вы хотите изменить значение переменной "arg" в теле функции, это можно сделать, но для этого не требуется объявлять эту же переменную еще раз. Иначе говоря, ключевое слово let можно опустить. Если же вы хотите создать новую переменную, необходимо ее переименовать, поскольку в противном случае она вступает в конфликт с уже существующим параметром функции.

+ +
function f(arg) {
+  arg = 'foo';
+}
+
+function f(arg) {
+  let bar = 'foo';
+}
+
+ +

Примечания о совместимости

+ + + +

Смотрите также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщение

+ +
TypeError: уменьшение пустого массива без начального значения
+
+ +

Тип ошибки

+ +

{{jsxref("TypeError")}}

+ +

Что пошло не так?

+ +

В JavaScript существует несколько уменьщающих функций :

+ + + +

Эти функции дополнительно принимают значение initialValue (которое будет использоваться в качестве первого аргумента для первого вызова обратного вызова). Однако если начальное значение не указано, будет использоваться первый элемент {{jsxref("Array")}} или {{jsxref("TypedArray")}} в качестве начального значения. Эта ошибка возникает, когда предоставляется пустой массив, так как в этом случае не может быть возвращено начальное значение.

+ +

Примеры

+ +

Неправильные примеры

+ +

Эта проблема часто возникает в сочетании с фильтром ({{jsxref("Array.prototype.filter()")}}, {{jsxref("TypedArray.prototype.filter()")}}) который удалит все элементы списка. Таким образом, не оставляя ни одного для использования в качестве начального значения.

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

Аналогично, та же проблема может возникнуть, если в селекторе есть опечатка или непредвиденное количество элементов в списке:

+ +
var names = document.getElementsByClassName("names");
+var name_list = Array.prototype.reduce.call(names, (acc, name) => acc + ", " + name);
+
+ +

Правильные примеры

+ +

 

+ +

Эти проблемы могут быть решены двумя различными способами.

+ +

Один из способов - фактически предоставить initialValue в качестве нейтрального элемента оператора, например 0 для сложения, 1 для умножения или пустую строку для объединения

+ +

 

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

Другим способом было бы два для обработки пустого случая, или перед вызовом reduce, или в обратном вызове после добавления неожиданного фиктивного начального значения.

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

Смотрите также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщение

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

Тип ошибки

+ +

{{jsxref("SyntaxError")}}

+ +

Что пошло не так?

+ +

Ключевые слова используются в качестве идентификаторов. Ключевые слова зарезервированные и в строгом и обычном режиме:

+ + + +

Следующие ключевые слова резервируются для кода, который выполняется только в строгом режиме (strict mode):

+ + + +

Примеры

+ +

Строгий и нестрогий режимы резервирования ключевых строк

+ +

Идентификатор enum зарезервирован.

+ +
var enum = { RED: 0, GREEN: 1, BLUE: 2 };
+// SyntaxError: enum is a reserved identifier
+
+ +

Резервирование большего количества идентификаторов с использованием строгого режима.

+ +
"use strict";
+var package = ["potatoes", "rice", "fries"];
+// SyntaxError: package is a reserved identifier
+
+ +

Вам необходимо переименовать следующие переменные.

+ +
var colorEnum = { RED: 0, GREEN: 1, BLUE: 2 };
+var list = ["potatoes", "rice", "fries"];
+ +

Обновление старых браузеров

+ +

Например, если вы используете старый браузер, в котором еще не реализована функция let или class, вам следует перейти на более новую версию браузера, которая поддерживает данные языковые функции.

+ +
"use strict";
+class DocArchiver {}
+
+// SyntaxError: class is a reserved identifier
+// (появится только в старых браузерах, например, Firefox 44 и старше)
+
+ +

Смотрите также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщение

+ +
RangeError: repeat count must be less than infinity and not overflow maximum string size (Firefox)
+
+RangeError: Invalid count value (Chrome)
+
+ +

Тип ошибки

+ +

{{jsxref("RangeError")}}

+ +

Что пошло не так?

+ +

Был использован метод {{jsxref("String.prototype.repeat()")}}, с параметром count, указывающим количество повторений строки. Параметр может принимать значения между 0 и положительной {{jsxref("Infinity")}}, и не может быть отрицательным числом. Диапазон допустимых значений может быть описан следующим образом: [0, + ∞).

+ +

Полученная строка также не может превышать максимальный размер строки, который может отличаться в различных движках JavaScript. В Firefox (SpiderMonkey) максимальный размер строки составляет 228 -1 (0xFFFFFFF).

+ +

Примеры

+ +

Неверно

+ +
'abc'.repeat(Infinity); // RangeError
+'a'.repeat(2**28);      // RangeError
+
+ +

Верно

+ +
'abc'.repeat(0);    // ''
+'abc'.repeat(1);    // 'abc'
+'abc'.repeat(2);    // 'abcabc'
+'abc'.repeat(3.5);  // 'abcabcabc' (count will be converted to integer)
+
+ +

Смотрите также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщение

+ +
Warning: unreachable code after return statement (Firefox)
+
+ +
Предупреждение: недоступный код после оператора return (Firefox)
+
+ +

Тип ошибки

+ +

Предупреждение

+ +

Что пошло не так?

+ +

Недоступный код после оператора return может возникнуть в следующих ситуациях:

+ + + +

Когда присутствует выражение после оператора return, то выдаётся предупреждение о том, что код программы после return недоступен, то есть он никогда не запустится и не выполнится.

+ +

Почему нужно ставить точку с запятой после оператора return? В случае оператора return без точки с запятой, совсем неясно, хотел ли разработчик вернуть результат, вычисляемый в следующей строке, или же он хочет остановиться сейчас и выйти из подпрограммы. Предупреждение указывает на неопределённость результата работы оператора return.

+ +

Предупреждение не появится для оператора return без точки с запятой, если за данной строкой следуют:

+ + + +

Примеры

+ +

Неверные варианты

+ +
function f() {
+  var x = 3;
+  x += 4;
+  return x;   //return завершает функцию немедленно,
+  x -= 3;     //поэтому эта строка никогда не запустится; она недоступна
+}
+
+function f() {
+  return     //эта строка трактуется как завершение функции оператором `return;`,
+    3 + 4;   //поэтому происходит выход из функции, и эта строка не выполнится
+}
+
+ +

Верные варианты

+ +
function f() {
+  var x = 3;
+  x += 4;
+  x -= 3;
+  return x;  //OK: return находится после всех остальных выражений
+}
+
+function f() {
+  return 3 + 4  //OK: return без точки с запятой и вычисляемое выражение находятся на одной строке
+}
+
+ +

Смотрите также

+ + + + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщение

+ +

 

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

Перевод:

+ +
Edge:
+Не удается применить строгий режим к функциям со списком, содержащим сложные параметры
+
+Firefox:
+Ошибка синтаксиса: "use strict" не допускается в функции с параметром по умолчанию
+Ошибка синтаксиса: "use strict" не допускается в функции с rest параметром
+Ошибка синтаксиса: "use strict" не допускается в функции с параметром, использующим деструктуризацию
+
+Chrome:
+Ошибка синтаксиса: недопустимая директива 'use strict' в функции со списком, содержащим сложные параметры
+
+ +

Тип ошибки

+ +

{{jsxref("SyntaxError")}}.

+ +

Что пошло не так?

+ +

Директива "use strict" была использована в верхней части функции, которая имеет один из следующих параметров:
+  

+ + + +

Директива "use strict" не допускается в верхней части таких функций согласно спецификации ECMAScript.

+ +

Примеры

+ +

Функция заявления

+ +

В этом случае функция sum имеет параметры по умолчанию a=1 и b=2:

+ +
function sum(a = 1, b = 2) {
+  //SyntaxError: использовать "use strict" не разрешено в функции с параметром по умолчанию
+  'use strict';
+  return a + b;
+}
+
+ +

Если функция должна находиться в строгом режиме, и весь скрипт или заключающая функция также в порядке, чтобы быть в строгом режиме, вы можете переместить директиву "use strict" за пределы функции:

+ +
'use strict';
+function sum(a = 1, b = 2) {
+  return a + b;
+}
+
+ +

Функция выражения

+ +

Выражение функции может использовать еще один обходной путь:

+ +
var sum = function sum([a, b]) {
+  // SyntaxError: "use strict" не допускается в функции с параметром деструктурирования
+  'use strict';
+  return a + b;
+};
+
+ +

Это может быть преобразовано в следующее выражение:

+ +
var sum = (function() {
+  'use strict';
+  return function sum([a, b]) {
+    return a + b;
+  };
+})();
+
+ +

Указательная функция

+ +

Если функция со стрелкой должна получить доступ к переменной this, можно использовать функцию со стрелкой в качестве функции включения:

+ +
var callback = (...args) => {
+  // SyntaxError: "use strict" не допускается в функции с параметром rest
+  'use strict';
+  return this.run(args);
+};
+
+ +

Это может быть преобразовано в следующее выражение:

+ +
var callback = (() => {
+  'use strict';
+  return (...args) => {
+    return this.run(args);
+  };
+})();
+
+ +

Смотри также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщение

+ +
InternalError: too much recursion
+
+ +

Тип ошибки

+ +

{{jsxref("InternalError")}}.

+ +

Что пошло не так?

+ +

Функция, вызывающая сама себя, называется рекурсивной функцией. В некотором смысле рекурсия аналогична циклу. Оба выполняют один и тот же код несколько раз, и оба требуют условия (чтобы избежать бесконечного цикла или, вернее, бесконечной рекурсии в этом случае). Когда функция вызывается рекурсивно слишком много раз или бесконечно, JavaScript выдаёт эту ошибку.

+ +

Примеры

+ +

Функция выполняется рекурсивно 10 раз, в соответствии с условием выхода:

+ +
function loop(x) {
+  if (x >= 10) // "x >= 10" это условие выхода
+    return;
+  // do stuff
+  loop(x + 1); // рекурсивный вызов
+}
+loop(0);
+ +

В условии установлено слишком большое значение, не будет работать:

+ +
function loop(x) {
+  if (x >= 1000000000000)
+    return;
+  // do stuff
+  loop(x + 1);
+}
+loop(0);
+
+// InternalError: too much recursion
+ +

Смотрите также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщение

+ +
TypeError: invalid arguments (Firefox)
+ +

Тип ошибки

+ +

{{jsxref("TypeError")}}

+ +

Что не так?

+ +

Конструкторы типизированных массивов требуют либо

+ + + +

чтобы создать новый типизированный массив. Другие аргументы конструктора не создают допустимый типизированный массив.

+ +

Примеры

+ +

Типизированные массивы, например {{jsxref("Uint8Array")}}, не могут быть построены из строки. На самом деле строки вообще не могут быть в типизированных массивах.

+ +
var ta = new Uint8Array("nope");
+// TypeError: invalid arguments
+
+ +

Различные способы создания допустимого {{jsxref("Uint8Array")}}:

+ +
 // 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]
+
+ +

Смотрите также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщение

+ +
ReferenceError: assignment to undeclared variable "x" (Firefox)
+ReferenceError: "x" is not defined (Chrome)
+ReferenceError: Variable undefined in strict mode (Edge)
+
+ +

Тип ошбки

+ +

{{jsxref("ReferenceError")}} предупреждение только в строгом режиме.

+ +

Что пошло не так?

+ +
+
Значению присвоена необъявленная переменная. Другими словами, было задание без ключевого слова var. Существуют некоторые различия между объявленными и необъявленными переменными, что может привести к неожиданным результатам, поэтому JavaScript представляет ошибку в строгом режиме.
+ +
 
+
+ +

Три примечания о объявленных и необъявленных переменных:

+ + + +

Более подробную информацию и примеры см. На странице справки Переменных

+ +

Errors about undeclared variable assignments occur in strict mode code only. In non-strict code, they are silently ignored.

+ +

Примеры

+ +

Неправильно

+ +

В этом случае переменная "bar" является необъявленной переменной.

+ +
function foo() {
+  'use strict';
+  bar = true;
+}
+foo(); // ReferenceError: assignment to undeclared variable bar
+
+ +

Правильно

+ +

Чтобы сделать "bar" объявленной переменной, вы можете добавить перед ней ключевое слово var .

+ +
function foo() {
+  'use strict';
+  var bar = true;
+}
+foo();
+ +

Смотрите также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщение

+ +
ReferenceError: reference to undefined property "x" (Firefox)
+
+ +

Тип ошибки

+ +

(только в Firefox) Предупреждение {{jsxref("ReferenceError")}}, возникает, только если значение настройки javascript.options.strict равно true.

+ +

Что пошло не так?

+ +

Совершена попытка обращения к свойству объекта, которое не определено. Существует два способа обращения к свойствам: обратитесь к странице справочника {{jsxref("Operators/Property_Accessors", "property accessors", 0, 1)}} для более подробной информации.

+ +

Примеры

+ +

Случаи возникновения ошибки

+ +

В данном примере свойство bar не определено, поэтому возникнет ошибка ReferenceError.

+ +
var foo = {};
+foo.bar; // ReferenceError: reference to undefined property "bar"
+
+ +

Правильный код

+ +

Чтобы избежать ошибки, потребуется либо задать для объекта свойство bar, либо проверить существование данного свойства, прежде чем обращаться к нему. Одним из способов это сделать является использование метода {{jsxref("Object.prototype.hasOwnProperty()")}}:

+ +
var foo = {};
+
+// Задать свойство bar
+
+foo.bar = 'moon';
+console.log(foo.bar); // "moon"
+
+// Убедиться, что свойство bar существует, прежде чем обращаться к нему
+
+if (foo.hasOwnProperty('bar')) {
+  console.log(foo.bar);
+}
+ +

Смотрите также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщение

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

Тип ошибки

+ +

{{jsxref("SyntaxError")}}

+ +

Что пошло не так?

+ +

Вместо определенной конструкции языка было использовано что-то другое. Возможно, просто опечатка.

+ +

Примеры

+ +

Ожидаемое выражение

+ +

Недопустимыми являются, к примеру, запятые после элементов цепочки выражений.

+ +
for (let i = 0; i < 5,; ++i) {
+  console.log(i);
+}
+// SyntaxError: expected expression, got ';'
+
+ +

Правильным вариантом будет убрать запятую или добавить еще одно выражение:

+ +
for (let i = 0; i < 5; ++i) {
+  console.log(i);
+}
+
+ +

Недостаточно скобок

+ +

Иногда можно потерять скобки при использовании if:

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

На первый взгляд кажется, что скобки расставлены правильно, но обратите внимание, что || находится не в скобках. Необходимо заключить || в скобки:

+ +
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;
+  }
+}
+
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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщение

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

Тип ошибки

+ +

{{jsxref("TypeError")}}.

+ +

Что случилось?

+ +

Встречен неожиданный тип. Это часто случается со значениями {{jsxref("null")}} или {{jsxref("undefined")}}.

+ +

Так же, некоторые методы, такие как {{jsxref("Object.create()")}} или {{jsxref("Symbol.keyFor()")}}, требуют определенный тип, который должен быть предоставлен.

+ +

Примеры

+ +

Недопустимые случаи

+ +
// Случаи 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
+
+ +

Решение проблемы

+ +

Что бы исправить ошибку пустого указателя вы можете использовать оператор typeof.

+ +
if (typeof foo !== 'undefined') {
+  // Теперь мы знаем, что foo определено.
+}
+ +

Смотрите также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщение

+ +
SyntaxError: ожидаемый идентификатор (Edge)
+SyntaxError: оператор функции требует имя [Firefox]
+SyntaxError: непредвиденный токен ( [Chrome]
+
+ +

Тип ошибки

+ +

{{jsxref("SyntaxError")}}

+ +

Что пошло не так?

+ +

В коде есть оператор function, для которого требуется имя. Вам нужно будет проверить, как определены функции и нужно ли предоставить для них имя, или если рассматриваемая функция должна быть выражением функции, {{Glossary("IIFE")}}, или если код функции вообще правильно размещен в этом контексте.

+ +

Примеры

+ +

Операторы vs выражения

+ +

Оператор функции (или объявление функции) требует имя, это не будет работать:

+ +
function () {
+  return 'Hello world';
+}
+// SyntaxError: function statement requires a name
+
+ +

Вы можете использовать выражение функции (назначять) вместо:

+ +
var greet = function() {
+  return 'Hello world';
+};
+ +

Или, ваша функция возможно, предназначена для IIFE (немедленно вызываемое выражение функции), которое является функцией, которая запускается, как только она определена. В этом случае вам понадобится еще несколько брекетов:

+ +
(function () {
+
+})();
+ +

Помеченные функции

+ +

При использовании меток функций после ключевого слова function все равно потребуется указать имя функции. Это не работает:

+ +
function Greeter() {
+  german: function () {
+    return "Moin";
+  }
+}
+// SyntaxError: оператор функции требует имя
+
+ +

Это будет работать, например так:

+ +
function Greeter() {
+  german: function g() {
+    return "Moin";
+  }
+}
+ +

Методы обьекта

+ +

Если вы намеревались создать метод объекта, вам нужно будет создать объект. Тогда допустим следующий синтаксис без имени после ключевого слова function.

+ +
var greeter = {
+  german: function () {
+    return "Moin";
+  }
+};
+ +

Синтаксис вызова

+ +

Кроме того, проверьте синтаксис при использовании обратных вызовов. Скобки и запятые может получить трудно легко.

+ +
promise.then(
+  function() {
+    console.log("success");
+  });
+  function() {
+    console.log("error");
+}
+// SyntaxError: function statement requires a name
+
+ +

как бы было правильно:

+ +
promise.then(
+  function() {
+    console.log("success");
+  },
+  function() {
+    console.log("error");
+  }
+);
+
+ +

Смотрите также

+ + 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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщение

+ +
SyntaxError: незадействованная строковая константа (Edge)
+SyntaxError: незадействованный строковый литерал (Firefox)
+
+ +

Тип ошибки

+ +

{{jsxref("SyntaxError")}}

+ +

Что пошло не так?

+ +

Где-то есть unterminated {{jsxref("String")}}. Строковые литералы должны быть заключены в одинарные (') или двойные (") кавычки. JavaScript не делает различий между строками в одинарных и двойных кавычках. Escape-последовательности работают в строках, созданных с одинарными или двойными кавычками. Чтобы исправить эту ошибку, проверьте:

+ + + +

Примеры

+ +

Несколько строк

+ +

Вы не можете разделить строку на несколько строк, как в JavaScript:

+ +
var longString = 'Это очень длинная строка, которая нуждается
+                  перенос через несколько строк, потому что
+                  в противном случае мой код нечитаем.";
+// SyntaxError: незавершонный строковый литерал
+ +

Вместо этого используйте оператор+, обратную косую черту или литералы шаблона. Вариант оператора + выглядит следующим образом:

+ +
var longString = ' Это очень длинная строка, которая нуждается в ' +
+                 'чтобы обернуть через несколько строк, потому что' +
+                 -иначе мой код будет нечитабелен.";
+
+ +

Или можно использовать символ обратной косой черты ("\") в конце каждой строки, чтобы указать, что строка будет продолжаться в следующей строке. Убедитесь, что после обратной косой черты нет пробелов или других символов (кроме разрыва строки) или отступа; в противном случае это не сработает. Эта форма выглядит следующим образом:

+ +
var longString = 'Это очень длинная строка, которая нуждается \
+                переносе через несколько строк, потому что \
+                  в противном случае мой код нечитаем.";
+
+ +

Еще одна возможность-использовать шаблонные литералы, поддерживаемые в средах ECMAScript 2015:

+ +
var longString = `Это очень длинная строка, которая нуждается
+                  в переносе через несколько строк, потому что
+                  в противном случае мой код нечитаем.`;
+ +

Смотрите также

+ + diff --git "a/files/ru/web/javascript/reference/errors/\320\277\320\265\321\200\320\265\320\274\320\265\320\275\320\275\321\213\320\265_\321\201\320\272\321\200\321\213\320\262\320\260\321\216\321\202_\320\260\321\200\320\263\321\203\320\274\320\265\320\275\321\202/index.html" "b/files/ru/web/javascript/reference/errors/\320\277\320\265\321\200\320\265\320\274\320\265\320\275\320\275\321\213\320\265_\321\201\320\272\321\200\321\213\320\262\320\260\321\216\321\202_\320\260\321\200\320\263\321\203\320\274\320\265\320\275\321\202/index.html" new file mode 100644 index 0000000000..85ad505cbd --- /dev/null +++ "b/files/ru/web/javascript/reference/errors/\320\277\320\265\321\200\320\265\320\274\320\265\320\275\320\275\321\213\320\265_\321\201\320\272\321\200\321\213\320\262\320\260\321\216\321\202_\320\260\321\200\320\263\321\203\320\274\320\265\320\275\321\202/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 +--- +
{{jsSidebar("Errors")}}
+ +

Сообщение

+ +
TypeError: переменная "x" повторно объявляет аргумент (Firefox)
+
+ +

Тип ошибки

+ +

{{jsxref("TypeError")}} предупреждение только в строгом режиме.

+ +

Что пошло не так?

+ +

 

+ +

То же имя переменной происходит в качестве параметра функции, и затем повторно объявляется с помощью назначения var в теле функции. Это может быть конфликт имен, поэтому JavaScript предупреждает об этом.

+ +

Эта ошибка возникает как предупреждение только в коде строгого режима. В нестрогом коде повторное объявление игнорируется.

+ +

 

+ +

Примеры

+ +

Неправильные примеры

+ +

В этом случае переменная "arg" объявляет аргумент повторно.

+ +
'use strict';
+
+function f(arg) {
+  var arg = 'foo';
+}
+
+ +

Правильные примеры

+ +

Чтобы исправить это предупреждение, оператор var можно просто опустить, так как переменная уже существует. В других случаях можно переименовать параметр функции или имя переменной. 

+ +
'use strict';
+
+function f(arg) {
+  arg = 'foo';
+}
+
+ +

Смотрите также

+ + -- cgit v1.2.3-54-g00ecf