recursal/MDN huggingface dataset:
SyntaxError: function statement requires a name(функция оператор требует имя)
=============================================================================

Сообщение
---------
```

SyntaxError: ожидаемый идентификатор (Edge)
SyntaxError: оператор функции требует имя [Firefox]
SyntaxError: непредвиденный токен ( [Chrome]
```

Тип ошибки
----------

`SyntaxError`Что пошло не так?
-----------------

В коде есть оператор function, для которого требуется имя. Вам нужно будет проверить, как определены функции и нужно ли предоставить для них имя, или если рассматриваемая функция должна быть выражением функции, IIFE, или если код функции вообще правильно размещён в этом контексте.

Примеры
-------

### Операторы vs выражения

Оператор функции (или объявление функции) требует имя, это не будет работать:


```js
function () {
  return 'Hello world';
}
// SyntaxError: function statement requires a name
```


Вы можете использовать выражение функции (назначат) вместо:


```js
var greet = function () {
  return "Hello world";
};
```


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


```js
(function () {})();
```

### Помеченные функции

При использовании меток функций после ключевого слова function всё равно потребуется указать имя функции. Это не работает:


```js
function Greeter() {
  german: function () {
    return "Moin";
  }
}
// SyntaxError: оператор функции требует имя
```


Это будет работать, например так:


```js
function Greeter() {
  german: function g() {
    return "Moin";
  }
}
```

### Методы объекта

Если вы намеревались создать метод объекта, вам нужно будет создать объект. Тогда допустим следующий синтаксис без имени после ключевого слова function.


```js
var greeter = {
  german: function () {
    return "Moin";
  },
};
```

### Синтаксис вызова

Кроме того, внимательно следите за синтаксисом при использовании колбэков. Очень легко забыть скобку или запятую.


```js
promise.then(
  function() {
    console.log("success");
  });
  function() {
    console.log("error");
}
// SyntaxError: function statement requires a name
```


как бы было правильно:


```json
promise.then(
  function() {
    console.log("success");
  },
  function() {
    console.log("error");
  }
);
```

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

