Promise.all() - JavaScript

Promise.all()
=============

Общее описание
--------------

Метод **`Promise.all(iterable)`** возвращает промис, который выполнится тогда, когда будут выполнены все промисы, переданные в виде перечисляемого аргумента, или отклонено любое из переданных промисов.

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

Promise.all(iterable);
```

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

iterable

Перечисляемый объект, например, массив (`Array`). Смотрите iterable (en-US).

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

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

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

**`Promise.all`** возвращает массив значений от всех промисов, которые были ему переданы. Возвращаемый массив значений сохраняет порядок оригинального перечисляемого объекта, но не порядок выполнения промисов. `Если какой-либо элемент перечисляемого объекта не является промисом, то он будет преобразован с помощью метода `Promise.resolve`.

Если одно из переданных промисов будет отклонено, **`Promise.all`** будет немедленно отклонён со значением отклонённого промиса, не учитывая другие промисы, независимо выполнены они или нет. Если в качестве аргумента будет передан пустой массив, то `Promise.all` будет выполнен немедленно.

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

### Использование `Promise.all`

**Promise.all** ждёт выполнения всех промисов (или первого метода `reject()`).

```js
var p1 = Promise.resolve(3);
var p2 = 1337;
var p3 = new Promise((resolve, reject) => {
  setTimeout(resolve, 100, "foo");
});

Promise.all([p1, p2, p3]).then((values) => {
  console.log(values);
});

//Выведет:
// [3, 1337, "foo"]
```

### `Promise.all` поведение немедленного отклонения

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

```js
var p1 = new Promise((resolve, reject) => {
  setTimeout(resolve, 1000, "one");
});
var p2 = new Promise((resolve, reject) => {
  setTimeout(resolve, 2000, "two");
});
var p3 = new Promise((resolve, reject) => {
  setTimeout(resolve, 3000, "three");
});
var p4 = new Promise((resolve, reject) => {
  setTimeout(resolve, 4000, "four");
});
var p5 = new Promise((resolve, reject) => {
  // Этот промис прервёт Promise.all
  reject("reject");
});

Promise.all([p1, p2, p3, p4, p5]).then(
  (value) => {
    console.log(value);
  },
  (reason) => {
    console.log(reason);
  },
);

//Выведет:
//"reject"
```

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

| Specification |
| --- |
| ECMAScript Language Specification # sec-promise.all |

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

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

Родственные темы
----------------

* `Promise`
* `Promise.race()`


Promise.prototype.then() - JavaScript

Promise.prototype.then()
========================

Метод **`then()`** возвращает `Promise`. Метод может принимать два аргумента: колбэк-функции для случаев выполнения и отклонения промиса.

**Примечание:** Если один или оба аргумента отсутствуют или их значения не функции, то `then` пропустит их и не выбросит ошибку. Если для `Promise`, который переходит в состояние `выполнен` или `отклонён` вызван метод `then`, и у данного метода нет нужного обработчика, то в таком случае `then` просто возвращает промис с состоянием начального `Promise`, для которого `then` был вызван.

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

p.then(onFulfilled[, onRejected]);

p.then(value => {
  // выполнение
  }, reason => {
  // отклонение
});
```

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

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

`Function` вызывается, когда `Promise` выполнен. Эта функция принимает один аргумент, значение с которым промис был выполнен. Если значение onFulfilled не функция, то оно автоматически заменяется на "Identity" функцию (возвращает полученный аргумент)

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

`Function` вызывается, когда `Promise` отклонён. Эта функция принимает один аргумент, значение с которым промис был отклонён. Если значение onRejected не функция, то оно автоматически заменяется на "Thrower" функцию (выбрасывает полученный аргумент как ошибку)

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

Так как и метод `then`, и метод `Promise.prototype.catch()` возвращают `Promise`, их можно вызвать цепочкой — эта операция называется *соединение*.

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

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

```js
var p1 = new Promise(function (resolve, reject) {
  resolve("Успех!");
  // или
  // reject("Ошибка!");
});

p1.then(
  function (value) {
    console.log(value); // Успех!
  },
  function (reason) {
    console.log(reason); // Ошибка!
  },
);
```

### Соединение

Так как метод `then` возвращает промис (`Promise`), вы можете объединить несколько вызовов `then` в цепочку. Значения возвращаемые из колбэков onFulfilled или onRejected будут автоматически обёрнуты в промис.

```js
var p2 = new Promise(function (resolve, reject) {
  resolve(1);
});

p2.then(function (value) {
  console.log(value); // 1
  return value + 1;
}).then(function (value) {
  console.log(value); // 2
});

p2.then(function (value) {
  console.log(value); // 1
});
```

Вы также можете соединить одну функцию, имеющую подобный с промисами API, с другой функцией.

```js
function fetch\_current\_data() {
  // API функции fetch() возвращает промис. Эта функция
  // имеет аналогичный API, за исключением значения в случае выполнения
  return fetch("current-data.json").then((response) => {
    if (response.headers.get("content-type") != "application/json") {
      throw new TypeError();
    }
    var j = response.json();
    // можем что-нибудь делать с j
    return j; // в случае выполнения промиса, значение
    // передаётся в fetch\_current\_data().then()
  });
}
```

Если onFulfilled возвращает промис, возвращаемое значение может быть выполнено (resolved) / отклонено (rejected) промисом.

```js
function resolveLater(resolve, reject) {
  setTimeout(function () {
    resolve(10);
  }, 1000);
}
function rejectLater(resolve, reject) {
  setTimeout(function () {
    reject(20);
  }, 1000);
}

var p1 = Promise.resolve("foo");
var p2 = p1.then(function () {
  // Возвращает промис, который будет разрешен значением 10 через 1 секунду
  return new Promise(resolveLater);
});
p2.then(
  function (v) {
    console.log("resolved", v); // "resolved", 10
  },
  function (e) {
    // не вызвано
    console.log("rejected", e);
  },
);

