recursal/MDN huggingface dataset:
Symbol.unscopables
==================

Широко известный символ **`Symbol.unscopables`** используется для указания значения объекта, чьи собственные и наследуемые имена свойств исключаются из привязок связанного объекта оператора `with`.

| Атрибуты свойства `Symbol.unscopables` |
| --- |
| Записываемое | нет |
| Перечисляемое | нет |
| Настраиваемое | нет |

Описание
--------

`Символ @@unscopables` (`Symbol.unscopables`) может быть определён к любому объекту, чтобы исключить имена свойств из-за того, что они отображаются как лексические переменные с привязкой окружения `with`. Обратите внимание: если использовать "Строгий режим", оператор `with` будет недоступен и вероятнее всего также не понадобится этот символ.

Если вы зададите свойству значение `true` в объекте `unscopables` сделает его "*unscopable*" и, следовательно, оно не будет задействовано в области лексических переменных. Придав свойству значение `false`, Вы сделаете его `scopable` и, как следствие, оно будет задействовано в области лексических переменных.

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

Приведённый код отлично работает в ES5 и ниже. Однако в ECMAScript 2015 и более поздних версиях был введён метод `Array.prototype.keys()`. Это означает, что внутри окружения `with`, "ключи" будут методом, а не переменной. Вот где теперь встроенные свойства символа `Array.prototype[@@unscopables]` вступают в игру и препятствуют тому, чтобы некоторые из методов Array были включены в оператор `with`.


```js
var keys = [];

with (Array.prototype) {
  keys.push("что-то");
}

Object.keys(Array.prototype[Symbol.unscopables]);
// ["copyWithin", "entries", "fill", "find", "findIndex",
// "includes", "keys", "values"]
```


`Вы также можете задать unscopables` для собственных объектов.


```js
var obj = {
  foo: 1,
  bar: 2,
};

obj[Symbol.unscopables] = {
  foo: false,
  bar: true,
};

with (obj) {
  console.log(foo); // 1
  console.log(bar); // ReferenceError: bar is not defined
}
```

Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-symbol.unscopables |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

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

* `Array.prototype[@@unscopables]`
* оператор `with` (не доступен в режиме Strict)
Symbol.toPrimitive
==================

**`Symbol.toPrimitive`** является символом (symbol), который описывает свойство объекта как функцию, которая вызывается при преобразовании объекта в соответствующее примитивное значение.

Интерактивный пример
--------------------

Описание
--------

С помощью свойства **`Symbol.toPrimitive`** (которое описывается как функция), объект может быть приведён к примитивному типу. Функция вызывается со строковым аргументом **`hint`**, который передаёт желаемый тип примитива. Значением аргумента **`hint`** может быть одно из следующих значений `"number"`, `"string"`, и `"default"`.

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

Описанные ниже примеры показывают как с помощью свойства **`Symbol.toPrimitive`** можно привести объект к примитивному типу.


```js
// Объект без свойства Symbol.toPrimitive
var obj1 = {};
console.log(+obj1); // NaN
console.log(`${obj1}`); // "[object Object]"
console.log(obj1 + ""); // "[object Object]"

// Объект со свойством Symbol.toPrimitive
var obj2 = {
  [Symbol.toPrimitive](hint) {
    if (hint == "number") {
      return 10;
    }
    if (hint == "string") {
      return "hello";
    }
    return true;
  },
};
console.log(+obj2); // 10 -- желаемый тип (hint) - "number"
console.log(`${obj2}`); // "hello" -- желаемый тип (hint) - "string"
console.log(obj2 + ""); // "true" -- желаемый тип (hint) - "default"
```

Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-symbol.toprimitive |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

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

* `Date.prototype[@@toPrimitive]` (en-US)
* `Symbol.prototype[@@toPrimitive]`
* `Object.prototype.toString()`
* `Object.prototype.valueOf()`
WeakSet.prototype.has()
=======================

Метод **`has()`** определяет, содержит ли WeakSet определённый элемент, возвращая в зависимости от этого true или false.

Синтаксис
---------
```

ws.has(value);
```

