本文翻译自:What You Should Know About Numbers in ES6 JavaScript
在 JavaScript 中,数据类型 Number 被应用在很多地方。自 ES6 起,Number 有了大量地改进来帮助开发者提升开发效率。下面是 ES6 为我们带来的几个新特性。
二进制与八进制直接量
对新人来讲,开发者现在能够在 ES6 中使用前缀来表达不同的数字系统。
表达二进制数字使用 0b 前缀,使用 00 前缀表达八进制数字(译注:都是数字 0)。
Number.isNaN
Number.isNaN
与它的全局函数不同。它不会在比较前通过 Number(value)
作数字类型转换。
只有数值确实是 NaN 时 Number.isNaN
才会返回真。
蛋疼的是 typeof NaN === 'number'
,所以 typeof NaN === 'number'
并不能精准地告诉你值是否是一个数字。它只告诉你该值属于数字,也包括了 NaN。
因此更精确的判断方式是:
typeof value === 'number' && !Number.isNaN(value)
当然,其它处理数字是否被错误描述的方式包括 Number(x) === x
将只在数字时返回 true。
Number.isFinite
Number.isFinite
同样与全局的 isFinite
有些区别,Number.isFinite
不会在计算前通过 Number(value)
作数字类型转换。
例如,非数字在类型转换时会等于 0(Number(null) === 0
)。
这种情况下 Number.isFinite
更高级一些。
Number.isInteger
这是 ES6 的新功能,它可以检测一个数字是否是整数。不需要用 Number(value)
作类型转换,非数字例如 null 会直接返回 false。
Number.parseInt, Number.parseFloat
Number.parseInt
和 Number.parseFloat
跟他们的全局函数表现一毛一样。
Number.MAX_SAFE_INTEGER, Number.MIN_SAFE_INTEGER
它们表述了在 JavaScript 的实现里,可以安全使用的最大/最小数值。它由 IEEE 浮点限制(IEEE 754)在 2⁵³-1。
当然,最小安全整数是最大值的负值。要记住电脑在内存里是如何存储数字的。
Number.isSafeInteger
Number.isSafeInteger
直接返回提供的值是否位于上面的最大/最小值之间。
Number.EPSILON
在 JavaScript 里,当浮点数在系统里不能被精确描述时会触发取整误差。例如,.1 加 .2 不等于 .3!
Number.EPSILON
提供了一个可接受的误差范围用来计算(译注:Number.EPSILON 属性表示数字 1 和在 JavaScript 里大于 1 的最小数值之间的差值,详见 MDN)。所以可以用来检测计算误差是否处于可接受的范围,就像这样:
在 ES6 中,Numbers 有了长足的进步,并且仍有不少进步的空间,像这样的增强也帮助 ES6 变的比以往的 JavaScript 版本更优秀。(卧槽,这就忽然写结束语了?好 TM 突然!)
-- EOF --