var p3 = p1.then(function () {
  // Возвращает промис, который будет отброшен значением 20 через 1 секунду
  return new Promise(rejectLater);
});
p3.then(
  function (v) {
    // не
    console.log("resolved", v);
  },
  function (e) {
    console.log("rejected", e); // "rejected", 20
  },
);
```

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

| Specification |
| --- |
| ECMAScript Language Specification # sec-promise.prototype.then |

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

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

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

* `Promise`
* `Promise.prototype.catch()`


Promise.prototype.catch() - JavaScript

Promise.prototype.catch()
=========================

Метод **catch()** возвращает промис (`Promise(`) и работает только в случае отклонения промиса. Ведёт себя аналогично вызову `Promise.prototype.then(undefined, onRejected)`.

Syntax
------
```

p.catch(onRejected);

p.catch(function(reason) {
   // отказ
});
```

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

onRejected

`Function` вызывается когда промис отклонен. У этой функции один аргумент:

`reason`

Причина отказа.

Промис, возвращённый catch (), отклоняется, если onRejected выдаёт ошибку(throw) или возвращает Promise, который был отклонён; В противном случае Promise, возвращаемый catch () имеет статус выполнено (fulfilled)

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

`Promise`.

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

Метод `catch может быть полезен для обработки ошибок` в вашей структуре промисов.

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

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

```js
var p1 = new Promise(function (resolve, reject) {
  resolve("Success");
});

p1.then(function (value) {
  console.log(value); // "Success!"
  throw "oh, no!";
})
  .catch(function (e) {
    // Функция не перевыбросила исключение 'e'
    // в результате произойдёт resolve(undefined)
    // для Promise, возвращённого функцией catch
    console.log(e); // "oh, no!"
  })
  .then(
    function () {
      console.log("after a catch the chain is restored");
    },
    function () {
      // Функция не перевыбросила исключение 'e'
      // в результате произойдёт resolve(undefined)
      // для Promise, возвращённого функцией catch
      console.log("Not fired due to the catch");
    },
  );

// Следующий код ведёт себя также, как вышенаписанный
p1.then(function (value) {
  console.log(value); // "Success!"
  return Promise.reject("oh, no!");
})
  .catch(function (e) {
    // Функция не перевыбросила исключение 'e'
    // в результате произойдёт resolve(undefined)
    // для Promise, возвращённого функцией catch
    console.log(e); // "oh, no!"
  })
  .then(
    function () {
      console.log("after a catch the chain is restored");
    },
    function () {
      // Функция не перевыбросила исключение 'e'
      // в результате произойдёт resolve(undefined)
      // для Promise, возвращённого функцией catch
      console.log("Not fired due to the catch");
    },
  );
```

### Ловим выброшенные исключения

```js
// Выкидываемая ошибка вызовет метод catch
var p1 = new Promise(function (resolve, reject) {
  throw "Uh-oh!";
});

p1.catch(function (e) {
  console.log(e); // "Uh-oh!"
});

// Ошибки выброшенные из асинхронных функций не будут пойманы методом catch
var p2 = new Promise(function (resolve, reject) {
  setTimeout(function () {
    throw "Uncaught Exception!";
  }, 1000);
});

p2.catch(function (e) {
  console.log(e); // Никогда не вызовется
});

// Ошибки выброшенные после выполнения промиса будут проигнорированны
var p3 = new Promise(function (resolve, reject) {
  resolve();
  throw "Silenced Exception!";
});

p3.catch(function (e) {
  console.log(e); // Никогда не вызовется
});
```

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

| Specification |
| --- |
| ECMAScript Language Specification # sec-promise.prototype.catch |

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

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

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

* `Promise`
* `Promise.prototype.then()`


Generator.prototype.next() - JavaScript

Generator.prototype.next()
==========================

Метод **`next()`** возвращает объект с двумя свойствами `done` и `value`. Также вы можете задать параметр для метода `next`, чтобы отправить значение в генератор.

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

gen.next(value)
```

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

`value`

Значение, отправляемое в генератор. Значение будет установлено в виде результата выражения yield, т. е. в [переменная] = yield [выражение] значение, которое было передано в функцию .next будет присвоено [переменной].

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

`Object` с двумя свойствами:

* `done` (boolean)
    + Имеет значение `true`, если итератор находится за окончанием итерируемой последовательности. В этом случае `value` может указывать *возвращаемое значение* итератора.
    + Имеет значение `false`, если итератор может создать следующее значение в последовательности. Это эквивалентно вообще не указанному свойству `done`.
* `value` - любое JavaScript значение, возвращаемое итератором. Может быть опущено, когда `done` имеет значение `true`.
Примеры
-------

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

Следующий пример показывает простой генератор и объект, который возвращает метод `next`:

```js
function\* gen() {
  yield 1;
  yield 2;
  yield 3;
}

var g = gen(); // "Generator { }"
g.next(); // "Object { value: 1, done: false }"
g.next(); // "Object { value: 2, done: false }"
g.next(); // "Object { value: 3, done: false }"
g.next(); // "Object { value: undefined, done: true }"
```

### Отправка значения в генератор

В этом примере `next` вызывается со значением. Отметим, что первый вызов ничего не вывел, потому что генератор изначально ничего не получил.

```js
function\* gen() {
  while (true) {
    var value = yield null;
    console.log(value);
  }
}

var g = gen();
g.next(1);
// "{ value: null, done: false }"
g.next(2);
// 2
// "{ value: null, done: false }"
```

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

| Specification |
| --- |
| ECMAScript Language Specification # sec-generator.prototype.next |

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

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

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

* `function*`
* Итераторы и генераторы


Generator.prototype.throw() - JavaScript

Generator.prototype.throw()
===========================

Метод **`throw()`** возобновляет выполнение тела генератора кидая внутри исключение `и возвращает объект со свойствами done и value`.

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

gen.throw(exception)
```

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

`exception`

Исключение, которое будет брошено. Во время отладки бывает полезно сделать его `instanceof` `Error`.

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

Объект с двумя свойствами:

* `done` (boolean)
    + Имеет значение `true` если iterator прошёл конец итерируемой последовательности. В этом случае `value` опционально определяется выражением *return value* внутри итератора .
    + Имеет значение `false` если iterator имеет возможность вернуть следующее значение последовательности. Это равносильно когда свойство done не указано.
* `value` - любое JavaScript значение, возвращённое итератором. Может быть проигнорировано, когда *`done` === `true`*.
Примеры
-------

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

В этом примере показан простой генератор и исключение, которое выбрасывается используя метод `throw`. Исключение может быть поймано, используя, как обычно, блок `try...catch`.

```js
function\* gen() {
  while (true) {
    try {
      yield 42;
    } catch (e) {
      console.log("Error caught!");
    }
  }
}

var g = gen();
g.next();
// { value: 42, done: false }
g.throw(new Error("Something went wrong"));
// "Error caught!"
// { value: 42, done: false }
```

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

| Specification |
| --- |
| ECMAScript Language Specification # sec-generator.prototype.throw |

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

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

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

* `function*`


Generator.prototype.return() - JavaScript

Generator.prototype.return()
============================

Метод **`return()`** возвращает полученное значение и останавливает генератор.

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

gen.return(value)
```

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

`value`

Значение для возврата.

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

Значение, которое было передано в виде аргумента.

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

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

Следующий пример показывает простой генератор и метод `return`.

```js
function\* gen() {
  yield 1;
  yield 2;
  yield 3;
}

var g = gen();

g.next(); // { value: 1, done: false }
g.return("foo"); // { value: "foo", done: true }
g.next(); // { value: undefined, done: true }
```

Если `return(value)` вызывает генератор, который находится в уже "завершённом" состоянии, генератор останется в "завершённом" состоянии. Если аргумент не был передан, свойство `value` вернёт тот же объект, что и `.next()`. Если аргумент был передан, он будет установлен как значение свойства `value` возвращаемого объекта.

```js
function\* gen() {
  yield 1;
  yield 2;
  yield 3;
}

var g = gen();
g.next(); // { value: 1, done: false }
g.next(); // { value: 2, done: false }
g.next(); // { value: 3, done: false }
g.next(); // { value: undefined, done: true }
g.return(); // { value: undefined, done: true }
g.return(1); // { value: 1, done: true }
```

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

| Specification |
| --- |
| ECMAScript Language Specification # sec-generator.prototype.return |

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

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

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

* `function*`


Boolean.prototype.valueOf() - JavaScript

Boolean.prototype.valueOf()
===========================

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

Метод **`valueOf()`** возвращает примитивное значение объекта `Boolean`.

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

bool.valueOf()
```

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

Нет.

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

Метод `valueOf` объекта `Boolean` возвращает примитивное значение объекта или литерала логического типа.

Этот метод обычно вызывается внутри движка JavaScript, а не явно в коде.

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

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

```js
x = new Boolean();
myVar = x.valueOf(); // присваивает false переменной myVar
```

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

| Specification |
| --- |
| ECMAScript Language Specification # sec-boolean.prototype.valueof |

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

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

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

* `Object.prototype.valueOf()`


Boolean.prototype.toString() - JavaScript

Boolean.prototype.toString()
============================

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

Метод **`toString()`** возвращает строковое представление указанного объекта `Boolean`.

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

bool.toString()
```

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

Нет.

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

Объект `Boolean` переопределяет метод `toString` объекта `Object`; он не наследует метод `Object.prototype.toString()`. Для объектов `Boolean` метод `toString` возвращает строковое представление объекта.

JavaScript вызывает метод `toString` автоматически, когда объект `Boolean` должен быть представлен в виде текста или когда объект `Boolean` находится в контексте строковой конкатенации.

Для объектов и значений `Boolean` встроенный метод `toString` возвращает строки «`true`» или «`false`» в зависимости от значения логического объекта.

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

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

В следующем коде вызов `flag.toString()` вернёт строку `"true"`:

```js
var flag = new Boolean(true);
var myVar = flag.toString();
```

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

| Specification |
| --- |
| ECMAScript Language Specification # sec-boolean.prototype.tostring |

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

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

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

* `Object.prototype.toString()`


Intl.Collator - JavaScript

Intl.Collator
=============

Объект **`Intl.Collator`** обеспечивает сравнение строк с учётом языка.

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

Конструктор
-----------

`Intl.Collator()` (en-US)

Создаёт новый объект `Collator`.

Статические методы
------------------

`Intl.Collator.supportedLocalesOf()`

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

Свойства экземпляра
-------------------

Эти свойства определены в `Intl.Collator.prototype` и есть у всех экземпляров `Intl.Collator`.

`Intl.Collator.prototype.constructor`

Функция-конструктор, создающая экземпляр объекта. Для экземпляров `Intl.Collator` начальным значением является конструктор `Intl.Collator` (en-US).

`Intl.Collator.prototype[@@toStringTag]`

Начальным значением свойства `@@toStringTag` является строка `"Intl.Collator"`. Это свойство используется в `Object.prototype.toString()`.

Методы экземпляра
-----------------

`Intl.Collator.prototype.compare()`

Функция-геттер, которая сравнивает две строки в соответствии с правилами сортировки этого объекта `Intl.Collator`.

`Intl.Collator.prototype.resolvedOptions()`

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

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

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

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

```js
console.log(new Intl.Collator().compare("a", "c")); // -1 или другое отрицательное значение
console.log(new Intl.Collator().compare("c", "a")); // 1 или другое положительное значение
console.log(new Intl.Collator().compare("a", "a")); // 0
```

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

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

Результаты, предоставляемые функцией `Collator.prototype.compare()` отличаются в зависимости от языка. Для получения порядка сортировки языка, используемого в пользовательском интерфейсе вашего приложения, убедитесь, что вы указали этот язык (и, возможно, несколько запасных языков) используя параметр `locales`:

```js
// В немецком языке буква ä идёт рядом с буквой a
console.log(new Intl.Collator("de").compare("ä", "z"));
// -1 или другое отрицательное значение

// В шведском языке буква ä следует после буквы z
console.log(new Intl.Collator("sv").compare("ä", "z"));
// 1 или другое положительное значение
```

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

Результат, предоставляемый функцией `Collator.prototype.compare()`, может быть настроен с помощью параметра `options`:

```js
// В немецком языке буква a является базовой для буквы ä
console.log(new Intl.Collator("de", { sensitivity: "base" }).compare("ä", "a"));
// 0

// В шведском языке буквы ä и a являются двумя разными базовыми буквами
console.log(new Intl.Collator("sv", { sensitivity: "base" }).compare("ä", "a"));
// 1 или другое положительное значение
```

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

| Specification |
| --- |
| ECMAScript Internationalization API Specification # collator-objects |

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

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

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

* `Intl`


Intl.NumberFormat - JavaScript

Intl.NumberFormat
=================

Объект **`Intl.NumberFormat`** предоставляет возможности форматирования чисел в соответствии с языковыми правилами.

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

Constructor
-----------

`Intl.NumberFormat()` (en-US)

Создаёт новый объект `NumberFormat`.

Статические методы
------------------

`Intl.NumberFormat.supportedLocalesOf()`

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

Свойства экземпляра
-------------------

Эти свойства определены в `Intl.NumberFormat.prototype` и есть у всех экземпляров `Intl.NumberFormat`.

`Intl.NumberFormat.prototype.constructor`

Функция-конструктор, создающая экземпляр объекта. Для экземпляров `Intl.NumberFormat` начальным значением является конструктор `Intl.NumberFormat` (en-US).

`Intl.NumberFormat.prototype[@@toStringTag]`

Начальным значением свойства `@@toStringTag` является строка `"Intl.NumberFormat"`. Это свойство используется в `Object.prototype.toString()`.

Методы экземпляра
-----------------

`Intl.NumberFormat.prototype.format()`

Функция-геттер, которая форматирует число в соответствии с локалью и настройками форматирования этого объекта `Intl.NumberFormat`.

`Intl.NumberFormat.prototype.formatRange()` (en-US)

Функция-геттер, которая форматирует диапазон чисел в соответствии с локалью и настройками форматирования объекта `Intl.NumberFormat`, метод которого был вызван.

`Intl.NumberFormat.prototype.formatRangeToParts()` (en-US)

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

`Intl.NumberFormat.prototype.formatToParts()` (en-US)

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

`Intl.NumberFormat.prototype.resolvedOptions()`

Возвращает новый объект со свойствами, представляющими локаль и настройки форматирования, определённые во время инициализации объекта.

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

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

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

```js
const number = 3500;

console.log(new Intl.NumberFormat().format(number));
// '3,500' в локали US English
```

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

Этот пример показывает некоторые локализованные форматы чисел. Для получения формата языка, используемого в пользовательском интерфейсе вашего приложения, убедитесь, что вы указали этот язык (и, возможно, несколько запасных языков) используя параметр `locales`:

```js
const number = 123456.789;

// В Германии в качестве разделителя целой и дробной части используется запятая, а в качестве разделителя разрядов - точка
console.log(new Intl.NumberFormat("de-DE").format(number));
// 123.456,789

// В России в качестве разделителя целой и дробной части используется запятая, а в качестве разделителя разрядов - пробел
console.log(new Intl.NumberFormat("ru-RU").format(number));
// 123 456,789

// В большинстве арабоязычных стран используют настоящие арабские цифры
console.log(new Intl.NumberFormat("ar-EG").format(number));
// ١٢٣٤٥٦٫٧٨٩

// В Индии используют разделители для тысяч/лакх/крор
console.log(new Intl.NumberFormat("en-IN").format(number));
// 1,23,456.789

// Ключ расширения nu запрашивает систему нумерации, например, китайскую десятичную
console.log(new Intl.NumberFormat("zh-Hans-CN-u-nu-hanidec").format(number));
// 一二三,四五六.七八九

// Если запрашиваемый язык может не поддерживаться, например
// балийский, откатываемся на запасной язык, в данном случае индонезийский
console.log(new Intl.NumberFormat(["ban", "id"]).format(number));
// 123.456,789
```

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

Результат может быть настроен с помощью параметра `options`:

```js
const number = 123456.789;

// Запрашиваем формат валюты
console.log(
  new Intl.NumberFormat("de-DE", { style: "currency", currency: "EUR" }).format(
    number,
  ),
);
// 123.456,79 €

console.log(
  new Intl.NumberFormat("ru-RU", { style: "currency", currency: "RUB" }).format(
    number,
  ),
);
// 123 456,79 руб.

// Японская йена не использует младшие единицы
console.log(
  new Intl.NumberFormat("ja-JP", { style: "currency", currency: "JPY" }).format(
    number,
  ),
);
// ￥123,457

// Ограничиваем до трёх значащих цифр
console.log(
  new Intl.NumberFormat("en-IN", { maximumSignificantDigits: 3 }).format(
    number,
  ),
);
// 1,23,000

// Форматирование с единицами измерения
console.log(
  new Intl.NumberFormat("pt-PT", {
    style: "unit",
    unit: "kilometer-per-hour",
  }).format(50),
);
// 50 km/h

console.log(
  (16).toLocaleString("en-GB", {
    style: "unit",
    unit: "liter",
    unitDisplay: "long",
  }),
);
// 16 litres
```

Полный список настроек смотрите на странице `Intl.NumberFormat()` constructor (en-US).

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

| Specification |
| --- |
| ECMAScript Internationalization API Specification # numberformat-objects |

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

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

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

* Полифил `Intl.NumberFormat` в FormatJS
* `Intl`


Intl.ListFormat - JavaScript

Intl.ListFormat
===============

Объект **`Intl.ListFormat`** представляет собой конструктор объектов, включающих языка-зависимое форматирование списков.

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

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

new Intl.ListFormat([locales[, options]])
```

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

`locales`

Необязательный параметр. Строка с языковой меткой BCP 47 или массив таких строк. Описание общей формы и интерпретации аргумента `locales` смотрите на странице Intl.

`options`

Необязательный параметр. Объект с некоторыми или всеми из следующих свойств:

* `localeMatcher`
 Используемый алгоритм сопоставления локалей. Возможные значения: `"lookup"` и `"best fit"`; по умолчанию используется `"best fit"`. Подробнее см. на странице `Intl`.
* `type`
 Формат вывода. Возможные значения: `"conjunction"` для вывода значений через "и" (используется по умолчанию, прим. `A, B и C`) или `"disjunction"` для вывода значений через "или" (прим. `A, B или C`). `"unit"` для вывода значений с единицами измерений (прим. `5 фунтов, 12 унций`).
* `style`
 Стиль форматирования вывода. Возможные значения: `"long"` (используется по умолчанию, прим. `A, B и C`); `"short"` или `"narrow"` (прим. `A, B, C`). При использовании `narrow`, параметр `type` может принимать только значение `unit`.

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

### Свойства

`Intl.ListFormat.prototype` (en-US)

Позволяет добавлять свойства ко всем объектам `Intl.ListFormat`

### Методы

`Intl.ListFormat.supportedLocalesOf()` (en-US)

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

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

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

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

```js
const list = ["Motorcycle", "Bus", "Car"];

console.log(
  new Intl.ListFormat("ru-RU", { style: "long", type: "conjunction" }).format(
    list,
  ),
);
// > Motorcycle, Bus и Car

console.log(
  new Intl.ListFormat("ru-RU", { style: "short", type: "disjunction" }).format(
    list,
  ),
);
// > Motorcycle, Bus или Car

console.log(
  new Intl.ListFormat("ru-RU", { style: "narrow", type: "unit" }).format(list),
);
// > Motorcycle Bus Car
```

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

Пример ниже показывает как получить отформатированные части объекта `ListFormat` с помощью метода `formatToParts`.

```js
const list = ["Motorcycle", "Bus", "Car"];
console.log(
  new Intl.ListFormat("en-GB", {
    style: "long",
    type: "conjunction",
  }).formatToParts(list),
);

// > [ { "type": "element", "value": "Motorcycle" }, { "type": "literal", "value": ", " }, { "type": "element", "value": "Bus" }, { "type": "literal", "value": ", and " }, { "type": "element", "value": "Car" } ];
```

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

| Specification |
| --- |
| ECMAScript Internationalization API Specification # listformat-objects |


Intl.getCanonicalLocales() - JavaScript

Intl.getCanonicalLocales()
==========================

Метод **`Intl.getCanonicalLocales()`** возвращает массив, содержащий канонические коды языков. Повторяющиеся значения будут отброшены и элементы будут проверены на соответствие структуры языковых тегов.

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

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

Intl.getCanonicalLocales(locales)
```

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

`locales`

Список `String` значений, из которых нужно получить канонические коды языков.

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

Массив, содержащий канонические коды языков

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

```js
Intl.getCanonicalLocales("RU-RU"); // ["ru-RU"]
Intl.getCanonicalLocales(["RU-RU", "Fr"]); // ["ru-RU", "fr"]

Intl.getCanonicalLocales("RU\_RU");
// RangeError:'EN\_US' is not a structurally valid language tag
```

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

| Specification |
| --- |
| ECMAScript Internationalization API Specification # sec-intl.getcanonicallocales |

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

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

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

* `Intl.NumberFormat.supportedLocalesOf()`
* `Intl.DateTimeFormat.supportedLocalesOf()`
* `Intl.Collator.supportedLocalesOf()`


Intl.DateTimeFormat - JavaScript

Intl.DateTimeFormat
===================

Объект **`Intl.DateTimeFormat`** предоставляет возможности форматирования даты и времени в соответствии с языковыми правилами.

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

Конструктор
-----------

`Intl.DateTimeFormat()` (en-US)

Создаёт новый объект `Intl.DateTimeFormat`.

Статические методы
------------------

`Intl.DateTimeFormat.supportedLocalesOf()`

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

Свойства экземпляра
-------------------

Эти свойства определены в `Intl.DateTimeFormat.prototype` и есть у всех экземпляров `Intl.DateTimeFormat`.

`Intl.DateTimeFormat.prototype.constructor`

Функция-конструктор, создающая экземпляр объекта. Для экземпляров `Intl.DateTimeFormat` начальным значением является конструктор `Intl.DateTimeFormat` (en-US).

`Intl.DateTimeFormat.prototype[@@toStringTag]`

Начальным значением свойства `@@toStringTag` является строка `"Intl.DateTimeFormat"`. Это свойство используется в `Object.prototype.toString()`.

Методы экземпляра
-----------------

`Intl.DateTimeFormat.prototype.format()`

Функция-геттер, которая форматирует дату в соответствии с локалью и настройками форматирования этого объекта `DateTimeFormat`.

`Intl.DateTimeFormat.prototype.formatRange()` (en-US)

Этот метод принимает две даты и форматирует диапазон дат наиболее кратким образом на основе локали и параметров, установленных при создании экземпляра `DateTimeFormat`.

`Intl.DateTimeFormat.prototype.formatRangeToParts()` (en-US)

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

`Intl.DateTimeFormat.prototype.formatToParts()`

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

`Intl.DateTimeFormat.prototype.resolvedOptions()`

Возвращает новый объект со свойствами, представляющими локаль и настройки форматирования, определённые во время инициализации объекта.

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

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

При использовании без указания локали `DateTimeFormat` использует локаль и настройки по умолчанию.

```js
const date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));

// результат вызова без аргументов зависит от реализации,
// локали по умолчанию и часового пояса по умолчанию
console.log(new Intl.DateTimeFormat().format(date));
// "12/19/2012", если код запущен с локалью en-US и часовым поясом America/Los\_Angeles
```

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

Этот пример показывает некоторые локализованные форматы даты и времени. Для получения формата языка, используемого в пользовательском интерфейсе вашего приложения, убедитесь, что вы указали этот язык (и, возможно, несколько запасных языков) используя параметр `locales`:

```js
const date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));

// Форматирование ниже предполагает, что местный часовой пояс равен
// America/Los\_Angeles для локали США

// В американском английском используется порядок месяц-день-год
console.log(new Intl.DateTimeFormat("en-US").format(date));
// "12/19/2012"

// В британском английском используется порядок день-месяц-год
console.log(new Intl.DateTimeFormat("en-GB").format(date));
// "20/12/2012"

// В корейском используется порядок год-месяц-день
console.log(new Intl.DateTimeFormat("ko-KR").format(date));
// "2012. 12. 20."

// В большинстве арабоязычных стран используют настоящие арабские цифры
console.log(new Intl.DateTimeFormat("ar-EG").format(date));
// "٢٠/١٢/٢٠١٢"

// В Японии приложения могут захотеть использовать японский календарь,
// в котором 2012 год является 24-м годом эры Хейсей
console.log(new Intl.DateTimeFormat("ja-JP-u-ca-japanese").format(date));
// "24/12/20"

// Если запрашиваемый язык может не поддерживаться, например
// балийский, откатываемся на запасной язык, в данном случае индонезийский
console.log(new Intl.DateTimeFormat(["ban", "id"]).format(date));
// "20/12/2012"
```

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

Формат даты и времени может быть настроен с помощью параметра `options`:

```js
const date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0, 200));

// Запрашиваем день недели вместе с длинным форматом даты
let options = {
  weekday: "long",
  year: "numeric",
  month: "long",
  day: "numeric",
};
console.log(new Intl.DateTimeFormat("de-DE", options).format(date));
// "Donnerstag, 20. Dezember 2012"

// Приложение может захотеть использовать UTC и показать это
options.timeZone = "UTC";
options.timeZoneName = "short";
console.log(new Intl.DateTimeFormat("en-US", options).format(date));
// "Thursday, December 20, 2012, GMT"

// Иногда требуется большая точность
options = {
  hour: "numeric",
  minute: "numeric",
  second: "numeric",
  timeZone: "Australia/Sydney",
  timeZoneName: "short",
};
console.log(new Intl.DateTimeFormat("en-AU", options).format(date));
// "2:00:00 pm AEDT"

// Иногда требуется ещё большая точность
options.fractionalSecondDigits = 3; // количество цифр для отображения долей секунд
console.log(new Intl.DateTimeFormat("en-AU", options).format(date));
// "2:00:00.200 pm AEDT"

// Иногда даже в США нужен 24-часовой формат времени
options = {
  year: "numeric",
  month: "numeric",
  day: "numeric",
  hour: "numeric",
  minute: "numeric",
  second: "numeric",
  hour12: false,
  timeZone: "America/Los\_Angeles",
};
console.log(new Intl.DateTimeFormat("en-US", options).format(date));
// "12/19/2012, 19:00:00"

// Для указания настроек, но использования локали по умолчанию, нужно передать undefined
console.log(new Intl.DateTimeFormat(undefined, options).format(date));
// "12/19/2012, 19:00:00"

// Иногда полезно включать время суток
options = { hour: "numeric", dayPeriod: "short" };
console.log(new Intl.DateTimeFormat("en-US", options).format(date));
// 10 at night
```

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

```js
const options = { calendar: "chinese", numberingSystem: "arab" };
const dateFormat = new Intl.DateTimeFormat(undefined, options);
const usedOptions = dateFormat.resolvedOptions();

console.log(usedOptions.calendar);
// "chinese"

console.log(usedOptions.numberingSystem);
// "arab"

console.log(usedOptions.timeZone);
// "America/New\_York" (the users default timezone)
```

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

| Specification |
| --- |
| ECMAScript Internationalization API Specification # datetimeformat-objects |

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

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

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

* Полифил `Intl.DateTimeFormat` в FormatJS
* `Intl`


Intl.DateTimeFormat.prototype.resolvedOptions() - JavaScript

Intl.DateTimeFormat.prototype.resolvedOptions()
===============================================

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

Метод **`Intl.DateTimeFormat.prototype.resolvedOptions()`** возвращает новый объект со свойствами, отражающими локаль и параметры форматирования даты и времени, вычисленные во время инициализации соответствующего объекта `DateTimeFormat`.

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

dateTimeFormat.resolvedOptions()
```

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

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

`locale`

Языковая метка BCP 47 реально используемой локали. Если во входной языковой метке BCP 47 запрошены какие-либо расширения Unicode, приведшие к этой локали, запрошенные и поддерживаемые для этой локали пары ключ-значение также будут включены в свойство `locale`.

`calendar`

`numberingSystem`

Значения, запрошенные ключами расширения Unicode `"ca"` и `"nu"`, либо значения по умолчанию.

`timeZone`

Значение, предоставленное для этого свойства в аргументе `options`; `undefined` (представляет временную зону по умолчанию среды выполнения), если ничего не было предоставлено. Предупреждение: приложения не должны полагаться на возврат `undefined`, поскольку будущие версии вместо него могут возвращать строковое значение, идентифицирующее временную зону по умолчанию среды выполнения.

`hour12`

Значение, предоставленное для этого свойства в аргументе `options`, либо значение по умолчанию.

`weekday`

`era`

`year`

`month`

`day`

`hour`

`minute`

`second`

`timeZoneName`

Значения, получившиеся в результате объединения соответствующих свойств в аргументе `options` и доступных комбинаций и представлений форматирования даты/времени в выбранной локали. Некоторые из этих свойств могут не присутствовать, что означает, что соответствующие компоненты не попадают в форматированный вывод.

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

| Specification |
| --- |
| ECMAScript Internationalization API Specification # sec-intl.datetimeformat.prototype.resolvedoptions |

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

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

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

* `Intl.DateTimeFormat`


Intl.DateTimeFormat.supportedLocalesOf() - JavaScript

Intl.DateTimeFormat.supportedLocalesOf()
========================================

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

Метод **`Intl.DateTimeFormat.supportedLocalesOf()`** возвращает массив, содержащий те из предоставленных локалей, что поддерживаются при форматировании даты и времени без отката к локали по умолчанию среды выполнения.

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

Intl.DateTimeFormat.supportedLocalesOf(locales[, options])
```

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

`locales`

Строка с языковой меткой BCP 47, либо массив таких строк. Описание общей формы и интерпретации аргумента `locales` смотрите на странице, посвящённой объекту Intl.

`options`

Необязательный параметр. Объект, который может содержать следующее свойство:

`localeMatcher`

Используемый алгоритм сопоставления локалей. Возможными значениями являются `"lookup"` и `"best fit"`; значением по умолчанию является `"best fit"`. Информацию по этой опции смотрите на странице, посвящённой объекту Intl.

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

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

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

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

Предполагая, что среда выполнения поддерживает индонезийское и немецкое, но на балийское форматирование даты и времени, метод `supportedLocalesOf` вернёт неизменными индонезийскую и немецкую языковые метки, даже несмотря на то, что сортировка `pinyin` не относится к форматированию даты и времени, не используется с индонезийским языком и вряд ли будет поддерживаться в немецком языке для Индонезии. Обратите внимание на используемую здесь спецификацию алгоритма `"lookup"` — сопоставление `"best fit"` может решить, что индонезийский язык является адекватным сопоставлением с балийским, поскольку большинство людей, говорящих на балийском, также понимают индонезийский, и поэтому может возвратиться ещё и языковая метка балийского языка.

```js
var locales = ["ban", "id-u-co-pinyin", "de-ID"];
var options = { localeMatcher: "lookup" };
console.log(
  Intl.DateTimeFormat.supportedLocalesOf(locales, options).join(", "),
);
// → "id-u-co-pinyin, de-ID"
```

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

| Specification |
| --- |
| ECMAScript Internationalization API Specification # sec-intl.datetimeformat.supportedlocalesof |

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

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

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

* `Intl.DateTimeFormat`


Intl.DateTimeFormat.prototype.format - JavaScript

Intl.DateTimeFormat.prototype.format
====================================

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

Свойство **`Intl.DateTimeFormat.prototype.format`** возвращает функцию-геттер, форматирующую дату согласно локали и параметрам форматирования соответствующего объекта `DateTimeFormat`.

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

dateTimeFormat.format(date)
```

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

`date`

Дата для форматирования.

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

Функция, возвращённая геттером `format`, форматирует дату согласно локали и параметрам форматирования соответствующего объекта `DateTimeFormat`.

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

### Пример: использование функции `format`

Использование функции, возвращённой геттером `format`, для форматирования одной даты, здесь пример для сербского языка:

```js
var options = {
  weekday: "long",
  year: "numeric",
  month: "long",
  day: "numeric",
};
var dateTimeFormat = new Intl.DateTimeFormat("sr-RS", options);
console.log(dateTimeFormat.format(new Date()));
// → "недеља, 7. април 2013."
```

### Пример: использование функции `format` вместе с `map`

Использование функции, возвращённой геттером `format`, для форматирования всех дат в массиве. Обратите внимание, что функция привязана к объекту `DateTimeFormat`, из которого она была получена, так что её можно передавать в `Array.prototype.map()` напрямую.

```js
var a = [new Date(2012, 08), new Date(2012, 11), new Date(2012, 03)];
var options = { year: "numeric", month: "long" };
var dateTimeFormat = new Intl.DateTimeFormat("pt-BR", options);
var formatted = a.map(dateTimeFormat.format);
console.log(formatted.join("; "));
// → "setembro de 2012; dezembro de 2012; abril de 2012"
```

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

| Specification |
| --- |
| ECMAScript Internationalization API Specification # sec-intl.datetimeformat.prototype.format |

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

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

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

* `Intl.DateTimeFormat`
* `Date.prototype.toLocaleString()`
* `Date.prototype.toLocaleDateString()`
* `Date.prototype.toLocaleTimeString()`


Intl.DateTimeFormat.prototype.formatToParts() - JavaScript

Intl.DateTimeFormat.prototype.formatToParts()
=============================================

Метод **`Intl.DateTimeFormat.prototype.formatToParts()`** позволяет выполнять форматирование строк с учётом форматирования `DateTimeFormat`.Синтаксис
---------
```

Intl.DateTimeFormat.prototype.formatToParts(date)
```

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

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

Дата, которую нужно отформатировать.

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

Массив объектов `Array`, содержащий отформатированную дату по частям.

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

Метод `formatToParts()` полезен для пользовательского форматирования строки даты. Он возвращает массив объектов `Array`, содержащий специфичные для данного места токены, из которых можно выстроить пользовательскую строку, которая сохранит специфичные для данного места части. Структура возвращаемого значения методом `formatToParts()` выглядит так:

```js
[
  { type: "day", value: "17" },
  { type: "weekday", value: "Monday" },
];
```

Возможные типы:

day

Строка, используемая для дня, например, `"17"`.

dayPeriod

Строка, используемая для времени суток, например, `"AM"` или `"PM"`.

era

Строка, используемая для эры, например, `"BC"` или `"AD"`.

hour

Строка, используемая для часа, например, `"3"` или `"03"`.

literal

Строка, используемая для разделения значений даты и времени, например, `"/"`, `","`, `"o'clock"`, `"de"` и другие.

minute

Строка, используемая для минут, например, `"00"`.

month

Строка, используемая для месяца, например, `"12"`.

second

Строка, используемая для секунд, например, `"07"` или `"42"`.

timeZoneName

Строка, используемая для названия временной зоны, например, `"UTC"`.

weekday

Строка, используемая для дня недели, например, `"M"`, `"Monday"` или `"Montag"`.

year

Строка, используемая для года, например, `"2012"` или `"96"`.

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

`DateTimeFormat` выводит локализированные строки, которые нельзя изменять напрямую:

```js
var date = Date.UTC(2012, 11, 17, 3, 0, 42);

var formatter = new Intl.DateTimeFormat("ru", {
  weekday: "long",
  year: "numeric",
  month: "numeric",
  day: "numeric",
  hour: "numeric",
  minute: "numeric",
  second: "numeric",
  hour12: true,
  timeZone: "UTC",
});

formatter.format(date);
// "понедельник, 17.12.2012 г., 3:00:42 AM"
```

Однако, во многих пользовательских интерфейсах есть желание настроить форматирование этой строки. Метод `formatToParts` включает форматирование строки с учётом местности, созданной форматером `DateTimeFormat`, предоставляя вам строку по частям:

```js
formatter.formatToParts(date);

// возвращаемое значение:
[
  { type: "weekday", value: "понедельник" },
  { type: "literal", value: ", " },
  { type: "day", value: "17" },
  { type: "literal", value: "." },
  { type: "month", value: "12" },
  { type: "literal", value: "." },
  { type: "year", value: "2012" },
  { type: "literal", value: "г., " },
  { type: "hour", value: "3" },
  { type: "literal", value: ":" },
  { type: "minute", value: "00" },
  { type: "literal", value: ":" },
  { type: "second", value: "42" },
  { type: "literal", value: " " },
  { type: "dayPeriod", value: "AM" },
];
```

Теперь информация доступна по отдельности и может быть отформатирована и объединена снова в пользовательском порядке. Например, используя `Array.prototype.map()`, стрелочные функции, инструкцию switch, шаблонные строки и `Array.prototype.reduce()`.

```js
var dateString = formatter
  .formatToParts(date)
  .map(({ type, value }) => {
    switch (type) {
      case "dayPeriod":
        return `<b>${value}</b>`;
      default:
        return value;
    }
  })
  .reduce((string, part) => string + part);
```

Здесь время суток будет выделено жирным с использованием метода `formatToParts()`.

```js
console.log(formatter.format(date));
// "понедельник, 17.12.2012 г., 3:00:42 AM"

console.log(dateString);
// "понедельник, 17.12.2012 г., 3:00:42 <b>AM</b>"
```

Полифил
-------

Полифил для данного метода доступен здесь.

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

| Specification |
| --- |
| ECMAScript Internationalization API Specification # sec-Intl.DateTimeFormat.prototype.formatToParts |

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

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

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

* `Intl.DateTimeFormat`
* `Intl.DateTimeFormat.prototype.format`
* `Date.prototype.toLocaleString()`
* `Date.prototype.toLocaleDateString()`
* `Date.prototype.toLocaleTimeString()`


Intl.Collator.supportedLocalesOf() - JavaScript

Intl.Collator.supportedLocalesOf()
==================================

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

Метод **`Intl.Collator.supportedLocalesOf()`** возвращает массив, содержащий те из предоставленных локалей, что поддерживаются при сравнении строк без отката к локали по умолчанию среды выполнения.

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

Intl.Collator.supportedLocalesOf(locales[, options])
```

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

`locales`

Строка с языковой меткой BCP 47, либо массив таких строк. Описание общей формы и интерпретации аргумента `locales` смотрите на странице, посвящённой объекту Intl.

`options`

Необязательный параметр. Объект, который может содержать следующее свойство:

`localeMatcher`

Используемый алгоритм сопоставления локалей. Возможными значениями являются `"lookup"` и `"best fit"`; значением по умолчанию является `"best fit"`. Информацию по этой опции смотрите на странице, посвящённой объекту Intl.

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

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

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

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

Предполагая, что среда выполнения поддерживает индонезийское и немецкое, но на балийское сравнение строк, метод `supportedLocalesOf` вернёт неизменными индонезийскую и немецкую языковые метки, даже несмотря на то, что сортировка `pinyin` не используется с индонезийским языком и вряд ли будет поддерживаться в немецком языке для Индонезии. Обратите внимание на используемую здесь спецификацию алгоритма `"lookup"` — сопоставление `"best fit"` может решить, что индонезийский язык является адекватным сопоставлением с балийским, поскольку большинство людей, говорящих на балийском, также понимают индонезийский, и поэтому может возвратиться ещё и языковая метка балийского языка.

```js
var locales = ["ban", "id-u-co-pinyin", "de-ID"];
var options = { localeMatcher: "lookup" };
console.log(Intl.Collator.supportedLocalesOf(locales, options).join(", "));
// → "id-u-co-pinyin, de-ID"
```

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

| Specification |
| --- |
| ECMAScript Internationalization API Specification # sec-intl.collator.supportedlocalesof |

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

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

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

* `Intl.Collator`


Intl.Collator.prototype.resolvedOptions() - JavaScript

Intl.Collator.prototype.resolvedOptions()
=========================================

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

Метод **`Intl.Collator.prototype.resolvedOptions()`** возвращает новый объект со свойствами, отражающими локаль и параметры сравнения строк, вычисленные во время инициализации соответствующего объекта `Collator`.

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

collator.resolvedOptions()
```

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

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

`locale`

Языковая метка BCP 47 реально используемой локали. Если во входной языковой метке BCP 47 запрошены какие-либо расширения Unicode, приведшие к этой локали, запрошенные и поддерживаемые для этой локали пары ключ-значение также будут включены в свойство `locale`.

`usage`

`sensitivity`

`ignorePunctuation`

Значения, предоставленные для этих свойств в аргументе `options`, либо значения по умолчанию.

`collation`

Значение, запрошенное ключом расширения Unicode `"co"`, если он поддерживается для локали `locale`, либо значение `"default"`.

`numeric`

`caseFirst`

Значения, предоставленные для этих свойств в аргументе `options` или запрошенные ключами расширения Unicode `"kn"` и `"kf"`, либо значения по умолчанию. Если реализация не поддерживает эти свойства, они будут опущены.

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

| Specification |
| --- |
| ECMAScript Internationalization API Specification # sec-intl.collator.prototype.resolvedoptions |

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

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

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

* `Intl.Collator`


Intl.Collator.prototype.compare - JavaScript

Intl.Collator.prototype.compare
===============================

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

Свойство **`Intl.Collator.prototype.compare`** возвращает функцию-геттер, сравнивающую две строки согласно порядку сортировки соответствующего объекта `Collator`.

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

collator.compare(string1, string2)
```

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

`string1`

`string2`

Сравниваемые друг с другом строки.

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

Функция, возвращённая геттером `compare`, возвращает число, указывающее, как строки `string1` и `string2` сравниваются друг с другом в соответствии с порядком сортировки объекта `Collator`: отрицательное значение, если строка `string1` предшествует строке `string2`; положительное значение, если строка `string1` следует за строкой `string2`; 0, если строки считаются равными.

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

### Пример: использование функции `compare` для сортировки массива

Использование функции, возвращённой геттером `compare`, для сортировки массивов. Обратите внимание, что функция привязана к объекту `Collator`, из которого она была получена, так что её можно передавать в `Array.prototype.sort()` напрямую.

```js
var a = ["Offenbach", "Österreich", "Odenwald"];
var collator = new Intl.Collator("de-u-co-phonebk");
a.sort(collator.compare);
console.log(a.join(", "));
// → "Odenwald, Österreich, Offenbach"
```

### Пример: использование функции `compare` для поиска в массиве

Использование функции, возвращённой геттером `compare`, для поиска совпадающих строк в массиве:

```js
var a = ["Congrès", "congres", "Assemblée", "poisson"];
var collator = new Intl.Collator("fr", {
  usage: "search",
  sensitivity: "base",
});
var s = "congres";
var matches = a.filter(function (v) {
  return collator.compare(v, s) === 0;
});
console.log(matches.join(", "));
// → "Congrès, congres"
```

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

| Specification |
| --- |
| ECMAScript Internationalization API Specification # sec-intl.collator.prototype.compare |

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

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

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

* `Intl.Collator`
* `String.prototype.localeCompare()`


Intl.NumberFormat.supportedLocalesOf() - JavaScript

Intl.NumberFormat.supportedLocalesOf()
======================================

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

Метод **`Intl.NumberFormat.supportedLocalesOf()`** возвращает массив, содержащий те из предоставленных локалей, что поддерживаются при форматировании чисел без отката к локали по умолчанию среды выполнения.

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

Intl.NumberFormat.supportedLocalesOf(locales[, options])
```

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

`locales`

Строка с языковой меткой BCP 47, либо массив таких строк. Описание общей формы и интерпретации аргумента `locales` смотрите на странице, посвящённой объекту Intl.

`options`

Необязательный параметр. Объект, который может содержать следующее свойство:

`localeMatcher`

Используемый алгоритм сопоставления локалей. Возможными значениями являются `"lookup"` и `"best fit"`; значением по умолчанию является `"best fit"`. Информацию по этой опции смотрите на странице, посвящённой объекту Intl.

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

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

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

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

Предполагая, что среда выполнения поддерживает индонезийское и немецкое, но на балийское форматирование чисел, метод `supportedLocalesOf` вернёт неизменными индонезийскую и немецкую языковые метки, даже несмотря на то, что сортировка `pinyin` не относится к форматированию чисел, не используется с индонезийским языком и вряд ли будет поддерживаться в немецком языке для Индонезии. Обратите внимание на используемую здесь спецификацию алгоритма `"lookup"` — сопоставление `"best fit"` может решить, что индонезийский язык является адекватным сопоставлением с балийским, поскольку большинство людей, говорящих на балийском, также понимают индонезийский, и поэтому может возвратиться ещё и языковая метка балийского языка.

```js
var locales = ["ban", "id-u-co-pinyin", "de-ID"];
var options = { localeMatcher: "lookup" };
console.log(Intl.NumberFormat.supportedLocalesOf(locales, options).join(", "));
// → "id-u-co-pinyin, de-ID"
```

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

| Specification |
| --- |
| ECMAScript Internationalization API Specification # sec-intl.numberformat.supportedlocalesof |

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

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

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

* `Intl.NumberFormat`


Intl.NumberFormat.prototype.format - JavaScript

Intl.NumberFormat.prototype.format
==================================

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

Свойство **`Intl.NumberFormat.prototype.format`** возвращает функцию-геттер, форматирующую число согласно локали и параметрам форматирования соответствующего объекта `NumberFormat`.

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

numberFormat.format(number)
```

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

`number`

Число для форматирования.

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

Функция, возвращённая геттером `format`, форматирует число согласно локали и параметрам форматирования соответствующего объекта `NumberFormat`.

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

### Пример: использование функции `format`

Использование функции, возвращённой геттером `format`, для форматирования одного значения валюты, здесь пример для русского языка:

```js
var options = { style: "currency", currency: "RUB" };
var numberFormat = new Intl.NumberFormat("ru-RU", options);
console.log(numberFormat.format(654321.987));
// → "654 321,99 руб."
```

### Пример: использование функции `format` вместе с `map`

Использование функции, возвращённой геттером `format`, для форматирования всех чисел в массиве. Обратите внимание, что функция привязана к объекту `NumberFormat`, из которого она была получена, так что её можно передавать в `Array.prototype.map` напрямую.

```js
var a = [123456.789, 987654.321, 456789.123];
var numberFormat = new Intl.NumberFormat("es-ES");
var formatted = a.map(numberFormat.format);
console.log(formatted.join("; "));
// → "123.456,789; 987.654,321; 456.789,123"
```

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

| Specification |
| --- |
| ECMAScript Internationalization API Specification # sec-intl.numberformat.prototype.format |

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

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

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

* `Intl.NumberFormat`
* `Number.prototype.toLocaleString()`


Intl.NumberFormat.prototype.resolvedOptions() - JavaScript

Intl.NumberFormat.prototype.resolvedOptions()
=============================================

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

Метод **`Intl.NumberFormat.prototype.resolvedOptions()`** возвращает новый объект со свойствами, отражающими локаль и параметры форматирования чисел, вычисленные во время инициализации соответствующего объекта `NumberFormat`.

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

numberFormat.resolvedOptions()
```

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

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

`locale`

Языковая метка BCP 47 реально используемой локали. Если во входной языковой метке BCP 47 запрошены какие-либо расширения Unicode, приведшие к этой локали, запрошенные и поддерживаемые для этой локали пары ключ-значение также будут включены в свойство `locale`.

`numberingSystem`

Значение, запрошенное ключом расширения Unicode `"nu"`, либо значение по умолчанию.

`style`

`useGrouping`

Значения, предоставленные для этих свойств в аргументе `options`, либо значения по умолчанию.

`currency`

`currencyDisplay`

Значения, предоставленные для этих свойств в аргументе `options`, либо значения по умолчанию. Эти свойства присутствуют только в том случае, если свойство `style` равно `"currency"`.

Из следующих двух групп свойств включается только одна:

`minimumIntegerDigits`

`minimumFractionDigits`

`maximumFractionDigits`

Значения, предоставленные для этих свойств в аргументе `options`, либо значения по умолчанию. Эти свойства присутствуют только в том случае, если в аргументе `options` не присутствовало ни свойства `minimumSignificantDigits`, ни свойства `maximumSignificantDigits`.

`minimumSignificantDigits`

`maximumSignificantDigits`

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

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

| Specification |
| --- |
| ECMAScript Internationalization API Specification # sec-intl.numberformat.prototype.resolvedoptions |

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

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

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

* `Intl.NumberFormat`


Proxy.revocable() - JavaScript

Proxy.revocable()
=================

Статический метод **`Proxy.revocable()`** создаёт подлежащий отзыву объект `Proxy`.

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

```js
Proxy.revocable(target, handler)
```

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

`target`

Целевой объект для оборачивания в `Proxy`. Это может быть любой объект (массив, функция или даже другой прокси).

`handler`

Объект, свойства которого являются функциями, которые определяют поведение `proxy`, когда с ним происходит действие.

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

Обычный объект с двумя свойствами:

`proxy`

Прокси объект, идентичный создаваемому с помощью вызова `new Proxy(target, handler)` (en-US).

`revoke`

Функция без параметров для отзыва (выключения) `proxy`.

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

Фабричная функция `Proxy.revocable()` это то же самое, что конструктор `Proxy()` (en-US), но в дополнение к созданию прокси объекта она создаёт функцию `revoke`, которая может быть вызвана для отмены прокси. Прокси объект и функция `revoke` оборачиваются в обычный объект.

Функция `revoke` не принимает параметров и не зависит от значения `this`. Созданный объект `proxy` прикрепляется к функции `revoke` в виде приватного свойства, к которому функция `revoke` обращается при вызове (приватное свойство незаметно извне, но оно влияет на то, как происходит сбор мусора). Объект `proxy` *не* попадает в замыкание функции `revoke` (что делает сбор мусора `proxy` невозможным если `revoke` ещё существует).

После вызова функции `revoke()` прокси становится непригодным для использования: любое обращени к обработчику вызовет `TypeError`. Прокси, будучи однажды отозван, остаётся отозванным, и повторный вызов `revoke()` не имеет эффекта — фактически вызов `revoke()` отделяет объект `proxy` от функции `revoke`, и у неё больше нет доступа к объекту. Если на прокси больше нет ссылок, то он становится доступным для сбора мусора. Функция `revoke` также отделяет `target` и `handler` от `proxy`, поэтому если на `target` нет ссылок, то он тоже становится доступным для сбора мусора (даже если прокси ещё существует), поскольку больше нет явного способа взаимодействия с целевым объектом.

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

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

### Использование Proxy.revocable()

```js
const revocable = Proxy.revocable(
  {},
  {
    get(target, name) {
      return `[[${name}]]`;
    },
  },
);
const proxy = revocable.proxy;
console.log(proxy.foo); // "[[foo]]"

revocable.revoke();

console.log(proxy.foo); // возникает исключение TypeError
proxy.foo = 1; // снова TypeError
delete proxy.foo; // всё ещё TypeError
typeof proxy; // "object", typeof не вызывает никаких proxy-перехватчиков событий
```

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

| Specification |
| --- |
| ECMAScript Language Specification # sec-proxy.revocable |

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

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

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

* `Proxy`


handler.deleteProperty() - JavaScript

handler.deleteProperty()
========================

Метод **`handler.deleteProperty()`** является "ловушкой" (функция-перехватчик) для оператора `delete`.

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

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

```js
var p = new Proxy(target, {
  deleteProperty: function (target, property) {},
});
```

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

Следующие параметры передаются в метод `deleteProperty`.

`target`

Целевой объект.

`property`

Имя или `Symbol` свойства, которое нужно удалить.

`this` в момент вызова ссылается на объект handler.

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

Метод `deleteProperty` должен возвращать `Boolean`. Значение `true`, если свойство было успешно удалено, в противном случае `false`.

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

Метод **`handler.deleteProperty()`** является "ловушкой" для оператора `delete`.

### Перехваты

Данная "ловушка" может перехватывать следующие операции:

* Удаление свойства: `delete proxy[foo]` and `delete proxy.foo`
* `Reflect.deleteProperty()`
### Инварианты

Если следующие инварианты нарушены, то прокси выдаст ошибку `TypeError`:

* Свойство не может быть удалено, если оно неконфигурируемое собственное свойство целевого объекта.
Примеры
-------

Следующий код перехватывает действие оператора `delete`.

```js
var p = new Proxy(
  {},
  {
    deleteProperty: function (target, prop) {
      if (prop in target) {
        delete target[prop];
        console.log("property removed: " + prop);
        return true;
      } else {
        console.log("property not found: " + prop);
        return false;
      }
    },
  },
);

var result;

p.a = 10;
console.log("a" in p); // true

result = delete p.a; // "property removed: a"
console.log(result); // true
console.log("a" in p); // false

result = delete p.a; // "property not found: a"
console.log(result); // false
```

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

| Specification |
| --- |
| ECMAScript Language Specification # sec-proxy-object-internal-methods-and-internal-slots-delete-p |

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

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

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

* `Proxy`
* `handler` (en-US)
* `delete` operator
* `Reflect.deleteProperty()`


handler.apply() - JavaScript

handler.apply()
===============

Метод **`handler.apply()`** является ловушкой для вызова функции.

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

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

const p = new Proxy(target, {
  apply: function(target, thisArg, argumentsList) {
  }
});
```

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

Методу `apply()` передаются следующие параметры. `this` связан с объектом-обработчиком.

`target`

Исходный объект.

`thisArg`

Аргумент `this` для вызова.

`argumentsList`

Список аргументов для вызова.

### Возврат значения

Метод `apply()` может возвращать значение.

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

Метод **`handler.apply()`** является ловушкой для вызова функции.

### Перехват

Ловушка может перехватывать следующие операции:

* `proxy(...args)`
* `Function.prototype.apply()` и `Function.prototype.call()`
* `Reflect.apply()`
### Инварианты

Если следующие инварианты нарушены, то прокси выбросит `TypeError`.

Исходный объект `target` должен быть самовызываемым. То есть, это должна быть функция-объект.

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

### Ловушка для вызова функции

Следующий код ловит вызов функции.

```js
const p = new Proxy(function () {}, {
  apply: function (target, thisArg, argumentsList) {
    console.log("called: " + argumentsList.join(", "));
    return argumentsList[0] + argumentsList[1] + argumentsList[2];
  },
});

console.log(p(1, 2, 3)); // "called: 1, 2, 3"
// 6
```

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

| Specification |
| --- |
| ECMAScript Language Specification # sec-proxy-object-internal-methods-and-internal-slots-call-thisargument-argumentslist |

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

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

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

* `Proxy`
* `handler` (en-US)
* `Function.prototype.apply()`
* `Function.prototype.call()`
* `Reflect.apply()`


handler.get() - JavaScript

handler.get()
=============

Метод **`handler.get()`** является ловушкой для получения значения свойства.

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

Syntax
------
```

const p = new Proxy(target, {
  get: function(target, property, receiver) {
  }
});
```

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

Следующие параметры передаются методу `get()`. `this` привязан к обработчику.

`target`

Исходный объект, который проксируется.

`property`

Наименование или `Symbol` получаемого свойства.

`receiver`

Прокси или объект, наследуемый от прокси..

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

Метод `get()` может возвращать значение.

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

Метод **`handler.get()`** является ловушкой для получения значения свойства.

### Перехват

Эта ловушка может перехватывать следующие операции:

* Доступ к свойству: `proxy[foo]` and `proxy.bar`
* Доступ к наследованному свойству: `Object.create(proxy)[foo]`
* `Reflect.get()`
### Инварианты

Если следующие инварианты нарушены, то прокси выбросит `TypeError`:

* Значение, сообщаемое для свойства, должно быть таким же, как значение соответствующего свойства целевого объекта, если свойство целевого объекта является неперезаписываемым, не настраиваемым свойством собственных данных.
* Значение, сообщаемое для свойства, должно быть undefined, если соответствующее свойство целевого объекта не является настраиваемым собственным свойством доступа, которое `undefined` как и его атрибут `[[Get]]` attribute.
Примеры
-------

### Ловушка для получения значения свойства

Следующий код перехватывает получение значения свойства.

```js
const p = new Proxy(
  {},
  {
    get: function (target, property, receiver) {
      console.log("called: " + property);
      return 10;
    },
  },
);

console.log(p.a); // "called: a"
// 10
```

Следующий код нарушает инвариант.

```js
const obj = {};
Object.defineProperty(obj, "a", {
  configurable: false,
  enumerable: false,
  value: 10,
  writable: false,
});

const p = new Proxy(obj, {
  get: function (target, property) {
    return 20;
  },
});

p.a; // TypeError is thrown
```

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

| Specification |
| --- |
| ECMAScript Language Specification # sec-proxy-object-internal-methods-and-internal-slots-get-p-receiver |

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

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

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

* `Proxy`
* `handler` (en-US)
* `Reflect.get()`


handler.set() - JavaScript

handler.set()
=============

Метод **handler.set()** является ловушкой для установки значения свойству.

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

```js
var p = new Proxy(target, {
  set: function (target, property, value, receiver) {},
});
```

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

Следующие параметры передаются методу `set()` . `this` привязан к обработчику

`target`

Исходный объект, который проксируется.

`property`

Имя свойства, в которое устанавливается значение `value`.

`value`

Значение, устанавливаемое в свойство `property`.

`receiver`

 Объект, которому первоначально было присвоено задание. Обычно это сам прокси. Но обработчик `set()` также может быть вызван косвенно, через цепочку прототипов или различными другими способами.
 Например, предположим, что скрипт выполняет `obj.name = "jen"`, при этом `obj` не является прокси и не имеет собственного свойства `.name`, но имеет прокси в цепочке прототипов. Будет вызван обработчик прокси `set()` , а `obj` будет передан в качестве получателя.

### Возвращаемые результаты

Метод `set` должен возвращать boolean значение.

* Возвращает `true`, если присвоение выполнено успешно.
* Если метод `set()` возвращает `false`, а присваивание произошло в коде строгого режима, то будет выброшена `TypeError`.
Описание
--------

Метод **`handler.set`** является ловушкой для установки значения свойству.

### Перехват

Эта ловушка может перехватывать следующие операции:

* Установка значения свойству: `proxy[foo] = bar` and `proxy.foo = bar`
* Установка значения наследованному свойству: `Object.create(proxy)[foo] = bar`
* `Reflect.set()` (en-US)
### Инварианты

Если нарушены следующие инварианты, то proxy выбросит `TypeError`:

* Невозможно изменить значение свойства так, чтобы оно отличалось от значения соответствующего свойства целевого объекта, если соответствующее свойство целевого объекта не является доступным для записи и не настраиваемым свойством данных.
* Невозможно установить значение свойства, если соответствующее свойство целевого объекта является неконфигурируемым свойством средства доступа, для которого в качестве атрибута [[Set]] указано значение undefined.
* В строгом режиме при возврате из обработчика `set()` значения `false`, будет выброшено исключение `TypeError`.
Примеры
-------

Следующий код перехватывает установку значения свойству.

```js
var p = new Proxy(
  {},
  {
    set: function (target, prop, value, receiver) {
      target[prop] = value;
      console.log("property set: " + prop + " = " + value);
      return true;
    },
  },
);

console.log("a" in p); // false

p.a = 10; // "property set: a = 10"
console.log("a" in p); // true
console.log(p.a); // 10
```

Specifications
--------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-proxy-object-internal-methods-and-internal-slots-set-p-v-receiver |

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

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

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

* `Proxy`
* `handler` (en-US)
* `Reflect.set()` (en-US)


Date.prototype.toLocaleDateString() - JavaScript

Date.prototype.toLocaleDateString()
===================================

Метод **`toLocaleDateString()`** возвращает строку с языкозависимым представлением части с датой в этой дате. Новые аргументы `locales` и `options` позволяют приложениям определять язык, чьи соглашения по форматированию должны использоваться, а также менять поведение этого метода. В старых реализациях, игнорирующих аргументы `locales` и `options`, используемая локаль и форма возвращённой строки целиком зависит от реализации.

При форматировании большого количества дат лучшим вариантом будет создание объекта `Intl.DateTimeFormat` и использование функции, предоставляемой его свойством `format`.

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

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

```js
toLocaleDateString()
toLocaleDateString(locales)
toLocaleDateString(locales, options)
```

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

Параметры `locales` и `options` изменяют поведение функции и позволяют приложениям определять язык, правила форматирования которого, следует использовать.

В реализациях, поддерживающих `Intl.DateTimeFormat` API, эти параметры соответствуют параметрам конструктора `Intl.DateTimeFormat()` (en-US). Реализации без поддержки `Intl.DateTimeFormat` должны игнорировать оба параметра, используя локаль и формат возвращаемой строки определяемые самой реализацией.

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

Строка с языковым тегом BCP 47 или массив таких строк. Соответствует параметру `locales` (en-US) конструктора `Intl.DateTimeFormat().

В реализациях без поддержки `Intl.DateTimeFormat` этот параметр игнорируется и обычно используется локаль устройства.

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

Объект определяющий выходной формат. Соответствует параметру `options` (en-US) конструктора `Intl.DateTimeFormat()`. Опция `timeStyle` должна быть `undefined` или будет возникать `TypeError`. Если `weekday`, `year`, `month` и `day` одновременно равны `undefined`, то `year`, `month` и `day` будут установлены в `"numeric"`.

В реализациях без поддержки `Intl.DateTimeFormat` этот параметр игнорируется.

Смотрите описание конструктора `Intl.DateTimeFormat()` (en-US) для подробностей использования этих параметров.

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

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

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

```js
var date = new Date(Date.UTC(2012, 11, 12, 3, 0, 0));

// Вывод toLocaleDateString() без аргументов зависит от реализации,
// локали по умолчанию и часового пояса по умолчанию
console.log(date.toLocaleDateString());
// "12/11/2012", если код запущен с локалью en-US и часовым поясом America/Los\_Angeles
```

### Проверка поддержки параметров `locales` и `options`

Параметры `locales` и `options` поддерживаются ещё не всеми браузерами. Для проверки того, поддерживает ли их уже реализация, можно затребовать несуществующую метку языка и проверить, будет ли выброшено исключение `RangeError`:

```js
function toLocaleDateStringSupportsLocales() {
  try {
    new Date().toLocaleDateString("i");
  } catch (e) {
    return e.name === "RangeError";
  }
  return false;
}
```

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

Этот пример показывает некоторые локализованные форматы даты. Для получения формата языка, используемого в пользовательском интерфейсе вашего приложения, убедитесь, что вы указали этот язык (и, возможно, несколько запасных языков) через аргумент `locales`:

```js
var date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));

