卖坚果的怪叔叔 卖坚果的怪叔叔
  • 首页
  • 生活
  • 技术
  • 记录
  • 工具箱
  • 关于我
首页 › 技术 › ES6入门之数值的扩展

ES6入门之数值的扩展

坚果大叔
2019-04-08 9:57:18技术阅读 2,397

1. 二进制和八进制表示法

ES6提供了二进制和八进制数值的新写法,分别用前缀 0b(0B) 和 0o(0O)表示 如下:

0b111110111 === 503 // true
0o767 === 503 // true

2. Number.isFinite(), Number.isNaN()

ES6在number上提供了 Number.isFinite(), Number.isNaN()两个方法,前者用来检查数值是否为有限的,后者用来检查一个值是否为NAN,如下:

Number.isFinite(15); // true
Number.isFinite(0.8); // true
Number.isFinite(NaN); // false
Number.isFinite(Infinity); // false
Number.isFinite(-Infinity); // false
Number.isFinite('foo'); // false
Number.isFinite('15'); // false
Number.isFinite(true); // false

参数类型如果不是数字就返回false


Number.isNaN(NaN) // true
Number.isNaN(15) // false
Number.isNaN('15') // false
Number.isNaN(true) // false
Number.isNaN(9/NaN) // true
Number.isNaN('true' / 0) // true
Number.isNaN('true' / 'true') // true

与传统的isFinite() 和 isNaN() 的区别在于,传统方法优先调用Number()将非数值的值转为数值,在进行判断。而Number.isFinite()对于非数值一律返回false, Number.isNaN()只有对于NaN才返回true,非NaN一律返回false。

3. Number.parseInt(), Number.parseFloat()

ES6 将全局方法parseInt()和parseFloat(),移植到Number对象上面,行为完全保持不变。减少全局性方法,使得语言逐渐模块化。如下:

// ES5的写法
parseInt('12.34') // 12
parseFloat('123.45#') // 123.45

// ES6的写法
Number.parseInt('12.34') // 12
Number.parseFloat('123.45#') // 123.45

4. Number.isInteger()

Number.isInteger()用来判断一个数值是否为整数,如下:

Number.isInteger(25) // true
Number.isInteger(25.1) // false
Number.isInteger(25.0) // true 整数和浮点数采用相同的存储方式

但是Number.isInteger() 对于数据精度要求比较高的情况不能很好的判断,不建议使用。

5. Number.EPSILON

Number.EPSILON 用来表示1 与 大于1的最小浮点数之间的差,实际上就是JavaScript能够表示的最小精度。

function withinErrorMargin (left, right) {
  return Math.abs(left - right) < Number.EPSILON * Math.pow(2, 2);
}

0.1 + 0.2 === 0.3 // false
withinErrorMargin(0.1 + 0.2, 0.3) // true

1.1 + 1.3 === 2.4 // false
withinErrorMargin(1.1 + 1.3, 2.4) // true

6. 安全整数和 Number.isSafeInteger()

JavaScript能够精准表示的整数范围在 -2^53到2^53之间(不含两个端点),ES6引入了Number.MAX_SAFE_INTEGER和Number.MIN_SAFE_INTEGER这两个常量,用来表示这个范围的上下限。而Number.isSafeInteger() 就是判断一个整数是否在这个范围之内。

7. Math 对象的扩展

ES6 在 Math 对象上新增了 17 个与数学相关的方法。所有这些方法都是静态方法,只能在 Math 对象上调用。


Math.trunc()

用于去除一个数的小树部分,返回整数部分。对于非数值,则用Number方法将其转换为数值,对于空值和无法截取整数的值,返回 NaN。如下:

Math.trunc(4.1) // 4
Math.trunc(4.9) // 4
Math.trunc(-4.1) // -4
Math.trunc(-4.9) // -4
Math.trunc(-0.1234) // -0

// 非数值

Math.trunc('123.456') // 123
Math.trunc(true) //1
Math.trunc(false) // 0
Math.trunc(null) // 0

// 空值和无法截取的值

Math.trunc(NaN);      // NaN
Math.trunc('foo');    // NaN
Math.trunc();         // NaN
Math.trunc(undefined) // NaN
Math.sign()

用来判断一个数是否为正数、负数、还是零,对于非数值,则将其转换为数值。

// 返回五种结果:

-     参数为正数,返回+1;
-     参数为负数,返回-1;
-     参数为 0,返回0;
-     参数为-0,返回-0;
-     其他值,返回NaN。

Math.sign(-5) // -1
Math.sign(5) // +1
Math.sign(0) // +0
Math.sign(-0) // -0
Math.sign(NaN) // NaN

