前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JS面试题-js新增基本数据类型BigInt

JS面试题-js新增基本数据类型BigInt

作者头像
用户10106350
发布2022-10-28 13:13:40
6950
发布2022-10-28 13:13:40
举报
文章被收录于专栏:WflynnWeb

什么是BigInt?

BigInt 是一种内置对象,它提供了一种方法来表示大于 2的53次方 - 1 的整数。这原本是 Javascript 中可以用 Number 表示的最大数字。BigInt 可以表示任意大的整数。

为什么需要BigInt?

在JS中,所有的数字都以双精度64位浮点格式表示,那这会带来什么问题呢?

这导致JS中的Number无法精确表示非常大的整数,它会将非常大的整数四舍五入,确切地说,JS中的Number类型只能安全地表示-9007199254740991(-(2^53-1))和9007199254740991((2^53-1)),任何超出此范围的整数值都可能失去精度。

同时也会有一定的安全性问题:

如何创建并使用BigInt?

要创建BigInt,只需要在数字末尾追加n即可。

另一种创建BigInt的方法是用BigInt()构造函数

简单使用如下:

代码语言:javascript
复制
10n + 20n;    // → 30n
10n - 20n;    // → -10n
+10n;         // → TypeError: Cannot convert a BigInt value to a number
// BigInt不支持一元加号运算符, 这可能是某些程序可能依赖于 + 始终生成 Number 的不变量,或者抛出异常。
-10n;         // → -10n
10n * 20n;    // → 200n
20n / 10n;    // → 2n
23n % 10n;    // → 3n
10n ** 3n;    // → 1000n
代码语言:javascript
复制
const x = 10n;
++x;          // → 11n
--x;          // → 9n
console.log(typeof x);   //"bigint"
代码语言:javascript
复制
它在某些方面类似于 Number ,但是也有几个关键的不同点:不能用与 Math 对象中的方法
代码语言:javascript
复制
Math.floor(1.1) // 1
Math.floor(1.1n) // Uncaught SyntaxError: Invalid or unexpected token
代码语言:javascript
复制
不能和任何 Number 实例(隐式类型转换可能丢失信息)混合运算,两者必须转换成同一种类型。在两种类型来回转换时要小心,因为 BigInt 变量在转换成 Number 变量时可能会丢失精度。
代码语言:javascript
复制
1 + 2n // Uncaught TypeError: Cannot mix BigInt and other types, use explicit conversions
1n + 2n = 3n
1 + Number(2n) = 3
代码语言:javascript
复制
当使用 BigInt 时,带小数的运算会被取整。
代码语言:javascript
复制
const rounded = 5n / 2n;
// ↪ 2n, not 2.5n
代码语言:javascript
复制
使用 typeof 测试时, BigInt 对象返回 "bigint" :
代码语言:javascript
复制
typeof 1n === 'bigint'; // true
typeof BigInt('1') === 'bigint'; // true
代码语言:javascript
复制
使用 Object 包装后, BigInt 被认为时一个普通 "object" :
代码语言:javascript
复制
typeof Object(1n) === 'object'; // true
BigInt 和 Number 不是严格相等的,但是宽松相等的。0n === 0
// ↪ false
代码语言:javascript
复制
0n == 0
// ↪ true
代码语言:javascript
复制
Number 和 BigInt 可以进行比较。
代码语言:javascript
复制
1n < 2
// ↪ true

2n > 1
// ↪ true

2 > 2
// ↪ false

2n > 2
// ↪ false

2n >= 2
// ↪ true
代码语言:javascript
复制
两者也可以混在一个数组内并排序。
代码语言:javascript
复制
const mixed = [4n, 6, -12n, 10, 4, 0, 0n];
代码语言:javascript
复制
// ↪  [4n, 6, -12n, 10, 4, 0, 0n]

mixed.sort();
// ↪ [-12n, 0, 0n, 10, 4n, 4, 6]
代码语言:javascript
复制
当 Boolean 类型与 BigInt 类型相遇时,BigInt的处理方式与Number类似,换句话说,只要不是0n,BigInt就被视为truthy的值。
代码语言:javascript
复制
if(0n){//条件判断为false
  console.log('false')
}
if(3n){//条件为true
  console.log('true')
}

// 输出true

3.基于案例学SQL优化

链接:https://pan.baidu.com/s/1w3KxP0tCiIli7_hOQVPFAA

提取码:2eh9

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-12-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 WflynnWeb 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是BigInt?
  • 为什么需要BigInt?
  • 如何创建并使用BigInt?
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档