// Форматирование ниже предполагает, что местный часовой пояс равен
// America/Los\_Angeles для локали США

// В американском английском используется порядок месяц-день-год
console.log(date.toLocaleDateString("en-US"));
// "12/19/2012"

// В британском английском используется порядок день-месяц-год
console.log(date.toLocaleDateString("en-GB"));
// "20/12/2012"

// В корейском используется порядок год-месяц-день
console.log(date.toLocaleDateString("ko-KR"));
// "2012. 12. 20."

// В большинстве арабоязычных стран используют настоящие арабские цифры
console.log(date.toLocaleDateString("ar-EG"));
// "٢٠/١٢/٢٠١٢"

// В Японии приложения могут захотеть использовать японский календарь,
// в котором 2012 год является 24-м годом эры Хейсей
console.log(date.toLocaleDateString("ja-JP-u-ca-japanese"));
// "24/12/20"

// Если запрашиваемый язык может не поддерживаться, например
// балийский, откатываемся на запасной язык, в данном случае индонезийский
console.log(date.toLocaleDateString(["ban", "id"]));
// "20/12/2012"
```

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

Результат, предоставляемый методом `toLocaleDateString()`, может быть настроен с помощью параметра `options`:

```js
var date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));

// Запрашиваем день недели вместе с длинным форматом даты
var options = {
  weekday: "long",
  year: "numeric",
  month: "long",
  day: "numeric",
};
console.log(date.toLocaleDateString("de-DE", options));
// "Donnerstag, 20. Dezember 2012"

