recursal/MDN huggingface dataset:
TypeError: "x" is not a non-null object(Тип ошибки: "x" не является ненулевым объектом)
=======================================================================================

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

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

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

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

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

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

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

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


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

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


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


```js
Object.defineProperty({}, "key", { value: "foo", writable: false });
```

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

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


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


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


```js
ws.add({ foo: "bar" });
ws.add(window);
```

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

* `Object.create()`
* `Object.defineProperty()`, `Object.defineProperties()`
* `WeakMap`, `WeakSet`
Error: Permission denied to access property "x"
===============================================

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

Error: Permission denied to access property "x"
```

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

`Error`.

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

Была попытка получить доступ к объекту, на который у вас нет разрешения. Вероятно, это элемент `<iframe>` (en-US), для которого вы нарушили правило ограничения домена.

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


```html
<!doctype html>
<html>
  <head>
    <iframe
 id="myframe"
 src="http://www1.w3c-test.org/common/blank.html"></iframe>
    <script>
 onload = function () {
 console.log(frames[0].document);
 // Error: Permission denied to access property "document"
 };
 </script>
  </head>
  <body></body>
</html>
```

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

* `<iframe>` (en-US)
* Same-origin policy
ReferenceError: can't access lexical declaration 'X' before initialization
==========================================================================

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

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

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

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

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

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

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

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


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

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

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


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

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

* Temporal Dead Zone and errors with let
Warning: unreachable code after return statement
================================================

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

Warning: unreachable code after return statement (Firefox)
```


```
Предупреждение: недоступный код после оператора return (Firefox)
```

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

Предупреждение

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

Недоступный код после оператора `return` может возникнуть в следующих ситуациях:

* когда в коде программы есть какие-либо выражения после оператора `return`
* когда используется оператор `return` без точки с запятой, но далее непосредственно за ним следует выражение.

Когда присутствует выражение после оператора `return`, то выдаётся предупреждение о том, что код программы после `return` недоступен, то есть он никогда не запустится и не выполнится.

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

Предупреждение не появится для оператора `return` без точки с запятой, если за данной строкой следуют:

* `throw`
* `break`
* `var`
* `function`
Примеры
-------

### Неверные варианты


```js
function f() {
  var x = 3;
  x += 4;
  return x; //return завершает функцию немедленно,
  x -= 3; //поэтому эта строка никогда не запустится; она недоступна
}

function f() {
  return; //эта строка трактуется как завершение функции оператором `return;`,
  3 + 4; //поэтому происходит выход из функции, и эта строка не выполнится
}
```

### Верные варианты


```js
function f() {
  var x = 3;
  x += 4;
  x -= 3;
  return x; //OK: return находится после всех остальных выражений
}

function f() {
  return 3 + 4; //OK: return без точки с запятой и вычисляемое выражение находятся на одной строке
}
```

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

* Automatic Semicolon Insertion
TypeError: setting getter-only property "x"(установка свойства только для геттера "x")
======================================================================================

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

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

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

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

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

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

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

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


```js
"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, либо реализовать для неё сеттер, например, как показано ниже:


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

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

* `Object.defineProperty()`
* `Object.defineProperties()`
SyntaxError: invalid regular expression flag "x"
================================================

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

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

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

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

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

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


```js
var re = /pattern/flags;
```


или


```js
var re = new RegExp("pattern", "flags");
```


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

| Флаг | Описание |
| --- | --- |
| `g` | Глобальный поиск. |
| i | Нечувствительный к регистру поиск. |
| m | Поиск по всем строкам. |
| u | Unicode; обрабатывать шаблон как последовательность кода Unicode |
| y | Выполняет «липкий» поиск, который будет начинаться с текущей позиции в целевой строке. См. `sticky` |

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

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


```js
/foo/bar;

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


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


```js
let obj = {
  url: /docs/Web
};

// Ошибка синтаксиса: недействительный флаг "W" для регулярного выражения
```


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


```js
let obj = {
  url: "/docs/Web",
};
```

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

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


```js
/foo/g;
/foo/gim;
/foo/uy;
```

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

* Regular expressions
* XRegEx flags – библиотека регулярного выражения, которая предоставляет четыре новых флага (`n`, `s`, `x`, `A`)
SyntaxError: missing ] after element list
=========================================

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

SyntaxError: missing ] after element list
```

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

`SyntaxError`.

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

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

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

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


```js
var list = [1, 2,

var instruments = [
  'Укулеле',
  'Гитара',
  'Пианино'
};

var data = [{foo: 'bar'} {bar: 'foo'}];
```


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


```js
var list = [1, 2];

var instruments = ["Укулеле", "Гитара", "Пианино"];

var data = [{ foo: "bar" }, { bar: "foo" }];
```

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

* `Array`
TypeError: "x" is not a constructor
===================================

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

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

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

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

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

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

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

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

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


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


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


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


```js
var mycar = new Car("Лада", "Самара", 1993);
```

### В Промисах

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

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


```js
return new Promise.resolve(true);
```


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


```js
// Это допустимо, но слишком длинно, в этом нет необходимости:
return new Promise((resolve, reject) => {
  resolve(true);
});

// Вместо этого, возвращайте статический метод:
return Promise.resolve(true);
return Promise.reject(false);
```

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

* constructor
* `new` operator
RangeError: precision is out of range
=====================================

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

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

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

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

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

* `Number.prototype.toExponential()`
* `Number.prototype.toFixed()`
* `Number.prototype.toPrecision()`

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

| Метод | Firefox (SpiderMonkey) | Chrome, Opera (V8) |
| --- | --- | --- |
| `Number.prototype.toExponential()` | от 0 до 100 | от 0 до 20 |
| `Number.prototype.toFixed()` | от -20 до 100 | от 0 до 20 |
| `Number.prototype.toPrecision()` | от 1 до 100 | от 1 до 21 |

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

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


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

### Примеры правильного кода


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

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

* `Number.prototype.toExponential()`
* `Number.prototype.toFixed()`
* `Number.prototype.toPrecision()`
TypeError: 'x' is not iterable (Тип ошибки 'x' не является итерационным)
========================================================================

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

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

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

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

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

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

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

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


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


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


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


Другим вариантом для этого варианта использования может быть использование `Map` (en-US):


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

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

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


```js
function\* generate(a, b) {
  yield a;
  yield b;
}

for (let x of generate) // TypeError: генерация не является итерационной
  console.log(x);
```


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


```js
function\* generate(a, b) {
  yield a;
  yield b;
}

for (let x of generate(1, 2)) console.log(x);
```

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

* iterable protocol
* `Object.keys`
* `Object.entries`
* `Map` (en-US)
* generators
* for…of
RangeError: radix must be an integer
====================================

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

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

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

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

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

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

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

* 2 для двоичных чисел,
* 8 для восьмеричных чисел,
* 10 для десятичных чисел,
* 16 для шестнадцатеричных чисел.
Примеры
-------

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


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

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


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

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

* `Number.prototype.toString()`
TypeError: invalid Array.prototype.sort argument (TypeError: недопустимый Array.prototype.sort argument)
========================================================================================================

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

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

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

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

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

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

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


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

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


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

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

* `Array.prototype.sort()`
Ошибка Ссылки: устаревший вызывающий объект или использование аргументов
========================================================================

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

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

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

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

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

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

Examples(Примеры)
-----------------

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

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


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

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


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

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

* Deprecated and obsolete features (Устаревшие функции)
* Strict mode (строгий режим)
* `Function.arguments`
* `Function.caller` и `arguments.callee.caller`