### Параметры

value

Обязателен. Искомый объект.

### Возвращаемое значение

Boolean

Если объект был найден в WeakSet вернёт true, иначе false.

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

### Использование метода `has`


```js
var ws = new WeakSet();
var obj = {};
ws.add(window);

mySet.has(window); // вернёт true
mySet.has(obj); // вернёт false
```

Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-weakset.prototype.has |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

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

* `WeakSet`
* `WeakSet.prototype.add()`
* `WeakSet.prototype.delete()`
WeakSet.prototype.add()
=======================

Метод **`add()`** добавляет новый объект в конец объекта WeakSet.

Синтаксис
---------
```

ws.add(value);
```

### Параметры

value

Обязателен. Объект, добавляемый в WeakSet.

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

### Использование метода add


```js
var ws = new WeakSet();

ws.add(window); // добавляет объект window в WeakSet

ws.has(window); // true

// Weakset принимает в качестве параметров только объекты
ws.add(1);
// результат в Chrome: "TypeError: Invalid value used in weak set"
// результат в Firefox: "TypeError: 1 is not a non-null object"
```

Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-weakset.prototype.add |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

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

* `WeakSet`
* `WeakSet.prototype.delete()`
* `WeakSet.prototype.has()`
WeakSet.prototype.delete()
==========================

Метод **`delete()`** удаляет указанный элемент из объекта `WeakSet`.

Синтаксис
---------
```

ws.delete(value);
```

### Параметры

value

Обязателен. Объект, удаляемый из WeakSet.

### Возвращаемое значение

Если объект был успешно удалён, возвращается true, иначе false.

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

### Использование метода `delete`


```js
var ws = new WeakSet();
var obj = {};

ws.add(window);

ws.delete(obj); // Вернёт false. Удаляемый объект не найден в WeakSet.
ws.delete(window); // Вернёт true. Объект успешно удалён.

ws.has(window); // Вернёт false. Объект window был удалён из WeakSet.
```

Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-weakset.prototype.delete |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

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

* `WeakSet`
* `WeakSet.prototype.clear()`
Set.prototype.has()
===================

Метод **`has()`** возвращает логическое значение, показывающее, существует ли элемент с указанным значением в объекте `Set` или нет.

Интерактивный пример
--------------------

Синтаксис
---------
```

mySet.has(value);
```

### Параметры

value

Обязательный. Значение, которое необходимо проверить на наличие в коллекции `Set`.

### Возвращаемое значение

Boolean

Возвращает `true`, если в коллекции `Set` существует элемент с указанным значением; в противном случае `false`.

**Примечание:** С технической точки зрения, `has()` использует алгоритм `sameValueZero` для определения наличия указанного элемента.

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

### Использование метода `has`


```js
var mySet = new Set();
mySet.add("foo");

mySet.has("foo"); // возвращает true
mySet.has("bar"); // возвращает false

var set1 = new Set();
var obj1 = { key1: 1 };
set1.add(obj1);

set1.has(obj1); // возвращает true
set1.has({ key1: 1 }); // возвращает false, поскольку это разные ссылки на объекты
set1.add({ key1: 1 }); // сейчас set1 содержит 2 объекта
```

Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-set.prototype.has |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

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

* `Set`
* `Set.prototype.add()`
* `Set.prototype.delete()`
Set.prototype.values()
======================

Метод **`values()`** возвращает новый `Итератор`, который содержит значения для каждого элемента в объекте `Set` в порядке их добавления.

Метод **`keys()`** является синонимом этого метода (для схожести с объектами `Map` (en-US)). Он ведёт себя точно так же и возвращает **значения** элементов `Set`.

Интерактивный пример
--------------------

Синтаксис
---------
```

mySet.values();
```

### Возвращаемое значение

Новый **`Итератор`**, содержащий значения для каждого элемента `Set`, в порядке их добавления.

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

### Использование `values()`


```js
var mySet = new Set();
mySet.add("foo");
mySet.add("bar");
mySet.add("baz");

var setIter = mySet.values();

console.log(setIter.next().value); // "foo"
console.log(setIter.next().value); // "bar"
console.log(setIter.next().value); // "baz"
```

Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-set.prototype.values |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

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