* Functions in the JavaScript Guide (функции в javascript"e гайд)
* Оператор функции
* Выражение функции
* IIFE
* label
TypeError: "x" is (not) "y"
===========================

Сообщение
---------
```

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

Тип ошибки
----------

`TypeError`.

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

Встречен неожиданный тип. Это часто случается со значениями `null` или `undefined`.

Так же, некоторые методы, такие как `Object.create()` или `Symbol.keyFor()`, требуют определённый тип, который должен быть предоставлен.

Примеры
-------

### Недопустимые случаи


```js
// Случаи 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.


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

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

* `undefined`
* `null`
SyntaxError: for-in loop head declarations may not have initializers
====================================================================

Исключение "for-in loop head declarations may not have initializers" возникает в строгом режиме, когда в управляющей конструкции цикла for...in присваивается значение переменной-итератору, например `for (var i = 0 in obj)`. В нестрогом режиме также будет возникать исключение, если переменная-итератор объявлена через `const`, например `for (const i = 0 in obj)`.

Сообщение
---------
```

SyntaxError: for-in loop variable declaration may not have an initializer. (V8-based)
SyntaxError: for-in loop head declarations may not have initializers (Firefox)
SyntaxError: a lexical declaration in the head of a for-in loop can't have an initializer (Firefox)
SyntaxError: Cannot assign to the loop variable inside a for-in loop header. (Safari)
```

Тип ошибки
----------

`SyntaxError` только в строгом режиме.

Что не так?
-----------

Управляющая конструкция цикла for...in содержит выражение инициализации. Другими словами, при создании цикла присваивается значение переменной-итератору. В нестрогом режиме эта конструкция игнорируется, а поведение равно `for (var i = 0 in obj)`. В строгом же режиме, будет ошибка синтаксиса `SyntaxError`. Однако, даже в нестрогом режиме присвоение значения переменной-итератору, объявленной через `const`, вроде `for (const i = 0 in obj)`, приведёт к ошибке синтаксиса `SyntaxError`.

Примеры
-------

Данный пример приведёт к ошибке синтаксиса:


```js
"use strict";

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

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

// SyntaxError: for-in loop head declarations may not have initializers
```

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

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


```js
"use strict";

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

for (const i in obj) {
  console.log(obj[i]);
}
```

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

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


```js
const arr = ["a", "b", "c"];

for (let i = 2; i < arr.length; i++) {
  console.log(arr[i]);
}

// "c"
```

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

* `for...in`
* `for...of`
* `for`
SyntaxError: test for equality (==) mistyped as assignment (=)?(тест на равенство (==) опечатка как присваивание (=)?)
======================================================================================================================

Сообщения
---------
```

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

Тип ошибки
----------

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

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

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

Примеры
-------

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

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


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


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


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


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


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

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

* `if...else`
* Comparison operators (en-US)
RangeError: repeat count must be non-negative
=============================================

Сообщение
---------
```

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

Тип ошибки
----------

`RangeError`Что пошло не так?
-----------------

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

Примеры
-------

### Неверно


```js
"abc".repeat(-1); // RangeError
```

### Верно


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

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

* `String.prototype.repeat()`
SyntaxError: Using //@ to indicate sourceURL pragmas is deprecated. Use //# instead
===================================================================================

Сообщение
---------
```

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

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

Тип ошибки
----------

Предупреждение о том, что произошла ошибка `SyntaxError`. Выполнение скрипта не будет остановлено.

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

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

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

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

Примеры
-------

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

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


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

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

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


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


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


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

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

* Как использовать карты кода – документация Firefox Tools (en-US)
* Введение в карты кода – HTML5 rocks
SyntaxError: return not in function
===================================

Сообщение
---------
```

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

Тип ошибки
----------

`SyntaxError`.

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

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

Примеры
-------


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

// SyntaxError: return not in function
```


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


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

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

* `return`
* `yield`
SyntaxError: unterminated string literal
========================================

Ошибка JavaScript «незавершённый строковый литерал» возникает, когда где-то встречается незавершённый строковый литерал. Строковые литералы должны быть заключены в одинарные (`'`) или двойные (`"`)) кавычки.

Сообщение
---------
```

SyntaxError: Unterminated string constant (Edge)
SyntaxError: unterminated string literal (Firefox)
```

Тип ошибки
----------

`SyntaxError`Что пошло не так?
-----------------

Где-то есть незавершённый строковый литерал. Строковые литералы должны быть заключены в одинарные (`'`) или двойные (`"`) кавычки. JavaScript не делает различий между строками в одинарных и двойных кавычках. Экранирование символов работают в строках, созданных и с одинарными и с двойными кавычками.

Чтобы исправить эту ошибку, проверьте:

* у вас есть открывающая и закрывающая кавычки (обе одинарные или обе двойные) для строкового литерала,
* вы правильно экранировали строковый литерал,
* строковый литерал не разбивается на несколько строк.
Примеры
-------

### Несколько строк

Вы не можете разделить строку на несколько строк, как в JavaScript:


```js
var longString = "Это очень длинная строка, которую
                  необходимо разбивать на несколько строк,
                  потому что иначе её трудно читать.";
// SyntaxError: unterminated string literal
```


Вместо этого используйте оператор +, обратную косую черту или шаблонные строки.

Вариант с оператором `+` выглядит следующим образом:


```js
const longString =
  "Это очень длинная строка, которую " +
  "необходимо разбивать на несколько строк, " +
  "потому что иначе её трудно читать.";
```


Или можно использовать символ обратной косой черты ("\") в конце каждой строки, чтобы указать, что текст будет продолжаться на следующей строке. Убедитесь, что после обратной косой черты нет пробелов или других символов (кроме разрыва строки) или отступа, иначе это не сработает. Такой подход выглядит следующим образом:


```js
const longString =
  "Это очень длинная строка, которую \
необходимо разбивать на несколько строк, \
потому что иначе её трудно читать.";
```


Ещё одна возможность — использовать шаблонные строки:


```js
const longString = `Это очень длинная строка, которую 
необходимо разбивать на несколько строк, 
потому что иначе её трудно читать.`;
```

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

* Строковый литерал
* Шаблонные строки
TypeError: More arguments needed
================================

Сообщение
---------
```

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

Тип ошибки
----------

`TypeError`.

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

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

Примеры
-------

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


```js
var obj = Object.create();
// TypeError: Object.create requires more than 0 arguments

var obj = Object.setPrototypeOf({});
// TypeError: Object.setPrototypeOf requires more than 1 argument
```


Вы можете исправить это, установив `null` в качестве прототипа, например:


```js
var obj = Object.create(null);

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

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

* Функции
SyntaxError: illegal character
==============================

Сообщение
---------
```

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

Тип ошибки
----------

`SyntaxError`Что пошло не так?
-----------------

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

Примеры
-------

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

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


```js
“This looks like a string”;
// SyntaxError: illegal character

42 – 13;
// SyntaxError: illegal character
```


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


```js
"This is actually a string";

42 - 13;
```

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

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


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


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


```js
var colors = ["#000", "#333", "#666"];
```

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

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


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


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


```js
var foo = 'bar';​<200b>
```

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

* Lexical grammar
RangeError: invalid date
========================

Сообщение
---------
```

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

Тип ошибки
----------

`RangeError`Что пошло не так?
-----------------

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

Примеры
-------

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

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


```js
new Date("foo-bar 2014");
new Date("2014-25-23").toISOString();
new Date("foo-bar 2014").toString();
```


Это, без сомнения, вернёт `NaN` в Firefox:


```js
Date.parse("foo-bar 2014"); // NaN
```


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

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


```js
new Date("05 October 2011 14:48 UTC");
```

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

* `Date`
* `Date.prototype.parse()`
* `Date.prototype.toISOString()`
TypeError: can't define property "x": "obj" is not extensible
=============================================================

Сообщение
---------
```

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

Тип ошибки
----------

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

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

Примеры
-------

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


```js
"use strict";

var obj = {};
Object.preventExtensions(obj);

obj.x = "foo";
// TypeError: can't define property "x": "obj" is not extensible
```


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


```js
var obj = {};
Object.preventExtensions(obj);

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


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


```js
"use strict";

var obj = {};
obj.x = "foo"; // add property first and only then prevent extensions

Object.preventExtensions(obj);
```

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

* `Object.preventExtensions()`
ReferenceError: assignment to undeclared variable "x"
=====================================================

Сообщение
---------
```

ReferenceError: assignment to undeclared variable "x" (Firefox)
ReferenceError: "x" is not defined (Chrome)
ReferenceError: Variable undefined in strict mode (Edge)
```

Тип ошибки
----------

`ReferenceError` предупреждение только в строгом режиме.

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

Значению присвоена необъявленная переменная. Другими словами, было задание без ключевого слова var. Существуют некоторые различия между объявленными и необъявленными переменными, что может привести к неожиданным результатам, поэтому JavaScript представляет ошибку в строгом режиме.

Три примечания о объявленных и необъявленных переменных:

* Объявленные переменные ограничены в контексте выполнения, в котором они объявлены. Необъявленные переменные всегда глобальны.
* Объявленные переменные создаются до выполнения любого кода. Необъявленные переменные не существуют до тех пор, пока не будет выполняться присвоение им кода.
* Объявленные переменные - это неконфигурируемое свойство контекста их выполнения (функция или глобальная). Необъявленные переменные настраиваются (например, могут быть удалены).

Более подробную информацию и примеры см. На странице справки `Переменных`

Errors about undeclared variable assignments occur in strict mode code only. In non-strict code, they are silently ignored.

Примеры
-------

### Неправильно

В этом случае переменная "bar" является необъявленной переменной.


```js
function foo() {
  "use strict";
  bar = true;
}
foo(); // ReferenceError: assignment to undeclared variable bar
```

### Правильно

Чтобы сделать "bar" объявленной переменной, вы можете добавить перед ней ключевое слово `var` .


```js
function foo() {
  "use strict";
  var bar = true;
}
foo();
```

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

* режим Strict
ReferenceError: invalid assignment left-hand side
=================================================

Сообщение
---------
```

ReferenceError: invalid assignment left-hand side
```

Тип ошибки
----------

`ReferenceError`.

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

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

Пример
------


```js
if (Math.PI = 3 || Math.PI = 4) {
  console.log('исключено!');
}
// ReferenceError: invalid assignment left-hand side

var str = 'Привет, '
+= 'не меня ли '
+= 'ты ищешь?';
// ReferenceError: invalid assignment left-hand side
```


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


```js
if (Math.PI == 3 || Math.PI == 4) {
  console.log("исключено!");
}

var str = "Привет " + "с другой " + "стороны!";
```

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

* Операторы присваивания (en-US)
* Операторы сравнения