Integer 数据类型

Integer 数据类型

简介

JavaScript 所有数字都保存成 64 位浮点数,这决定了整数的精确程度只能到 53 个二进制位。大于这个范围的整数,JavaScript 是无法精确表示的,这使得 JavaScript 不适合进行科学和金融方面的精确计算。

现在有一个提案,引入了新的数据类型 Integer(整数),来解决这个问题。整数类型的数据只用来表示整数,没有位数的限制,任何位数的整数都可以精确表示。

为了与 Number 类型区别,Integer 类型的数据必须使用后缀n表示。

 
 
  1. 1n + 2n // 3n

二进制、八进制、十六进制的表示法,都要加上后缀n

 
 
  1. 0b1101n // 二进制
  2. 0o777n // 八进制
  3. 0xFFn // 十六进制

typeof运算符对于 Integer 类型的数据返回integer

 
 
  1. typeof 123n
  2. // 'integer'

JavaScript 原生提供Integer对象,用来生成 Integer 类型的数值。转换规则基本与Number()一致。

 
 
  1. Integer(123) // 123n
  2. Integer('123') // 123n
  3. Integer(false) // 0n
  4. Integer(true) // 1n

以下的用法会报错。

 
 
  1. new Integer() // TypeError
  2. Integer(undefined) //TypeError
  3. Integer(null) // TypeError
  4. Integer('123n') // SyntaxError
  5. Integer('abc') // SyntaxError

运算

在数学运算方面,Integer 类型的+-***这四个二元运算符,与 Number 类型的行为一致。除法运算/会舍去小数部分,返回一个整数。

 
 
  1. 9n / 5n
  2. // 1n

几乎所有的 Number 运算符都可以用在 Integer,但是有两个除外:不带符号的右移位运算符>>>和一元的求正运算符+,使用时会报错。前者是因为>>>要求最高位补 0,但是 Integer 类型没有最高位,导致这个运算符无意义。后者是因为一元运算符+在 asm.js 里面总是返回 Number 类型或者报错。

Integer 类型不能与 Number 类型进行混合运算。

 
 
  1. 1n + 1
  2. // 报错

这是因为无论返回的是 Integer 或 Number,都会导致丢失信息。比如(2n**53n + 1n) + 0.5这个表达式,如果返回 Integer 类型,0.5这个小数部分会丢失;如果返回 Number 类型,会超过 53 位精确数字,精度下降。

相等运算符(==)会改变数据类型,也是不允许混合使用。

 
 
  1. 0n == 0
  2. // 报错 TypeError
  3. 0n == false
  4. // 报错 TypeError

精确相等运算符(===)不会改变数据类型,因此可以混合使用。

 
 
  1. 0n === 0
  2. // false
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值