recursal/MDN huggingface dataset:
SyntaxError: "0"-prefixed octal literals and octal escape seq. are deprecated
=============================================================================

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

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

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

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

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

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

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

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


```js
"use strict";

03;

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

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


```js
"use strict";

"\251";

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

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

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


```js
0o3;
```


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


```js
"\xA9";
```

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

* Lexical grammar(Лексическая грамматика)
* Warning: 08/09 is not a legal ECMA-262 octal constant (en-US)(Предупреждение: 08/09 нет законной восьмиштырьковой константы ECMA-262)
TypeError: can't redefine non-configurable property "x"
=======================================================

Исключение "can't redefine non-configurable property" возникает, когда в коде переопределяется ненастраиваемое свойство.

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

TypeError: Cannot redefine property: "x" (V8-based)
TypeError: can't redefine non-configurable property "x" (Firefox)
TypeError: Attempting to change value of a readonly property. (Safari)
```

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

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

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

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

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

The `Object.defineProperty()` создаёт ненастраиваемые свойства, если они не помечены как настраиваемые.


```js
const obj = Object.create({});
Object.defineProperty(obj, "foo", { value: "bar" });

Object.defineProperty(obj, "foo", { value: "baz" });
// TypeError: can't redefine non-configurable property "foo"
```


Вам нужно будет пометить свойство "foo" как настраиваемое (`configurable: true`), если вы собираетесь переопределить его позже в коде.


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

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

* [[Configurable]]
* `Object.defineProperty()`
SyntaxError: missing } after property list
==========================================

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

SyntaxError: missing } after property list
```

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

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

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

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

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

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


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


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


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

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

* Инициализация объектов
TypeError: cyclic object value
==============================

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

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

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

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

Сам по себе JSON-формат не поддерживает ссылки на объекты (не смотря на то что существует IETF, который позволяет значению JSON ссылаться на другое значение в JSON-документе), поэтому `JSON.stringify()` не пытаеться их анализировать и терпит неудачу при попытке сделать это.

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

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


```js
var circularReference = { otherData: 123 };
circularReference.myself = circularReference;
```


`JSON.stringify()` закончится неудачей


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


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

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


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

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

* `JSON.stringify`
* cycle.js – вводит две функции, JSON.decycle и JSON.retrocycle, что даёт возможность кодирования и декодирования циклических структур и групп обеспечения доступности баз данных в расширенный и обратно совместимый формат JSON.
TypeError: "x" is not a function
================================

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

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

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

`TypeError`.

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

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

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

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

* Когда работаете с `Array` или `TypedArray` объектами:
    + `Array.prototype.every()`, `Array.prototype.some()`, `Array.prototype.forEach()`, `Array.prototype.map()`, `Array.prototype.filter()`, `Array.prototype.reduce()`, `Array.prototype.reduceRight()`, `Array.prototype.find()`
* Когда работаете с `Map` (en-US) и `Set` объектами:
    + `Map.prototype.forEach()` (en-US) и `Set.prototype.forEach()`
Примеры
-------

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

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


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


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


```js
var x = document.getElementById("foo");
```

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

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


```js
var obj = { a: 13, b: 37, c: 42 };

obj.map(function (num) {
  return num \* 2;
});

// TypeError: obj.map is not a function
```


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


```js
var numbers = [1, 4, 9];

numbers.map(function (num) {
  return num \* 2;
});

// Array [ 2, 8, 18 ]
```

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

* Functions
SyntaxError: missing name after . operator(отсутствует имя после. оператора)
============================================================================

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

SyntaxError: missing name after . operator
```

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

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

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

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

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

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


```js
var obj = { foo: { bar: "baz", bar2: "baz2" } };
var i = 2;

obj.[foo].[bar]
// SyntaxError: отсутствует имя после оператора .

obj.foo."bar"+i;
// SyntaxError: отсутствует имя после оператора .
```


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


```js
obj.foo.bar; // "baz"
//или же
obj["foo"]["bar"]; // "baz"

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

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

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


```js
console.log("Hello" . "world");

// SyntaxError: missing name after . operator
```


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


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

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

* Property accessors(доступ к свойствам)
ReferenceError: reference to undefined property "x"
===================================================

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

ReferenceError: reference to undefined property "x" (Firefox)
```

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

(только в Firefox) Предупреждение `ReferenceError`, возникает, только если значение настройки `javascript.options.strict` равно `true`.

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

Совершена попытка обращения к свойству объекта, которое не определено. Существует два способа обращения к свойствам: обратитесь к странице справочника property accessors для более подробной информации.

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

### Случаи возникновения ошибки

В данном примере свойство `bar` не определено, поэтому возникнет ошибка `ReferenceError`.


```js
var foo = {};
foo.bar; // ReferenceError: reference to undefined property "bar"
```

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

Чтобы избежать ошибки, потребуется либо задать для объекта свойство `bar`, либо проверить существование данного свойства, прежде чем обращаться к нему. Одним из способов это сделать является использование метода `Object.prototype.hasOwnProperty()`:


```js
var foo = {};

// Задать свойство bar

foo.bar = "moon";
console.log(foo.bar); // "moon"