* `Set.prototype.entries()`
Set.prototype.add()
===================

Метод **`add()`** добавляет новый элемент с заданным значением в конец объекта `Set`.

Интерактивный пример
--------------------

Синтаксис
---------
```

mySet.add(value);
```

### Параметры

value

Обязательное. Значение элемента, добавляемого в объект `Set`.

### Возвращаемое значение

Объект `Set`.

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

### Использование метода `add`


```js
var mySet = new Set();

mySet.add(1);
mySet.add(5).add("some text"); // можно делать цепочки

console.log(mySet);
// Set [1, 5, "some text"]
```

Спецификация
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-set.prototype.add |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

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

* `Set`
* `Set.prototype.delete()`
* `Set.prototype.has()`
Set() конструктор
=================

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

Интерактивный пример
--------------------

Синтаксис
---------
```

new Set([iterable])
```

### Параметры

`iterable` Необязательный

Если передаётся итеративный объект, все его элементы будут добавлены в новый Set.

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

### Возвращаемое значение

Новый объект Set.

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

### Использование объекта Set


```js
let mySet = new Set();

mySet.add(1); // Set [ 1 ]
mySet.add(5); // Set [ 1, 5 ]
mySet.add(5); // Set [ 1, 5 ]
mySet.add("какой-то текст"); // Set [ 1, 5, 'какой-то текст' ]
let o = { a: 1, b: 2 };
mySet.add(o);
```

Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-set-constructor |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

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

* Set
Set.prototype.entries()
=======================

Метод **`entries()`** возвращает новый **`Итератор`**, который содержит массив **`[значение, значение]`** для каждого элемента в объекте `Set` в порядке их добавления. Для объекта `Set` не существует ключа `key`, как в объекте `Map`. Тем не менее, чтобы API было схож с объектом `Map`, каждая *запись* содержит значение как в *ключе,* так и в *значении*, возвращая массив `[значение, значение]`.

Интерактивный пример
--------------------

Синтаксис
---------
```

mySet.entries()
```

### Возвращаемое значение

Новый `Итератор`, который содержит массив `[значение, значение]` для каждого элемента, полученного в `Set` в порядке их добавления.

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

### Использование `entries()`


```js
var mySet = new Set();
mySet.add("foobar");
mySet.add(1);
mySet.add("baz");

var setIter = mySet.entries();

console.log(setIter.next().value); // ["foobar", "foobar"]
console.log(setIter.next().value); // [1, 1]
console.log(setIter.next().value); // ["baz", "baz"]
```

Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-set.prototype.entries |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

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

* `Set.prototype.keys()` (en-US)
* `Set.prototype.values()`
Set.prototype.clear()
=====================

Метод **`clear()`** удаляет все элементы из объекта `Set`.

Синтаксис
---------
```

mySet.clear();
```

### Возвращаемое значение

`undefined`.

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

### Использование метода `clear`


```js
var mySet = new Set();
mySet.add(1);
mySet.add("foo");

mySet.size; // 2
mySet.has("foo"); // true

mySet.clear();

mySet.size; // 0
mySet.has("bar"); // false
```

Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-set.prototype.clear |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

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

* `Set`
* `Set.prototype.delete()`
Set.prototype.size
==================

Метод доступа **`size`** возвращает количество (уникальных) элементов в объекте `Set`

Интерактивный пример
--------------------

Описание
--------

Значение `size` является целым числом, которое показывает как много записей имеет объект `Set`. Функция для установки `size` равна `undefined`; вы не можете изменить это свойство.

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

### Использование `size`


```js
var mySet = new Set();
mySet.add(1);
mySet.add(5);
mySet.add("некоторый текст");

mySet.size; // 3
```

Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-get-set.prototype.size |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

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

* `Set`
Set.prototype.forEach()
=======================

Метод **`forEach()`** выполняет функцию по одному разу для каждого элемента из `Set` в порядке их расположения.

Интерактивный пример
--------------------