// Приложение может захотеть использовать UTC и показать это
options.timeZone = "UTC";
options.timeZoneName = "short";
console.log(date.toLocaleDateString("en-US", options));
// "Thursday, December 20, 2012, GMT"
```

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

| Specification |
| --- |
| ECMAScript Language Specification # sec-date.prototype.tolocaledatestring |
| ECMAScript Internationalization API Specification # sup-date.prototype.tolocaledatestring |

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

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

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

* `Intl.DateTimeFormat`
* `Date.prototype.toLocaleString()`
* `Date.prototype.toLocaleTimeString()`
* `Date.prototype.toString()`


Date.prototype.getMonth() - JavaScript

Date.prototype.getMonth()
=========================

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

Метод **`getMonth()`** возвращает месяц указанной даты по местному времени, нумерация месяцев начинается с нуля для первого месяца в году.

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

dateObj.getMonth()
```

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

Нет.

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

Значение, возвращённое методом `getMonth()`, является целым числом от 0 до 11. 0 соответствует январю, 1 — февралю и так далее.

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

### Пример: использование метода `getMonth()`

Вторая инструкция в примере ниже присваивает значение 11 переменной `month` из значения переменной `date` объекта `Date`.

```js
let date = new Date("December 25, 1995 23:15:30");
let month = date.getMonth();

console.log(month); // 11
```

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