// Убедиться, что свойство bar существует, прежде чем обращаться к нему

if (foo.hasOwnProperty("bar")) {
  console.log(foo.bar);
}
```

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

* property accessors
SyntaxError: a declaration in the head of a for-of loop can't have an initializer
=================================================================================

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

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

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

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

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

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

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


```js
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, это можно сделать в теле цикла.


```js
let iterable = [10, 20, 30];

for (let value of iterable) {
  value += 50;
  console.log(value);
}
// 60
// 70
// 80
```

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

* `for...of`
* `for...in` – В строгом режиме инициализация тоже не разрешается (SyntaxError: for-in loop head declarations may not have initializers)
* `for` – Инициализация во время итерации разрешена.
SyntaxError: applying the 'delete' operator to an unqualified name is deprecated
================================================================================

Исключение "applying the 'delete' operator to an unqualified name is deprecated" возникает только в строгом режиме при попытке удалить переменную с помощью оператора `delete`.

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

SyntaxError: Delete of an unqualified identifier in strict mode. (V8-based)
SyntaxError: applying the 'delete' operator to an unqualified name is deprecated (Firefox)
SyntaxError: Cannot delete unqualified property 'a' in strict mode. (Safari)
```

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

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

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

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

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

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

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

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

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


```js
"use strict";

var x;

// ...

delete x;

// SyntaxError: применение оператора 'delete' к неполному имени является устаревшим
```


Чтобы освободить содержимое переменной, задайте для неё значение ``null``:


```js
"use strict";

var x;

// ...

x = null;

// X может быть собран "мусор"
```

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

* Оператор `delete`
* Управление памятью
* TypeError: property "x" is non-configurable and can't be deleted
SyntaxError: redeclaration of formal parameter "x"
==================================================

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

SyntaxError: redeclaration of formal parameter "x" (Firefox)
SyntaxError: Identifier "x" has already been declared (Chrome)
```

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

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

Одно и то же имя переменной сначала использовано в качестве параметра, а потом объявлено ещё раз в теле функции с помощью оператора присваивания `let`. В JavaScript не допустимо переопределение переменной в рамках области видимости функции или блока при помощи `let`.

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

В данном случае переменная "arg" переопределяет аргумент:


```js
function f(arg) {
  let arg = "foo";
}

// SyntaxError: redeclaration of formal parameter "arg"
```


Если вы хотите изменить значение переменной "arg" в теле функции, это можно сделать, но для этого не требуется объявлять эту же переменную ещё раз. Иначе говоря, ключевое слово `let` можно опустить. Если же вы хотите создать новую переменную, необходимо её переименовать, поскольку в противном случае она вступает в конфликт с уже существующим параметром функции.


```js
function f(arg) {
  arg = "foo";
}

function f(arg) {
  let bar = "foo";
}
```

Примечания о совместимости
--------------------------

* В версиях Firefox до Firefox 49, у данной ошибки был тип `TypeError` (Firefox bug 1275240).
Смотрите также
--------------

* `let`
* `const`
* `var`
* Объявления переменных в Руководстве по JavaScript
RangeError: argument is not a valid code point
==============================================

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

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

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

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

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

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

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

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


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

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


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

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

* `String.fromCodePoint()`
TypeError: invalid 'instanceof' operand 'x'(Тип ошибки: неверный 'экземпляром' операнд 'х')
===========================================================================================

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

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

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

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

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

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


```js
"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`, либо убедиться, что вместо результата его вычисления используется имя функции.


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

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

* `instanceof` operator
* `typeof` operator
SyntaxError: missing variable name
==================================

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

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

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

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

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

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

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


```js
var = "foo";
```


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


```js
var ohGodWhy = "foo";
```

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

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


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

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

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


```js
var x, y = "foo",
var x, = "foo"

var first = document.getElementById('раз'),
var second = document.getElementById('два'),

// SyntaxError: missing variable name
```


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


```js
var x,
  y = "foo";
var x = "foo";

var first = document.getElementById("раз");
var second = document.getElementById("два");
```

### Массивы

Литералам `Array` в JavaScript необходимы квадратные скобки вокруг значений. Такое не сработает:


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


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


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

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

* Хорошие имена переменных (на англ.)
* `var`
* Объявления переменных в Руководстве по JavaScript
TypeError: can't delete non-configurable array element(Тип ошибки:не удаётся удалить настраиваемый элемент массива)
===================================================================================================================

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

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

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

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

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

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

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

Examples
--------

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

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


```js
var arr = [];
Object.defineProperty(arr, 0, { value: 0 });
Object.defineProperty(arr, 1, { value: "1" });

arr.length = 1;
// TypeError: не удаётся удалить не настраиваемый элемент массива
```


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


```js
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 `Object.seal()` функция помечает все существующие элементы как не настраиваемые.


```js
var arr = [1, 2, 3];
Object.seal(arr);

arr.length = 1;
// TypeError: can't delete non-configurable array element
```


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


```js
var arr = [1, 2, 3];
Object.seal(arr);

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

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

* [[Configurable]]
* `Array.length`
* `Object.defineProperty()`
* `Object.seal()`