Синтаксис
---------
```

mySet.forEach(callback[, thisArg])
```

### Параметры

`callback`

Функция, которая будет выполнена для каждого элемента, принимает три параметра:

`currentValue`, `currentKey`

Текущий элемент из `Set`. Т.к. в `Set` нет ключей, в каждом будет лежать value.

`set`

Сам объект `Set` для которого был вызван `forEach()`.


`thisArg`

Значение, используемое как `this` в ходе выполнения `callback`.

### Возвращаемое значение

`undefined`.

Описание
--------

Метод `forEach()` выполняет `callback` по одному разу для каждого значения, которое находится в объекте `Set`. Функция не будет выполняться для значений, которые были удалены. Тем не менее функция выполнится с элементами, значение которых `undefined`.

`callback` вызывается с **тремя аргументами**:

* **значение элемента**
* **ключ элемента**
* **`Set` объект обхода**

В объектах типа `Set` нет ключей, поэтому оба первых аргумента принимают **значение** содержащееся в `Set`. Это делает метод `forEach()` для объекта Set совместимым с методами `forEach()` других объектов, таких как `Map` (en-US) и `Array`.

`Если аргумент thisArg` был передан в `forEach()`, то он будет передан в `callback` , во время исполнения, для использование его в качестве `this`. Иначе в `this` будет хранится значение `undefined`. Значение `this` используемое в `callback` определено согласно с обычными правилами определения `this` используемого функцией

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

`forEach()` выполняет `callback` однажды для каждого элемента из объекта `Set`; Он не возвращает никакого значения.

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

### Содержимое объекта `Set`

Приведённый код показывает состояние каждого элемента в объекте `Set`:


```js
function logSetElements(value1, value2, set) {
  console.log("s[" + value1 + "] = " + value2);
}

new Set(["foo", "bar", undefined]).forEach(logSetElements);

// logs:
// "s[foo] = foo"
// "s[bar] = bar"
// "s[undefined] = undefined"
```

Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-set.prototype.foreach |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

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

* `Array.prototype.forEach()`
* `Map.prototype.forEach()` (en-US)
Set.prototype.delete()
======================

Метод **`delete()`** удаляет уникальный элемент из объекта `Set`.Интерактивный пример
--------------------

Синтаксис
---------
```

mySet.delete(value);
```

### Параметры

value

Обязательный. Значение элемента для удаления из объекта `Set`.

### Возвращаемое значение

`true`, если элемент был успешно удалён из объекта `Set`, иначе `false`.

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

### Использование метода `delete`


```js
var mySet = new Set();
mySet.add("foo");

mySet.delete("bar"); // Вернёт false. Отсутствует элемент "bar" для удаления.
mySet.delete("foo"); // Вернёт true. Успешно удалён.

mySet.has("foo"); // Вернёт false. Элемент "foo" больше не присутствует.
```


Давайте проверим как удалить Object из Set.


```js
var setObj = new Set(); // Создаём новый Set.

setObj.add({ x: 10, y: 20 }); // Добавляем объект в набор.

setObj.add({ x: 20, y: 30 }); // Добавляем объект в набор.

// Удаляем любой point с `x > 10`.
setObj.forEach(function (point) {
  if (point.x > 10) {
    setObj.delete(point);
  }
});
```

Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-set.prototype.delete |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

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

* `Set`
* `Set.prototype.clear()`
Number.prototype.toFixed()
==========================

Сводка
------

Метод **`toFixed()`** форматирует число, используя запись с фиксированной запятой.

Синтаксис
---------
```

numObj.toFixed([digits])
```

### Параметры

`digits`

Необязательный параметр. Количество цифр после десятичной запятой; может быть значением между 0 и 20 включительно, хотя реализации могут поддерживать и больший диапазон значений. Если аргумент опущен, он считается равным 0.

### Возвращаемое значение

Строка, представляющая `numObj`, не использующая экспоненциальную запись и содержащая ровно `digits` цифр после десятичной запятой. Число округляется при необходимости, а дробная часть дополняется нулями таким образом, чтобы иметь указанную длину. Если `numObj` больше или равно `1e+21`, этот метод просто вызывает метод `Number.prototype.toString()` и возвращает строку в экспоненциальной записи.