| Specification |
| --- |
| ECMAScript Language Specification # sec-date.prototype.getmonth |

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

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

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

* `Date.prototype.getUTCMonth()`
* `Date.prototype.setMonth()`


Date.prototype.getDate() - JavaScript

Date.prototype.getDate()
========================

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

Метод **`getDate()`** возвращает день месяца указанной даты по местному времени.

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

dateObj.getDate()
```

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

Нет.

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

Значение, возвращённое методом `getDate()`, является целым числом от 1 до 31.

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

### Пример: использование метода `getDate()`

Вторая инструкция в примере ниже присваивает значение 25 переменной `day` из значения объекта `Date` `date`.

```js
let date = new Date("December 25, 1995 23:15:30");
let day = date.getDate();

console.log(day); // 25
```

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

| Specification |
| --- |
| ECMAScript Language Specification # sec-date.prototype.getdate |

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

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

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

* `Date.prototype.getUTCDate()`
* `Date.prototype.getUTCDay()`
* `Date.prototype.setDate()`


Date.prototype.valueOf() - JavaScript

Date.prototype.valueOf()
========================

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

Метод **`valueOf()`** возвращает примитивное значение объекта `Date`.

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

dateObj.valueOf()
```

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

Нет.

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

Метод `valueOf()` возвращает примитивное значение объекта `Date` в виде числового типа данных — количества миллисекунд, прошедших с полуночи 01 января 1970 по UTC.

