【es6】数值的扩展

来源:互联网 发布:阿里云解析自动更新ip 编辑:程序博客网 时间:2024/05/20 10:11

二进制 & 八进制

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()

  1. js能精确表示的整数范围: -2^{53} < x < 2^{53} ,超过则不精确,如:
    Math.pow(2, 53) === Math.pow(2, 53) + 1 //true
  2. ES6引入了
    Number.MAX_SAFE_INTEGER(Math.pow(2, 53) - 1)和
    Number.MIN_SAFE_INTEGER(-Number.MAX_SAFE_INTEGER)这两个常量,用来表示这个范围的上下限。
  3. Number.issafeInteger()用来判断一个整数是否在这个范围内
  4. 实际应用中,我们不只要验证计算结果是否为安全整数,也应检验参与运算的每个值
    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

原创粉丝点击