Math.sign('')  // 0
Math.sign(true)  // +1
Math.sign(false)  // 0
Math.sign(null)  // 0
Math.sign('9')  // +1
Math.sign('foo')  // NaN
Math.sign()  // NaN
Math.sign(undefined)  // NaN
Math.cbrt()

用来计算一个数的立方根,与其他相同如果不是数值就先转换为数值。

Math.cbrt(-1) // -1
Math.cbrt(0)  // 0
Math.cbrt(1)  // 1
Math.cbrt(2)  // 1.2599210498948734
Math.clz32()

用来将参数转为32位无符号整数的形式,然后这个32位值里面有多个前导0

Math.imul()

用来返回两个数以32位带符号整数形式相乘的结果,返回的也是一个32位的带符号的整数。

Math.fround()

返回一个32位单精度浮点数形式

Math.hypot()

返回所有参数的平方和的平方根

8. 对数方法

8.1 Math.expm1()

Math.expm1(x)返回 ex - 1,即Math.exp(x) - 1。

8.2 Math.log1p()

Math.log1p(x)方法返回1 + x的自然对数,即Math.log(1 + x)。如果x小于-1,返回NaN。

8.3 Math.log10()

Math.log10(x)返回以 10 为底的x的对数。如果x小于 0,则返回 NaN。

8.4 Math.log2()

Math.log2(x)返回以 2 为底的x的对数。如果x小于 0,则返回 NaN。

9. 双曲函数方法

ES6 新增了 6 个双曲函数方法。

Math.sinh(x) 返回x的双曲正弦(hyperbolic sine)
Math.cosh(x) 返回x的双曲余弦(hyperbolic cosine)
Math.tanh(x) 返回x的双曲正切(hyperbolic tangent)
Math.asinh(x) 返回x的反双曲正弦(inverse hyperbolic sine)
Math.acosh(x) 返回x的反双曲余弦(inverse hyperbolic cosine)
Math.atanh(x) 返回x的反双曲正切(inverse hyperbolic tangent)

10. 指数运算

ES6 新增了指数运算符(**),而且是从右往左计算。

2 ** 3  // 16
2 ** 2 ** 3  === 2 ** (2 ** 3)  //  256 

let a = 1.5  a** = 2  ===  a = a*a
let b =4     b** = 3  ===  b = b* b* b

和 Math.pow 在运算结果的最后一位数字有差异,特别大的运算结果有细微的差异

数值的扩展
赞赏 赞(0)
本文系作者 @坚果大叔 原创发布在 卖坚果的怪叔叔。未经许可,禁止转载。
Python基础教程之字符串和编码
上一篇
CSS函数
下一篇
在小程序中查看

这是个😊,挣点服务器费用😜

热门文章
Holiday end~~
前端CSS常用代码集合
小毛驴历险记2
小区便民生活指南
2023!平平淡淡的一年!
那天老家下雪❄️
专题标签
agent (1) CSS (15) dom (1) Es6入门系列 (14) Git (3) html (1) iview (1) JavaScript (9) js (4) Lif (1) Node (4) pyecharts (1) Python (10) ref (1) scriptable (1) Skill (1) vsCode (1) vue (4) wordpress (2) 三月 (1) 上海 (1) 假期 (1) 其他分享 (3) 前端两三问 (15) 古镇 (1) 外滩 (1) 对象 (1) 小程序 (5) 年度总结 (6) 年终总结 (1) 微信机器人 (4) 打字机 (1) 技术 (1) 日常问题 (8) 日常问题记录 (1) 春天 (2) 服务器 (2) 海族馆 (1) 生活 (8) 网上国网 (1) 记录 (3) 通勤 (1) 重学JavaScript (11) 面试题 (10) 🌸 (1)
什么是Agent?
2026-08-15 23:49:12
393 0 2
什么是 Skill?
2026-08-12 21:32:42
322 1 0
失业在家,我给小朋友做了一个练字小程序!
2026-08-07 16:21:52
597 10 1
上线8年,15万用户的小程序,一共赚了多少钱?
2026-05-30 18:01:24
4,635 4 0
  • 0
博主

一位佛系的前端开发者,略通摄影,乐于尝试新事物,热衷于美食。

友链
故事胶片
公众号
坚果大叔 执行上下文 卖坚果的怪叔叔 Dacking
Copyright © 2017-2026 卖坚果的怪叔叔

开往-友链接力

萌ICP备20230818号

苏ICP备18048410号-3
  • 首页
  • 生活
  • 技术
  • 记录
  • 工具箱
  • 关于我
# CSS # # JavaScript # # vue # # 微信 # # 生活 #
坚果大叔
345
文章
171
评论
432
喜欢