javascript笔记之Number和Math

Number

当运算符为减(-)、乘(*)、除(/)、取模(%)、小于(<)和大于(>),参与运算的分别为数字和字符串时,字符串自动转换为数字参与运算,并返回结果。字符串做自增和自减运算的时候,也会隐式尝试转换为数字。

Number.NaN 表示“非数字”(Not-A-Number)

  • Number.isFinite() 方法用来检测传入的参数是否是一个有穷数(finite number)。全局的isFinite()函数相比,不会对参数进行强制转换

    1
    2
    3
    4
    5
    6
    Number.isFinite(Infinity);  // false
    Number.isFinite(NaN); // false
    Number.isFinite(-Infinity); // false
    Number.isFinite(0); // true
    Number.isFinite(2e64); // true
    Number.isFinite("121"); // false, 全局函数 isFinite('0') 会返回 true
  • Number.isInteger() 方法用来判断给定的参数是否为整数。没有隐式转换

    1
    2
    3
    4
    5
    6
    7
    8
    9
    Number.isInteger(0);         // true
    Number.isInteger(1); // true
    Number.isInteger(-100000); // true

    Number.isInteger(0.1); // false
    Number.isInteger(Math.PI); // false
    Number.isInteger(Infinity); // false
    Number.isInteger(-Infinity); // false
    Number.isInteger("10"); // false
  • Number.isNaN() 方法确定传递的值是否为NaN。和全局函数 isNaN() 相比,该方法不会强制将参数转换成数字,只有在参数是真正的数字类型,且值为 NaN 的时候才会返回 true。

    1
    2
    3
    4
    5
    6
    7
    8
    Number.isNaN(NaN);        // true
    Number.isNaN(Number.NaN); // true
    Number.isNaN(0 / 0) // true
    // 下面的都返回 false
    Number.isNaN(true);
    Number.isNaN(null);
    Number.isNaN(37);
    Number.isNaN("37");
  • numObj.toFixed(digits) 方法使用定点表示法来格式化一个数,digits表示小数点后的数字个数(介于0到20之间),默认为0
    该方法返回一个数值的字符串表现形式,不使用指数计数法,采用四舍五入去除多余的位数

    1
    2
    3
    4
    5
    6
    7
    8
    (1.23e+20).toFixed(2);    // 返回 "123000000000000000000.00"
    (1.23e-10).toFixed(2); // 返回 "0.00"
    12345.6789.toFixed(); // 返回 "12346":进行四舍五入,不包括小数部分
    12345.6789.toFixed(1); // 返回 "12345.7":进行四舍五入
    2.34.toFixed(1); // 返回 "2.3"
    2.34.toFixed(6); // 返回 "2.340000", 位数不够用0填充
    -2.34.toFixed(1); // 返回 -2.3 (由于操作符优先级,负数不会返回字符串)
    (-2.34).toFixed(1); // 返回 "-2.3" (若用括号提高优先级,则返回字符串)
  • numObj.toPrecision(precision)以定点表示法或指数表示法表示的一个数值对象的字符串表示,四舍五入到 precision 参数指定的显示数字位数。

    1
    2
    3
    4
    5
    6
    7
    8
    var numObj = 5.123456;
    console.log("numObj.toPrecision() is " + numObj.toPrecision()); //输出 5.123456
    console.log("numObj.toPrecision(5) is " + numObj.toPrecision(5)); //输出 5.1235
    console.log("numObj.toPrecision(2) is " + numObj.toPrecision(2)); //输出 5.1
    console.log("numObj.toPrecision(1) is " + numObj.toPrecision(1)); //输出 5

    // 注意:在某些情况下会以指数表示法返回
    console.log((1234.5).toPrecision(2)); // "1.2e+3"
  • numObj.toExponential(fractionDigits) 方法以指数表示法返回该数值字符串表示形式。fractionDigits可选。一个整数,用来指定小数点后有几位数字。默认情况下用尽可能多的位数来显示数字。

    1
    2
    3
    4
    5
    6
    var numObj = 77.1234;
    alert("numObj.toExponential() is " + numObj.toExponential()); //输出 7.71234e+1
    alert("numObj.toExponential(4) is " + numObj.toExponential(4)); //输出 7.7123e+1
    alert("numObj.toExponential(2) is " + numObj.toExponential(2)); //输出 7.71e+1
    alert("77.1234.toExponential() is " + 77.1234.toExponential()); //输出 7.71234e+1
    alert("77 .toExponential() is " + 77 .toExponential()); //输出 7.7e+1

Math

  • Math.PI 表示一个圆的周长与直径的比例,约为 3.14159:
  • Math.maxMath.min, 如果没有参数,则结果为 -Infinity。如果有任一参数不能被转换为数值,则结果为 NaN。

    1
    2
    3
    var arr = [1, 2, 3];
    var max = Math.max(...arr);
    var min = Math.min(...arr);
  • 小数部分的操作,下面的操作都会对参数进行强制转换
    Math.floor()返回一个小于等于一个给定数字的最大整数,简称向下取整
    Math.ceil()返回一个大于等于一个给定数字的最大整数,简称向上取整
    Math.round()返回一个四舍五入后的整数
    Math.trunc()返回删除掉数字的小数部分和小数点后的数,不管参数是正数还是负数。