You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
// 非严格模式(function(){console.log(0o11===011);})()// true// 严格模式(function(){'use strict';console.log(0o11===011);})()// Uncaught SyntaxError: Octal literals are not allowed in strict mode.
如果要将 0b和 0o 前缀的字符串数值转为十进制,要使用 Number 方法。
Number('0b111')// 7Number('0o10')// 8
Number.isFinite(), Number.isNaN()
ES6 在 Number 对象上,新提供了 Number.isFinite() 和 Number.isNaN() 两个方法。
functiontrusty(left,right,result){if(Number.isSafeInteger(left)&&Number.isSafeInteger(right)&&Number.isSafeInteger(result)){returnresult;}thrownewRangeError('Operation cannot be trusted!');}trusty(9007199254740993,990,9007199254740993-990)// RangeError: Operation cannot be trusted!trusty(1,2,3)// 3
二进制和八进制表示法
ES6 提供了二进制和八进制数值的新的写法,分别用前缀
0b
(或0B
)和0o
(或0O
)表示。从 ES5 开始,在严格模式之中,八进制就不再允许使用前缀
0
表示,ES6 进一步明确,要使用前缀0o
表示。
如果要将
0b
和0o
前缀的字符串数值转为十进制,要使用Number
方法。Number.isFinite(), Number.isNaN()
ES6 在
Number
对象上,新提供了Number.isFinite()
和Number.isNaN()
两个方法。Number.isFinite()
用来检查一个数值是否为有限的(finite)。ES5 可以通过下面的代码,部署
Number.isFinite
方法。Number.isNaN()
用来检查一个值是否为NaN
。ES5 通过下面的代码,部署
Number.isNaN()
。它们与传统的全局方法
isFinite()
和isNaN()
的区别在于,传统方法先调用Number()
将非数值的值转为数值,再进行判断,而这两个新方法只对数值有效,Number.isFinite()
对于非数值一律返回false
,Number.isNaN()
只有对于NaN
才返回true
,非NaN
一律返回false
。Number.parseInt(), Number.parseFloat()
ES6 将全局方法
parseInt()
和parseFloat()
,移植到Number
对象上面,行为完全保持不变。这样做的目的,是逐步减少全局性方法,使得语言逐步模块化。
Number.isInteger()
Number.isInteger()
用来判断一个值是否为整数。需要注意的是,在 JavaScript 内部,整数和浮点数是同样的储存方法,所以3
和3.0
被视为同一个值。ES5 可以通过下面的代码,部署
Number.isInteger()
。Number.EPSILON
ES6在Number对象上面,新增一个极小的常量
Number.EPSILON
。引入一个这么小的量的目的,在于为浮点数计算,设置一个误差范围。我们知道浮点数计算是不精确的。
但是如果这个误差能够小于
Number.EPSILON
,我们就可以认为得到了正确结果。上面的代码为浮点数运算,部署了一个误差检查函数。
上面的代码为浮点数运算,部署了一个误差检查函数。
JavaScript能够准确表示的整数范围在
-2^53
到2^53
之间(不含两个端点),超过这个范围,无法精确表示这个值。上面代码中,超出2的53次方之后,一个数就不精确了。
ES6引入了
Number.MAX_SAFE_INTEGER
和Number.MIN_SAFE_INTEGER
这两个常量,用来表示这个范围的上下限。上面代码中,可以看到JavaScript能够精确表示的极限。
Number.isSafeInteger()
则是用来判断一个整数是否落在这个范围之内。这个函数的实现很简单,就是跟安全整数的两个边界值比较一下。
实际使用这个函数时,需要注意。验证运算结果是否落在安全整数的范围内,不要只验证运算结果,而要同时验证参与运算的每个值。
上面代码中,
9007199254740993
不是一个安全整数,但是Number.isSafeInteger
会返回结果,显示计算结果是安全的。这是因为,这个数超出了精度范围,导致在计算机内部,以9007199254740992
的形式储存。所以,如果只验证运算结果是否为安全整数,很可能得到错误结果。下面的函数可以同时验证两个运算数和运算结果。
Math对象的扩展
ES6在Math对象上新增了17个与数学相关的方法。所有这些方法都是静态方法,只能在Math对象上调用。
The text was updated successfully, but these errors were encountered: