zoukankan      html  css  js  c++  java
  • ES6 数值

    数值的表示

    二进制表示法新写法: 前缀 0b 或 0B 。

    console.log(0b11 === 3); // true
    console.log(0B11 === 3); // true

    八进制表示法新写法: 前缀 0o 或 0O 。

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

    常量

    Number.EPSILON

    Number.EPSILON 属性表示 1 与大于 1 的最小浮点数之间的差。

    它的值接近于 2.2204460492503130808472633361816E-16,或者 2-52。

    测试数值是否在误差范围内:

    console.log(0.1 + 0.2 === 0.3); // false
    // 在误差范围内即视为相等
    equal = (Math.abs(0.1 - 0.3 + 0.2) < Number.EPSILON); 
    console.log(equal);// true
    //Math.abs();求绝对值
    console.log(10E2);//1000

    属性特性

    writablefalse
    enumerablefalse
    configurablefalse

    最大/最小安全整数

    安全整数

    安全整数表示在 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
    console.log(Number.MAX_SAFE_INTEGER);//9007199254740991

    最小安全整数

    安全整数范围的下限,即 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; //false(都超出了最小安全整数的范围,无法精确表示)
    console.log(Number.MIN_SAFE_INTEGER);//-9007199254740991

    属性特性

    writablefalse
    enumerablefalse
    configurablefalse

    方法

    Number 对象新方法

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

    从全局移植到 Number 对象的方法

    逐步减少全局方法,用于全局变量的模块化。

    方法的行为没有发生改变。

    Number.parseInt()

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

    /
    // 不指定进制时默认为 10 进制
    Number.parseInt('12.34'); // 12
    Number.parseInt(12.34);   // 12
     
    // 指定进制
    Number.parseInt('0011',2); // 3
     
    // 与全局的 parseInt() 函数是同一个函数
    Number.parseInt === parseInt; // true
    Number.parseFloat()
    // 用于把一个字符串解析成浮点数。
    Number.parseFloat('123.45')    // 123.45
    Number.parseFloat('123.45abc') // 123.45
     
    // 无法被解析成浮点数,则返回 NaN
    Number.parseFloat('abc') // NaN
     
    // 与全局的 parseFloat() 方法是同一个方法
    Number.parseFloat === parseFloat // true
    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
    Number.isSafeInteger()
    // 用于判断数值是否在安全范围内。
    Number.isSafeInteger(Number.MIN_SAFE_INTEGER - 1); // false
    Number.isSafeInteger(Number.MAX_SAFE_INTEGER + 1); // false

    Math 对象的扩展

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

    普通计算

    Math.cbrt

    用于计算一个数的立方根。

    //立方根
    console.log(Math.cbrt(1));  // 1
    console.log(Math.cbrt(0));  // 0
    console.log(Math.cbrt(-1)); // -1
    // 会对非数值进行转换
    console.log(Math.cbrt('1')); // 1
     
    // 非数值且无法转换为数值时返回 NaN
    console.log(Math.cbrt('hhh')); // NaN
    Math.imul

    两个数以 32 位带符号整数形式相乘的结果,返回的也是一个 32 位的带符号整数。

    // 大多数情况下,结果与 a * b 相同 
    console.log(Math.imul(1, 2));   // 2
     
    // 用于正确返回大数乘法结果中的低位数值
    console.log(Math.imul(0x7fffffff, 0x7fffffff)); // 1
    Math.hypot

    用于计算所有参数的平方和的平方根。

    Math.hypot(3, 4); // 5
     
     // 非数值会先被转换为数值后进行计算
     Math.hypot(1, 2, '3'); // 3.741657386773941
     Math.hypot(true);      // 1
     Math.hypot(false);     // 0
      
     // 空值会被转换为 0
     Math.hypot();   // 0
     Math.hypot([]); // 0
      
     // 参数为 Infinity 或 -Infinity 返回 Infinity
     Math.hypot(Infinity); // Infinity
     Math.hypot(-Infinity); // Infinity
      
     // 参数中存在无法转换为数值的参数时返回 NaN
     Math.hypot(NaN);         // NaN
     Math.hypot(3, 4, 'foo'); // NaN
     Math.hypot({});          // NaN
    Math.clz32

    用于返回数字的32 位无符号整数形式的前导0的个数。

    Math.clz32(0); // 32
    Math.clz32(1); // 31
    Math.clz32(0b01000000000100000000000000000000); // 1
     
    // 当参数为小数时,只考虑整数部分
    Math.clz32(0.5); // 32
     
    // 对于空值或非数值,会转化为数值再进行计算
    Math.clz32('1');       // 31
    Math.clz32();          // 32
    Math.clz32([]);        // 32
    Math.clz32({});        // 32
    Math.clz32(NaN);       // 32
    Math.clz32(Infinity);  // 32
    Math.clz32(-Infinity); // 32
    Math.clz32(undefined); // 32
    Math.clz32('hhh');     // 32

    数字处理

    Math.trunc

    用于返回数字的整数部分。

    Math.trunc(12.3); // 12
    Math.trunc(12);   // 12
     
    // 整数部分为 0 时也会判断符号
    Math.trunc(-0.5); // -0
    Math.trunc(0.5);  // 0
     
    // Math.trunc 会将非数值转为数值再进行处理
    Math.trunc("12.3"); // 12
     
    // 空值或无法转化为数值时时返回 NaN
    Math.trunc();           // NaN
    Math.trunc(NaN);        // NaN
    Math.trunc("hhh");      // NaN
    Math.trunc("123.2hhh"); // NaN
    Math.fround

    用于获取数字的32位单精度浮点数形式。

    // 对于 2 的 24 次方取负至 2 的 24 次方之间的整数(不含两个端点),返回结果与参数本身一致
    Math.fround(-(2**24)+1);  // -16777215
    Math.fround(2 ** 24 - 1); // 16777215
     
    // 用于将 64 位双精度浮点数转为 32 位单精度浮点数
    Math.fround(1.234) // 1.125
    // 当小数的精度超过 24 个二进制位,会丢失精度
    Math.fround(0.3); // 0.30000001192092896
    // 参数为 NaN 或 Infinity 时返回本身
    Math.fround(NaN)      // NaN
    Math.fround(Infinity) // Infinity
     
    // 参数为其他非数值类型时会将参数进行转换 
    Math.fround('5');  // 5
    Math.fround(true); // 1
    Math.fround(null); // 0
    Math.fround([]);   // 0
    Math.fround({});   // NaN

    判断

    Math.sign

    判断数字的符号(正、负、0)。

    console.log(Math.sign(2));  // 1
    console.log(Math.sign(-3)); // -1
     
    // 参数为 0 时,不同符号的返回不同
    Math.sign(0);  // 0
    Math.sign(-0); // -0
     
    // 判断前会对非数值进行转换
    Math.sign('1');  // 1
    Math.sign('-1'); // -1  
     
    // 参数为非数值(无法转换为数值)时返回 NaN
    Math.sign(NaN);   // NaN 
    Math.sign('hhh'); // NaN

    对数方法

    Math.expm1()

    用于计算 e 的 x 次方减 1 的结果,即 Math.exp(x) - 1 。

    Math.expm1(1);  // 1.718281828459045
    Math.expm1(0);  // 0
    Math.expm1(-1); // -0.6321205588285577
    // 会对非数值进行转换
    Math.expm1('0'); //0
     
    // 参数不为数值且无法转换为数值时返回 NaN
    Math.expm1(NaN); // NaN
    Math.log1p(x)

    用于计算1 + x 的自然对数,即 Math.log(1 + x) 。

    console.log(Math.log1p(1));  // 0.6931471805599453  自然对数e为底
    Math.log1p(0);  // 0
    Math.log1p(-1); // -Infinity
     
    // 参数小于 -1 时返回 NaN
    Math.log1p(-2); // NaN
    Math.log10(x)

    用于计算以 10 为底的 x 的对数。

    Math.log10(1);   // 0
    // 计算前对非数值进行转换
    Math.log10('1'); // 0
    // 参数为0时返回 -Infinity
    Math.log10(0);   // -Infinity
    // 参数小于0或参数不为数值(且无法转换为数值)时返回 NaN
    Math.log10(-1);  // NaN
    Math.log2()

    用于计算 2 为底的 x 的对数。

    console.log(Math.log2(2));   // 1
    // 计算前对非数值进行转换
    Math.log2('1'); // 0
    // 参数为0时返回 -Infinity
    Math.log2(0);   // -Infinity
    // 参数小于0或参数不为数值(且无法转换为数值)时返回 NaN
    Math.log2(-1);  // NaN

    双曲函数方法

    • Math.sinh(x): 用于计算双曲正弦。
    • Math.cosh(x): 用于计算双曲余弦。
    • Math.tanh(x): 用于计算双曲正切。
    • Math.asinh(x): 用于计算反双曲正弦。
    • Math.acosh(x): 用于计算反双曲余弦。
    • Math.atanh(x): 用于计算反双曲正切。

    指数运算符

    // 指数数运算符
    1 ** 2; // 1
    // 右结合,从右至左计算
    2 ** 2 ** 3; // 256
    // **=
    let exam = 2;
    exam ** = 2; // 4
  • 相关阅读:
    VC++ error C2248: “CObject::CObject”: 无法访问 private 成员(在“CObject”类中声明)
    VC++ 在使用 CImage 的Draw 输入一个图像时,有时候会造成图像失真严重,解决的方法如下
    VC++ 中CDC与HDC的区别以及二者之间的转换
    BASE64编码和解码(VC源代码) 并 内存加载 CImage 图像
    VC 使用OnCtlColor函数来改变控件颜色(引用)
    VC++ 对话框程序响应键盘消息的处理方法的说明(非常重要)
    VC++ 迭代器 iterator, const_iterator, const iterator
    VC++ 解决在鼠标移动时,光标闪烁的问题。其实本质是 ON_SETCURSOR的用法
    SQL练习题-50道SQL练习题及答案与详细分析
    Windows Essentials Movie Maker 安装失败报错 ——问题解决
  • 原文地址:https://www.cnblogs.com/fqh123/p/10684723.html
Copyright © 2011-2022 走看看