ES6数值

作者: 林之小记 | 来源:发表于2019-10-22 17:08 被阅读0次

    作者:米书林
    参考文章:《菜鸟教程》、《 ECMAScript 6 入门》(阮一峰)

    新的表示法

    1.新的二进制表示法

    ES6定义的以前缀0b0B来表示二进制数值

    console.log(0b11 === 3); // true
    console.log(0B11 === 3); // true
    
    2.新的八进制表示法

    ES6定义的以前缀0o0O来表示二进制数值

    console.log(0o11 === 9); // true
    console.log(0O11 === 9); // true
    

    如果要将0b和0o前缀的字符串数值转为十进制,要使用Number方法。

    Number('0b111')  // 7
    Number('0o10')  // 8
    

    新值

    1.常量—Number.EPSILON

    表示:1 与大于 1 的最小浮点数之间的差。它的值接近于 2.2204460492503130808472633361816E-16,或者 2-52。

    0.1 + 0.2 === 0.3; // false
    // 在误差范围内即视为相等
    equal = (Math.abs(0.1 - 0.3 + 0.2) < Number.EPSILON); // true
    
    2.最大/最小安全整数

    安全整数表示在 JavaScript 中能够精确表示的整数,安全整数的范围在 2 的 -53 次方到 2 的 53 次方之间(不包括两个端点),超过这个范围的整数无法精确表示。

    最大安全整数
    安全整数范围的上限,即 2 的 53 次方减 1 。

    Number.MAX_SAFE_INTEGER + 1 === Number.MAX_SAFE_INTEGER + 2; // true
    Number.MAX_SAFE_INTEGER === Number.MAX_SAFE_INTEGER + 1;     // false
    Number.MAX_SAFE_INTEGER - 1 === Number.MAX_SAFE_INTEGER - 2; // false
    

    最小安全整数
    安全整数范围的下限,即 2 的 53 次方减 1 的负数。

    Number.MIN_SAFE_INTEGER + 1 === Number.MIN_SAFE_INTEGER + 2; // false
    Number.MIN_SAFE_INTEGER === Number.MIN_SAFE_INTEGER - 1;     // false
    Number.MIN_SAFE_INTEGER - 1 === Number.MIN_SAFE_INTEGER - 2; // true
    

    Number的新方法

    1.Number.isFinite()

    用于检查一个数值是否为有限的( finite ),即不是 Infinity

    console.log( Number.isFinite(1));   // true
    console.log( Number.isFinite(0.1)); // true
     
    // NaN 不是有限的
    console.log( Number.isFinite(NaN)); // false
     
    console.log( Number.isFinite(Infinity));  // false
    console.log( Number.isFinite(-Infinity)); // false
     
    // Number.isFinate 没有隐式的 Number() 类型转换,所有非数值都返回 false
    console.log( Number.isFinite('foo')); // false
    console.log( Number.isFinite('15'));  // false
    console.log( Number.isFinite(true));  // false
    
    2.Number.isNaN()

    用于检查一个值是否为 NaN

    console.log(Number.isNaN(NaN));      // true
    console.log(Number.isNaN('true'/0)); // true
     
    // 在全局的 isNaN() 中,以下皆返回 true,因为在判断前会将非数值向数值转换
    // 而 Number.isNaN() 不存在隐式的 Number() 类型转换,非 NaN 全部返回 false
    Number.isNaN("NaN");      // false
    Number.isNaN(undefined);  // false
    Number.isNaN({});         // false
    Number.isNaN("true");     // false
    
    3.Number.isInteger()

    用于判断给定的参数是否为整数。

    Number.isInteger(value)
    Number.isInteger(0); // true
    // JavaScript 内部,整数和浮点数采用的是同样的储存方法,因此 1 与 1.0 被视为相同的值
    Number.isInteger(1);   // true
    Number.isInteger(1.0); // true
     
    Number.isInteger(1.1);     // false
    Number.isInteger(Math.PI); // false
     
    // NaN 和正负 Infinity 不是整数
    Number.isInteger(NaN);       // false
    Number.isInteger(Infinity);  // false
    Number.isInteger(-Infinity); // false
     
    Number.isInteger("10");  // false
    Number.isInteger(true);  // false
    Number.isInteger(false); // false
    Number.isInteger([1]);   // false
     
    // 数值的精度超过 53 个二进制位时,由于第 54 位及后面的位被丢弃,会产生误判
    Number.isInteger(1.0000000000000001) // true
     
    // 一个数值的绝对值小于 Number.MIN_VALUE(5E-324),即小于 JavaScript 能够分辨
    // 的最小值,会被自动转为 0,也会产生误判
    Number.isInteger(5E-324); // false
    Number.isInteger(5E-325); // true
    
    4.Number.isSafeInteger()

    用于判断数值是否在安全范围内。

    Number.isSafeInteger(Number.MIN_SAFE_INTEGER - 1); // false
    Number.isSafeInteger(Number.MAX_SAFE_INTEGER + 1); // false
    

    从全局移植到Number的方法

    1.Number.parseInt()

    用于将给定字符串转化为指定进制的整数。

    // 不指定进制时默认为 10 进制
    Number.parseInt('12.34'); // 12
    Number.parseInt(12.34);   // 12
     
    // 指定进制
    Number.parseInt('0011',2); // 3
     
    // 与全局的 parseInt() 函数是同一个函数
    Number.parseInt === parseInt; // true
    
    2.Number.parseFloat()

    用于把一个字符串解析成浮点数。

    Number.parseFloat('123.45')    // 123.45
    Number.parseFloat('123.45abc') // 123.45
     
    // 无法被解析成浮点数,则返回 NaN
    Number.parseFloat('abc') // NaN
     
    // 与全局的 parseFloat() 方法是同一个方法
    Number.parseFloat === parseFloat // true
    

    Math对象的扩展

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

    属性 作用 用法 是否进行类型转换
    Math.cbrt 计算立方根 Math.cbrt(1);
    Math.imul 计算两个32 位带符号整数形式相乘的结果,返回的也是一个 32 位的带符号整数。 Math.imul(1, 2);
    Math.hypot 用于计算所有参数的平方和的平方根。 Math.hypot(1, 2, '3');
    Math.clz32 用于返回数字的32 位无符号整数形式的前导0的个数。 Math.clz32(0);
    Math.trunc 用于返回数字的整数部分。 Math.trunc(12.3)
    Math.fround 用于获取数字的32位单精度浮点数形式。 Math.fround(1.234)
    Math.sign 判断数字的符号(正、负、0)。 Math.sign(1);
    Math.expm1() 用于计算 e 的 x 次方减 1 的结果相当于 Math.exp(x) - 1 Math.expm1(1);
    Math.log1p(x) 用于计算1 + x 的自然对数,即 Math.log(1 + x) 。 Math.log1p(1);
    Math.log10(x) 用于计算以 10 为底的 x 的对数。 Math.log10(1);
    Math.log2() 用于计算 2 为底的 x 的对数。 Math.log2(1);
    Math.sinh(x) 用于计算双曲正弦 Math.sinh(x)
    Math.cosh(x) 用于计算双曲余弦 Math.cosh(x)
    Math.tanh(x) 用于计算双曲正切 Math.tanh(x)
    Math.asinh(x) 用于计算反双曲正弦 Math.asinh(x)
    Math.acosh(x) 用于计算反双曲余弦 Math.acosh(x)
    Math.atanh(x) 用于计算反双曲正切 Math.atanh(x)
    ** 用于计算第一个数的第二个数次方 1 ** 2;

    相关文章

      网友评论

        本文标题:ES6数值

        本文链接:https://www.haomeiwen.com/subject/mjnqvctx.html