Этот метод полностью функционально эквивалентен методу `Date.prototype.getTime()`.

Этот метод обычно вызывается внутренними механизмами движка JavaScript, а не явно в коде.

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

### Пример: использование метода `valueOf()`

```js
var x = new Date(56, 6, 17);
var myVar = x.valueOf(); // присваивает -424713600000 переменной myVar
```

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

| Specification |
| --- |
| ECMAScript Language Specification # sec-date.prototype.valueof |

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

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

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

* `Object.prototype.valueOf()`
* `Date.prototype.getTime()`


Date.prototype.setSeconds() - JavaScript

Date.prototype.setSeconds()
===========================

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

Метод **`setSeconds()`** устанавливает секунды указанной даты по местному времени.

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

dateObj.setSeconds(secondsValue[, msValue])
```

### Версия до JavaScript 1.3
```

dateObj.setSeconds(secondsValue)
```

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

`secondsValue`

Целое число от 0 до 59, представляющее количество секунд.

`msValue`

Необязательный параметр. Число от 0 до 999, представляющее количество миллисекунд.

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

Если вы не определите значения параметра `msValue`, будет использоваться значение, возвращаемое методом `getMilliseconds()`.

Если значение определяемого параметра будет выходить за пределы ожидаемого диапазона, метод `setSeconds()` попытается соответственно обновить другой параметр и информацию о дате в объекте `Date`. Например, если в качестве `secondsValue` передать значение 100, минуты увеличатся на 1, а в качестве секунд будет использоваться значение 40.

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

### Пример: использование метода `setSeconds()`

```js
var theBigDay = new Date();
theBigDay.setSeconds(30);
```

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

| Specification |
| --- |
| ECMAScript Language Specification # sec-date.prototype.setseconds |

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

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

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

* `Date.prototype.getSeconds()`
* `Date.prototype.setUTCSeconds()`


Date.prototype.getUTCMonth() - JavaScript

Date.prototype.getUTCMonth()
============================

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

Метод **`getUTCMonth()`** возвращает месяц указанной даты по всемирному координированному времени, нумерация месяцев начинается с нуля для первого месяца в году.

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

dateObj.getUTCMonth()
```

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

