Javascript 提案 BigInt 的一些坑

本文总结了JavaScript中BigInt类型的使用陷阱,包括定义形式(支持二进制、八进制、十六进制,不支持科学计数法)、转换为字符串时无后缀、仅有一个零值、等值判断的特例、与Number比较的差异以及类型转换的限制。通过实例展示了BigInt在数组、集合、比较和类型转换等方面需要注意的问题。
摘要由CSDN通过智能技术生成

昨天译了一篇文章:BigInt:JavaScript 中的任意精度整数。昨晚又抽空总结了一下 BigInt 的那些坑。

1. 定义形式

BigInt 使用数字字面量加 n 表示支持二进制、八进制、十六进制形式。

对于八进制,只支持新写法 0o064n,不支持旧的写法 0640

  1. 普通写法:

 
 
  1. 1n

  1. 十六进制:

 
 
  1. 0x6n

  2. 0X6n

  1. 八进制:

 
 
  1. 0o6n

  2. 0O6n

  3. 06n  // ❌SyntaxError

  1. 二进制:

 
 
  1. 0b10n

  2. 0B10n

  1. BigInt 不支持科学计数法形式:

 
 
  1. 1e25n // ❌ SyntaxError

2. 转换为字符串

当作为 key 时,所有值都会被转换为字符串,而 BigInt 转字符串时是没有后缀 n 的。

 
 
  1. String(12n) === "12"

因此:

 
 
  1. let obj = { };

  2. obj[32n] = 1;

  3. obj[32] === 1;

数组同理, array[5n] 等同于 array[5] 等同于 array["5"]

:这并不意味着 array[xxxn]array[xxx] 是一样的。因为 BigInt 可以超越 Number 的安全表示边界。

 
 
  1. let obj = {};

  2. obj[9007199254740993n] = "foo";

  3. obj[9007199254740993n] === "foo";

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值