JavaScript 数字

  • JavaScript数字

    JavaScript只有一种类型的数字。可以使用或不使用小数来编写数字。JavaScript数字始终是64位浮点数 与许多其他编程语言不同,JavaScript没有定义不同类型的数字,如整数,短整数,长整数,浮点数等。JavaScript编号始终存储为双精度浮点数,符合国际IEEE 754标准。此格式以64位存储数字,其中数字(分数)存储在位0到51位,指数存储在位52到62位,符号存储在位63中:
    var x = 3.14;    // 带小数的数字
    var y = 3;       // 没有小数的数字
    尝试一下
    可以使用科学(指数)表示法编写超大或超小数字:
    var x = 123e5;    // 12300000
    var y = 123e-5;   // 0.00123
    尝试一下
  • 精确位数

    整数(没有句号或指数表示法的数字)最多可达15位数。
    var x = 999999999999999;   // x will be 999999999999999
    var y = 9999999999999999;  // y will be 10000000000000000
    
    尝试一下
    小数最大小数位数为17,但浮点运算并不总是100%准确:
    var x = 0.2 + 0.1;         // x will be 0.30000000000000004
    
    尝试一下
    用乘法和除法解决上述问题
    var x = (0.2 * 10 + 0.1 * 10) / 10;       // x will be 0.3
    
    尝试一下
  • 数字和字符串连接

    如果两个数字相加,结果将是一个数字:
    var x = 10;
    var y = 20;
    var z = x + y;           // z 是 30 (一个数字)
    
    尝试一下
    如果添加两个字符串,结果将是字符串连接:
    var x = "10";
    var y = "20";
    var z = x + y;           // z 是 1020 (一个字符串)
    
    尝试一下
    如果字符串和数字相加,结果将是字符串连接:
    var x = "10";
    var y = 20;
    var z = x + y;           // z 是 1020 (一个字符串)
    
    尝试一下
    一个常见的错误是期望这个结果为30:
    var x = 10;
    var y = 20;
    var z = "结果为: " + x + y;
    
    尝试一下
    一个常见的错误是期望这个结果是102030:
    var x = 10;
    var y = 20;
    var z = "30";
    var result = x + y + z;
    
    尝试一下
    JavaScript编译器从左到右工作。 10 + 20,因为x和y都是数字。然后连接30 +“30”,因为z是一个字符串。
  • 数字字符串

    JavaScript字符串可以包含数字内容:
    var x = 100;         // x 是数字
    
    var y = "100";       // y 是字符串
    JavaScript将尝试在所有数字操作中将字符串转换为数字:
    这将有效:
    var x = "100";
    var y = "10";
    var z = x / y;       // z 将会为 10
    尝试一下
    提示:将上例的除法改成其他运算符(- ,* ,%)一样有效。如果是“+”号,那就被编译成字符串拼接。
  • NaN - 不是数字

    NaN是一个JavaScript保留字,表示数字不是合法数字。尝试使用非数字字符串进行算术将导致NaN(非数字):
    var x = 100 / "Apple";  // x 将为 NaN (不是一个数字)
    尝试一下
    但是,如果字符串包含数字值,则结果将为数字:
    var x = 100 / "10";     // x 将是 10
    尝试一下
    您可以使用全局JavaScript函数isNaN()来查明值是否为数字:
    var x = 100 / "Apple";
    isNaN(x);               // 返回 true 因为 x 不是一个数字
    尝试一下
    提防NaN。如果NaN在数学运算中使用,结果也将是NaN:
    var x = NaN;
    var y = 5;
    var z = x + y;         // z 是 NaN
    尝试一下
    或者结果可能是字符串串联:
    var x = NaN;
    var y = "5";
    var z = x + y;         // z 将会是 NaN5
    尝试一下
    NaN的数据类型是一个数字:typeof NaN返回number
    typeof NaN;            // 返回 "number"
    尝试一下
  • 无穷(Infinity)和负无穷(-Infinity)

    Infinity(或-Infinity)是如果计算最大可能数字之外的数字,JavaScript将返回的值。
    var myNumber = 2;
    while (myNumber != Infinity) {   // 执行直到无穷(Infinity)
      myNumber = myNumber * myNumber;
    }
    尝试一下
    除以0(零)也会产生Infinity:
    var x =  2 / 0;       // x 将会是 Infinity
    var y = -2 / 0;       // y 将会是 -Infinity
    尝试一下
    Infinity的数据类型是一个数字:typeof Infinity返回number
    typeof Infinity;     // 返回 "number"
    尝试一下
  • 十六进制

    如果数字常量前面带有0x,则它会将数字常量解释为十六进制。
    var x = 0xFF;        // x 是 255(十进制)
    尝试一下
    永远不要写一个前导零的数字(如07)。如果它们使用前导零写入,一些JavaScript版本将数字解释为八进制。
    默认情况下,JavaScript将数字显示为十进制小数。但是您可以使用toString()方法将数字从二进制到三十六进制输出 。
    var myNumber = 32;
    myNumber.toString(10);  // 返回 32
    myNumber.toString(32);  // 返回 10
    myNumber.toString(16);  // 返回 20
    myNumber.toString(8);   // 返回 40
    myNumber.toString(2);   // 返回 100000
    尝试一下
  • 数字可以是对象

    通常,JavaScript数字是从文字创建的原始值:
    var x = 123;
    但是数字也可以用关键字new定义为对象:
    var y = new Number(123);
    var x = 123;
    var y = new Number(123);
    
    // typeof x 返回 number
    // typeof y 返回 object
    尝试一下
    不要创建Number对象。除非你清楚自己在干什么。它会降低执行速度。new关键字使代码复杂化。这会产生一些意想不到的结果:
    使用==运算符时,相等的数字相等:
    var x = 500;             
    var y = new Number(500);
    
    // (x == y) 为 true 因为 x 和 y 有相等的值
    尝试一下
    使用===运算符时,相等的数字不相等,因为===运算符期望类型和值都相等。
    var x = 500;             
    var y = new Number(500);
    
    // (x === y)  false 因为 x 和 y 数据类型不同
    尝试一下
    甚至更糟。对象无法比较:
    var x = new Number(500);             
    var y = new Number(500);
    
    // (x == y)   false 因为他们各属不同的对象
    尝试一下
    注意(x==y)和(x===y)之间的差异。比较两个JavaScript对象将始终返回false。