Нет.

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

Значение, возвращённое методом `getUTCMonth()`, является целым числом от 0 до 11. 0 соответствует январю, 1 — февралю и так далее.

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

### Пример: использование метода `getUTCMonth()`

В следующем примере переменной `month` присваивается значение месяца из текущей даты.

```js
var today = new Date();
var month = today.getUTCMonth();
```

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

| Specification |
| --- |
| ECMAScript Language Specification # sec-date.prototype.getutcmonth |

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

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

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

* `Date.prototype.getMonth()`
* `Date.prototype.setUTCMonth()`


Date.prototype.setFullYear() - JavaScript

Date.prototype.setFullYear()
============================

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

Метод **`setFullYear()`** устанавливает полный год указанной даты по местному времени.

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

dateObj.setFullYear(yearValue[, monthValue[, dayValue]])
```

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

`yearValue`

Целое число, определяющее значение года, например, 1995.

`monthValue`

Необязательный параметр. Целое число от 0 до 11, представляющее месяцы от января до декабря.

`dayValue`

Необязательный параметр. Целое число от 1 до 31, представляющее день месяца. Если вы определите параметр `dayValue`, вы также должны определить параметр `monthValue`.

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

Текущее время в миллисекундах для нового значения даты — такое же значение как и у метода `getTime()` для текущего объекта **после** вызова `setFullYear()`.

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

Если вы не определите значения параметров `monthValue` и `dayValue`, будут использоваться значения, возвращаемые методами `getMonth()` и `getDate()`.

Если значение определяемого параметра будет выходить за пределы ожидаемого диапазона, метод `setFullYear()` попытается соответственно обновить другие параметры и информацию о дате в объекте `Date`. Например, если в качестве `monthValue` передать значение 15, год увеличится на 1 (`yearValue + 1`), а в качестве месяца будет использоваться значение 3.

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

### Пример: использование метода `setFullYear()`

```js
var theBigDay = new Date();
theBigDay.setFullYear(1997);
```

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

| Specification |
| --- |
| ECMAScript Language Specification # sec-date.prototype.setfullyear |

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

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

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

* `Date.prototype.getUTCFullYear()`
* `Date.prototype.setUTCFullYear()`
* `Date.prototype.setYear()`


Date.prototype.getMilliseconds() - JavaScript

Date.prototype.getMilliseconds()
================================

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

Метод **`getMilliseconds()`** возвращает миллисекунды указанной даты по местному времени.

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

dateObj.getMilliseconds()
```

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

Нет.

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

Значение, возвращённое методом `getMilliseconds()`, является целым числом от 0 до 999.

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

### Пример: использование метода `getMilliseconds()`

В следующем примере переменной `milliseconds` присваиваются миллисекунды текущего времени:

```js
let today = new Date();
let milliseconds = today.getMilliseconds();

console.log(milliseconds); // 709
```

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

| Specification |
| --- |
| ECMAScript Language Specification # sec-date.prototype.getmilliseconds |

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

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

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

* `Date.prototype.getUTCMilliseconds()`
* `Date.prototype.setMilliseconds()`


Date.prototype.setUTCMilliseconds() - JavaScript

Date.prototype.setUTCMilliseconds()
===================================

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

Метод **`setUTCMilliseconds()`** устанавливает миллисекунды указанной даты по всемирному координированному времени.

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

dateObj.setUTCMilliseconds(millisecondsValue)
```

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

`millisecondsValue`

Целое число от 0 до 999, представляющее миллисекунды.

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

Если значение параметра `millisecondsValue` будет выходить за пределы ожидаемого диапазона, метод `setUTCMilliseconds()` попытается соответственно обновить объект `Date`. Например, если в качестве `millisecondsValue` передать значение 1100, количество секунд увеличится на 1, а в качестве миллисекунд будет использоваться значение 100.

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

### Пример: использование метода `setUTCMilliseconds()`

```js
var theBigDay = new Date();
theBigDay.setUTCMilliseconds(500);
```

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

| Specification |
| --- |
| ECMAScript Language Specification # sec-date.prototype.setutcmilliseconds |

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

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

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

* `Date.prototype.getUTCMilliseconds()`
* `Date.prototype.setMilliseconds()`


Date.prototype.getUTCSeconds() - JavaScript

Date.prototype.getUTCSeconds()
==============================

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

Метод **`getUTCSeconds()`** возвращает секунды указанной даты по всемирному координированному времени.

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

dateObj.getUTCSeconds()
```

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

Нет.

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

Значение, возвращённое методом `getUTCSeconds()`, является целым числом от 0 до 59.

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

### Пример: использование метода `getUTCSeconds()`

В следующем примере переменной `seconds` присваивается количество секунд из текущего времени.

```js
var today = new Date();
var seconds = today.getUTCSeconds();
```

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

| Specification |
| --- |
| ECMAScript Language Specification # sec-date.prototype.getutcseconds |

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

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

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

* `Date.prototype.getSeconds()`
* `Date.prototype.setUTCSeconds()`


Date.prototype.getHours() - JavaScript

Date.prototype.getHours()
=========================

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

Метод **`getHours()`** возвращает часы указанной даты по местному времени.

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

dateObj.getHours()
```

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

Нет.

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

Значение, возвращённое методом `getHours()`, является целым числом от 0 до 23.

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

### Пример: использование метода `getHours()`

Вторая инструкция в примере ниже присваивает значение 23 переменной `hours` из значения объекта `Date` `date`.

```js
let date = new Date("December 25, 1995 23:15:30");
let hours = date.getHours();

console.log(hours); // 23
```

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

| Specification |
| --- |
| ECMAScript Language Specification # sec-date.prototype.gethours |

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

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

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

* `Date.prototype.getUTCHours()`
* `Date.prototype.setHours()`


Date.prototype.setUTCFullYear() - JavaScript

Date.prototype.setUTCFullYear()
===============================

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

Метод **`setUTCFullYear()`** устанавливает полный год указанной даты по всемирному координированному времени.

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

dateObj.setUTCFullYear(yearValue[, monthValue[, dayValue]])
```

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

`yearValue`

Целое число, определяющее значение года, например, 1995.

`monthValue`

Необязательный параметр. Целое число от 0 до 11, представляющее месяцы от января до декабря.

`dayValue`

Необязательный параметр. Целое число от 1 до 31, представляющее день месяца. Если вы определите параметр `dayValue`, вы также должны определить параметр `monthValue`.

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

Если вы не определите значения параметров `monthValue` и `dayValue`, будут использоваться значения, возвращаемые методами `getUTCMonth()` и `getUTCDate()`.

Если значение определяемого параметра будет выходить за пределы ожидаемого диапазона, метод `setUTCFullYear()` попытается соответственно обновить другие параметры и информацию о дате в объекте `Date`. Например, если в качестве `monthValue` передать значение 15, год увеличится на 1 (`yearValue + 1`), а в качестве месяца будет использоваться значение 3.

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

### Пример: использование метода `setUTCFullYear()`

```js
var theBigDay = new Date();
theBigDay.setUTCFullYear(1997);
```

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

| Specification |
| --- |
| ECMAScript Language Specification # sec-date.prototype.setutcfullyear |

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

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

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

* `Date.prototype.getUTCFullYear()`
* `Date.prototype.setFullYear()`


Date.prototype.getUTCHours() - JavaScript

Date.prototype.getUTCHours()
============================

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

Метод **`getUTCHours()`** возвращает часы указанной даты по всемирному координированному времени.

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

dateObj.getUTCHours()
```

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

Нет.

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

Значение, возвращённое методом `getUTCHours()`, является целым числом от 0 до 23.

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

### Пример: использование метода `getUTCHours()`

В следующем примере переменной `hours` присваивается количество часов из текущего времени.

```js
var today = new Date();
var hours = today.getUTCHours();
```

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

| Specification |
| --- |
| ECMAScript Language Specification # sec-date.prototype.getutchours |

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

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

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

* `Date.prototype.getHours()`
* `Date.prototype.setUTCHours()`


Date.prototype.getUTCMilliseconds() - JavaScript

Date.prototype.getUTCMilliseconds()
===================================

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

Метод **`getUTCMilliseconds()`** возвращает миллисекунды указанной даты по всемирному координированному времени.

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

dateObj.getUTCMilliseconds()
```

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

Нет.

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

Значение, возвращённое методом `getUTCMilliseconds()`, является целым числом от 0 до 999.

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

### Пример: использование метода `getUTCMilliseconds()`

В следующем примере переменной `milliseconds` присваивается количество миллисекунд из текущего времени.

```js
var today = new Date();
var milliseconds = today.getUTCMilliseconds();
```

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

| Specification |
| --- |
| ECMAScript Language Specification # sec-date.prototype.getutcmilliseconds |

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

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

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

* `Date.prototype.getMilliseconds()`
* `Date.prototype.setUTCMilliseconds()`


Date.prototype.setMilliseconds() - JavaScript

Date.prototype.setMilliseconds()
================================

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

Метод **`setMilliseconds()`** устанавливает миллисекунды указанной даты по местному времени.

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

dateObj.setMilliseconds(millisecondsValue)
```

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

`millisecondsValue`

Целое число от 0 до 999, представляющее миллисекунды.

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

Если значение параметра `millisecondsValue` будет выходить за пределы ожидаемого диапазона, метод `setMilliseconds()` соответственно обновит объект `Date`. Например, если в качестве `millisecondsValue` передать значение 1005, количество секунд увеличится на 1, а в качестве миллисекунд будет использоваться значение 5.

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

### Пример: использование метода `setMilliseconds()`

```js
var theBigDay = new Date();
theBigDay.setMilliseconds(100);
```

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

| Specification |
| --- |
| ECMAScript Language Specification # sec-date.prototype.setmilliseconds |

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

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

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

* `Date.prototype.getMilliseconds()`
* `Date.prototype.setUTCMilliseconds()`