ECMAScript | Числовые Типы

ECMAScript | Числовые Типы

ECMAScript имеет два встроенных числовых типа: тип Number и тип BigInt. В этой спецификации каждый числовой тип T содержит мультипликативное значение идентичности, обозначенное T::unit. Типы спецификации также имеют следующие абстрактные операции, также обозначаемые T::op для данной операции с именем спецификации op. Все типы аргументов являются T. В столбце «Результат» отображается тип возвращаемого значения, а также указывается, могут ли некоторые вызовы операции возвращать внезапное завершение.

 

Краткое содержание призыва Пример источника Вызывается семантикой оценки … Результат
T::unaryMinus(x) x Унарный Оператор () T
T::bitwiseNOT(x) ~x Побитовый оператор НЕ (~) T
T::exponentiate(x, y) x ** y Оператор возведения в степень и Math.pow (основание, показатель степени) T, может выбросить RangeError
T::multiply(x, y) x * y Мультипликативные операторы T
T::divide(x, y) x / y Мультипликативные операторы T, может выбросить RangeError
T::remainder(x, y) x % y Мультипликативные операторы T, может выбросить RangeError
T::add(x, y) x ++
++ x
x + y
Оператор постфиксного приращения, оператор приращения префикса и оператор сложения (+) T
T::subtract(x, y) x
x
x y
Постфиксный оператор декремента, префиксный оператор декремента и оператор вычитания (-) T
T::leftShift(x, y) x << y Оператор левого сдвига (<<) T
T::signedRightShift(x, y) x >> y Подписанный оператор сдвига вправо (>>) T
T::unsignedRightShift(x, y) x >>> y Оператор беззнакового сдвига вправо (>>>) T, может вызвать TypeError
T::lessThan(x, y) x < y
x > y
x <= y
x >= y
Операторы отношения через абстрактное реляционное сравнение Boolean или undefined (для неупорядоченных входов)
T::equal(x, y) x == y
x != y
x === y
x !== y
Операторы равенства через строгое сравнение равенства Boolean
T::sameValue(x, y) Внутренние методы объекта через SameValue(x, y) для проверки точного равенства значений Boolean
T::sameValueZero(x, y) Методы Array, Map и Set через SameValueZero(x, y) для проверки равенства значений, игнорируя различия между членами нулевой когорты (т. е. -0𝔽 и +0𝔽) Boolean
T::bitwiseAND(x, y) & y Двоичные побитовые операторы T
T::bitwiseXOR(x, y) x ^ y Двоичные побитовые операторы T
T::bitwiseOR(x, y) x | y Двоичные побитовые операторы T
T::toString(x) String(x) Многие выражения и встроенные функции через ToString(argument) String

Таблица 2: Операции с числовыми типами

 

Значение T::unit и T::op операция не являются частью языка ECMAScript; они определены здесь исключительно для помощи в спецификации семантики языка ECMAScript. Другие абстрактные операции определены в этой спецификации.

Поскольку числовые типы, как правило, не могут быть преобразованы без потери точности или усечения, язык ECMAScript не обеспечивает неявного преобразования между этими типами. Программисты должны явно вызывать функции Number и BigInt для преобразования между типами при вызове функции, требующей другого типа.

Примечание

В первой и последующих редакциях ECMAScript для некоторых операторов были предусмотрены неявные числовые преобразования, которые могли потерять точность или усечь. Эти устаревшие неявные преобразования поддерживаются для обратной совместимости, но не предусмотрены для BigInt, чтобы свести к минимуму возможность ошибки программиста и оставить открытой возможность обобщенных значений типов (value types) в будущей редакции.

 

6.1.6.1 The Number Type — Тип Number

6.1.6.2 The BigInt Type — Тип BigInt

 

Информационные ссылки

Стандарт ECMAScript — Раздел «6.1.6 Numeric Types» — https://tc39.es/ecma262/#sec-numeric-types