### Выбрасываемые исключения

`RangeError`

Если параметр `digits` слишком маленький или слишком большой. Значения между 0 и 20 включительно не будут порождать исключение `RangeError`. Также реализации могут поддерживать большие и меньшие значения.

`TypeError`

Если этот метод вызывается на объекте, не являющимся объектом `Number`.

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

### Пример: использование `toFixed`


```js
var numObj = 12345.6789;

numObj.toFixed(); // Вернёт '12346': обратите внимание на округление, дробной части нет
numObj.toFixed(1); // Вернёт '12345.7': обратите внимание на округление
numObj.toFixed(6); // Вернёт '12345.678900': обратите внимание на дополнение нулями
(1.23e20).toFixed(2); // Вернёт '123000000000000000000.00'
(1.23e-10).toFixed(2); // Вернёт '0.00'
(2.34).toFixed(1); // Вернёт '2.3'
-(2.34).toFixed(1); // Вернёт -2.3 (в соответствии с приоритетом операций,
// отрицательные числовые литералы не возвращают строку...)
(-2.34).toFixed(1); // Вернёт '-2.3' (...до тех пор, пока вы не заключите их в круглые скобки)
```

Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-number.prototype.tofixed |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

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

* `Number.prototype.toExponential()`
* `Number.prototype.toPrecision()`
* `Number.prototype.toString()`
Number.NEGATIVE\_INFINITY
=========================

Сводка
------

Свойство **`Number.NEGATIVE_INFINITY`** представляет значение отрицательной бесконечности.

Вам не нужно создавать объект `Number` для доступа к этому статическому свойству (используйте `Number.NEGATIVE_INFINITY`).

| Атрибуты свойства `Number.NEGATIVE_INFINITY` |
| --- |
| Записываемое | нет |
| Перечисляемое | нет |
| Настраиваемое | нет |

Описание
--------

Значение `Number.NEGATIVE_INFINITY` является тем же самым по модулю, только отрицательным значением, что содержит свойство `Infinity` глобального объекта.

Это значение ведёт себя несколько иначе, нежели математическая бесконечность:

* Любое положительное значение, включая `POSITIVE_INFINITY`, умноженное на `NEGATIVE_INFINITY` даёт `NEGATIVE_INFINITY`.
* Любое отрицательное значение, включая `NEGATIVE_INFINITY`, умноженное на `NEGATIVE_INFINITY` даёт `POSITIVE_INFINITY`.
* Ноль, умноженный на `NEGATIVE_INFINITY`, даёт `NaN`.
* `NaN`, умноженный на `NEGATIVE_INFINITY`, даёт `NaN`.
* `NEGATIVE_INFINITY`, делённое на любое отрицательное значение, исключая `NEGATIVE_INFINITY`, даёт `POSITIVE_INFINITY`.
* `NEGATIVE_INFINITY`, делённое на любое положительное значение, исключая `POSITIVE_INFINITY`, даёт `NEGATIVE_INFINITY`.
* `NEGATIVE_INFINITY`, делённое на `NEGATIVE_INFINITY` или `POSITIVE_INFINITY`, даёт `NaN`.
* Любое число, делённое на `NEGATIVE_INFINITY`, даёт ноль.

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

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

### Пример: использование `NEGATIVE_INFINITY`

В следующем примере переменной `smallNumber` присваивается значение, меньшее минимального. Когда выполняется инструкция `if`, переменная `smallNumber` имеет значение `-Infinity`, так что перед продолжением вычислений она устанавливается в более приемлемое значение.


```js
var smallNumber = -Number.MAX\_VALUE \* 2;

if (smallNumber == Number.NEGATIVE\_INFINITY) {
  smallNumber = returnFinite();
}
```

Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-number.negative\_infinity |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

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

* `Number.POSITIVE_INFINITY`
* `Number.isFinite()`
* `Infinity`
* `isFinite()`