ES6 数值的扩展

发布于 2024-08-28 21:01:37 字数 3409 浏览 8 评论 0

二进制和八进制表示法

二进制用前缀 0b0B 表示、八进制数值用和 0o0O 表示,如果要将 0b 和 0o 前缀的字符串数值转为十进制,要使用 Number 方法

Number('0b111')  // 7
Number('0o10')  // 8

Number.isFinite()、Number.isNaN()

它们与传统的全局方法 isFinite()isNaN() 的区别在于,传统方法先调用 Number() 将非数值的值转为数值,再进行判断,而这两个新方法只对数值有效.

  • Number.isFinite() 用来检查一个数值是否为有限的(finite),即不是 Infinity。参数类型不是数值,Number.isFinite一律返回false
  • Number.isNaN() 用来检查一个值是否为NaN,参数类型不是 NaN,Number.isNaN 一律返回 false

Number.parseInt()、Number.parseFloat()

将全局方法 parseInt()parseFloat() ,移植到 Number 对象上面,行为完全保持不变

Number.isInteger()

用来判断一个数值是否为整数。如果参数不是数值,Number.isInteger 返回 false

Number.EPSILON

代表极小的常量 Number.EPSILON,它表示 1 与大于 1 的最小浮点数之间的差。

Number.EPSILON 实际上是 JavaScript 能够表示的最小精度。误差如果小于这个值,就可以认为已经没有意义了,即不存在误差了。

Number.EPSILON 可以用来设置“能够接受的误差范围”。比如,误差范围设为 2 的-50 次方(即 Number.EPSILON * Math.pow(2, 2)),即如果两个浮点数的差小于这个值,我们就认为这两个浮点数相等。

安全整数和 Number.isSafeInteger()

JavaScript 能够准确表示的整数范围在-253到 253之间(不含两个端点),超过这个范围,无法精确表示这个值

Number.MAX_SAFE_INTEGERNumber.MIN_SAFE_INTEGER 这两个常量,用来表示这个范围的上下限

Number.isSafeInteger()则是用来判断一个整数是否落在这个范围之内

指数运算符(**)

这个运算符的一个特点是右结合,而不是常见的左结合。多个指数运算符连用时,是从最右边开始计算的

// 相当于 2 ** (3 ** 2)
2 ** 3 ** 2
// 512

指数运算符可以与等号结合,形成一个新的赋值运算符 (**=)

let a = 1.5;
a **= 2;
// 等同于 a = a * a;
let b = 4;
b **= 3;
// 等同于 b = b * b * b;

BigInt 数据类型

JavaScript 所有数字都保存成 64 位浮点数,这给数值的表示带来了两大限制。

一是数值的精度只能到 53 个二进制位(相当于 16 个十进制位),大于这个范围的整数,JavaScript 是无法精确表示的,这使得 JavaScript 不适合进行科学和金融方面的精确计算。

二是大于或等于 2 的 1024 次方的数值,JavaScript 无法表示,会返回 Infinity

BigInt 只用来表示整数,没有位数的限制,任何位数的整数都可以精确表示。 BigInt 类型的数据必须添加后缀 n

  • BigInt 同样可以使用各种进制表示,都要加上后缀 n:
0b1101n // 二进制
0o777n // 八进制
0xFFn // 十六进制
  • BigInt 与普通整数是两种值,它们之间并不相等
  • typeof 运算符对于 BigInt 类型的数据返回 bigint
  • BigInt 可以使用负号(-),但是不能使用正号(+),因为会与 asm.js 冲突
  • JavaScript 原生提供 BigInt 对象,可以用作构造函数生成 BigInt 类型的数值。转换规则基本与 Number() 一致,将其他类型的值转为 BigInt
BigInt(123) // 123n
BigInt('123') // 123n
BigInt(false) // 0n
BigInt(true) // 1n
  • BigInt() 构造函数必须有参数,而且参数必须可以正常转为数值,下面的用法都会报错
new BigInt() // TypeError
BigInt(undefined) //TypeError
BigInt(null) // TypeError
BigInt('123n') // SyntaxError
BigInt('abc') // SyntaxError

//	参数如果是小数,也会报错。
BigInt(1.5) // RangeError
BigInt('1.5') // SyntaxError

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

梦过后

暂无简介

0 文章
0 评论
22 人气
更多

推荐作者

emdigitizer10

文章 0 评论 0

残龙傲雪

文章 0 评论 0

奢望

文章 0 评论 0

微信用户

文章 0 评论 0

又爬满兰若

文章 0 评论 0

独孤求败

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文