二进制 & 八进制
1.二进制前缀:0b(0B)
八进制前缀:0o(0O)
2.es5严格模式不允许使用前缀0表示八进制,如:011(9)
3.二进制八进制转换为十进制使用Number
Number(‘0b111’) //7
Number.isFinite(), Number.isNaN()
1.isFinite()检查数值是否非无穷
Number.isFinite(0.8); //true
Number.isFinite(NaN); //false
NaN, Infinity, -Infinity, 字符串, 布尔值。。均为false
2.isNaN()检查一个值是否为NaN(非数值)
Number.isNaN('aa'); //false
Number.isNaN('aa'/'aa'); //true
Number.isNaN(NaN/9); //true
NaN == NaN //false(NaN 与所有值都不相等,包括它自己)
3.新方法只对数值有效,非数值一律返回 false(传统全局isFinite(), isNaN()方法会先调用Number()将非数值转换为数值)
Number.parseInt(), Number.parseFloat()
1.相当于原全局方法parseInt(), parseFloat(),为了逐步减少全局性方法,使语言模块化
Number.parseInt() === parseInt(); //true
Number.isInteger()
1.判断一个值是否为整数(3.0也为整数)
Number.EPSILON
1.新增的一个常量,用来为浮点数计算设置误差范围,如果误差小于Number.EPSILON则认为结果正确
安全整数和Number.issafeInteger()
- js能精确表示的整数范围: -2^{53} < x < 2^{53} ,超过则不精确,如:
Math.pow(2, 53) === Math.pow(2, 53) + 1 //true - ES6引入了
Number.MAX_SAFE_INTEGER(Math.pow(2, 53) - 1)和
Number.MIN_SAFE_INTEGER(-Number.MAX_SAFE_INTEGER)这两个常量,用来表示这个范围的上下限。 - Number.issafeInteger()用来判断一个整数是否在这个范围内
- 实际应用中,我们不只要验证计算结果是否为安全整数,也应检验参与运算的每个值
Number.isSafeInteger(9007199254740993 - 990)
// true
Number.isSafeInteger(9007199254740993)
// false
9007199254740993 - 990
// 返回结果 9007199254740002
// 正确答案应该是 9007199254740003
Math对象的扩展
1.Math.trunc() 去除一个数的小数部分,返回整数部分
(对于非数值先将其转换为数值,空值或无法截取整数的返回NaN)
2.Math.sign() 判断一个数是正数,负数,还是0
返回值:
参数为正数,返回+1;
参数为负数,返回-1;
参数为0,返回0;
参数为-0,返回-0;
其他值,返回NaN。
3. Math.cbrt() 计算一个数的立方根
(对于非数值先将其转换为数值,空值或无法计算的返回NaN)
4. undefined 返回一个数的32位无符号整数形式有多少个前导0
Math.clz32(0) // 32
Math.clz32(0b00100000000000000000000000000000) // 2
左移运算符(<<)与Math.clz32方法直接相关。(每左移一位,clz32()值减少一)
对于小数,Math.clz32方法只考虑整数部分。
对于空值或其他类型的值,Math.clz32方法会将它们先转为数值,然后再计算。
NaN, Infinity, null, undefined, ‘foo’, [], {} 均为32
true为31