Integerデータタイプ
Integerデータタイプ
概要
JavaScriptはすべての数字を64ビットの浮動小数点として保存しています.これは整数の正確さを53のバイナリビットまで決定しました.この範囲より大きい整数はJavaScriptが正確に表現できないので、JavaScriptが科学と金融の正確な計算に適合しないようにします.
現在、新しいデータタイプInteger(整数)を導入して、この問題を解決する提案があります.整数タイプのデータは整数だけを表し、桁数の制限がなく、任意の桁数の整数も正確に表現できます.
Numberタイプと区別するためには、Integerタイプのデータは、拡張子
概要
JavaScriptはすべての数字を64ビットの浮動小数点として保存しています.これは整数の正確さを53のバイナリビットまで決定しました.この範囲より大きい整数はJavaScriptが正確に表現できないので、JavaScriptが科学と金融の正確な計算に適合しないようにします.
現在、新しいデータタイプInteger(整数)を導入して、この問題を解決する提案があります.整数タイプのデータは整数だけを表し、桁数の制限がなく、任意の桁数の整数も正確に表現できます.
Numberタイプと区別するためには、Integerタイプのデータは、拡張子
n
を使用して表される必要があります.
1n + 2n // 3n
二进制、八进制、十六进制的表示法,都要加上后缀
n
。
0b1101n //
0o777n //
0xFFn //
typeof
运算符对于 Integer 类型的数据返回integer
。
typeof 123n
// 'integer'
JavaScript 原生提供
Integer
对象,用来生成 Integer 类型的数值。转换规则基本与Number()
一致。
Integer(123) // 123n
Integer('123') // 123n
Integer(false) // 0n
Integer(true) // 1n
以下的用法会报错。
new Integer() // TypeError
Integer(undefined) //TypeError
Integer(null) // TypeError
Integer('123n') // SyntaxError
Integer('abc') // SyntaxError
运算
在数学运算方面,Integer 类型的
+
、-
、*
和**
这四个二元运算符,与 Number 类型的行为一致。除法运算/
会舍去小数部分,返回一个整数。
9n / 5n
// 1n
几乎所有的 Number 运算符都可以用在 Integer,但是有两个除外:不带符号的右移位运算符
>>>
和一元的求正运算符+
,使用时会报错。前者是因为>>>
要求最高位补 0,但是 Integer 类型没有最高位,导致这个运算符无意义。后者是因为一元运算符+
在 asm.js 里面总是返回 Number 类型或者报错。Integer 类型不能与 Number 类型进行混合运算。
1n + 1
//
这是因为无论返回的是 Integer 或 Number,都会导致丢失信息。比如
(2n**53n + 1n) + 0.5
这个表达式,如果返回 Integer 类型,0.5
这个小数部分会丢失;如果返回 Number 类型,会超过 53 位精确数字,精度下降。相等运算符(
==
)会改变数据类型,也是不允许混合使用。
0n == 0
// TypeError
0n == false
// TypeError
(
===
) , 。
0n === 0
// false
142