JavaScript数字的基本知识点,要熟悉这7点

JavaScript只有一种数值类型。书写数值时带不带小数点均可。
1.JavaScript数值
(1)书写JavaScript数值既可以带小数点,也可以不带:
var x = 3.14;    // 带小数点的数值
var y = 3;       // 不带小数点的数值
(2)超大或超小的数可通过科学计数法来写:
var x = 123e5;    // 12300000
var y = 123e-5;   // 0.00123
(3)JavaScript数值始终是64位的浮点数
与许多其他编程语言不同,JavaScript不会定义不同类型的数,比如整数、短的、长的、浮点的等等。JavaScript数值始终以双精度浮点数来存储,根据国际IEEE 754 标准。此格式用64位存储数值,其中0到51存储数字(片段),52到62 存储指数,63位存储符号:
值(aka Fraction/Mantissa) 指数 符号
52 bits(0 - 51) 11 bits   (52 - 62) 1 bit (63)
(4)精度
整数(不使用指数或科学计数法)会被精确到15位。
var x = 999999999999999;   // x 将是 999999999999999
var y = 9999999999999999;  // y 将是 10000000000000000
(5)小数的最大数是17位,但是浮点的算数并不总是100% 精准:
var x = 0.2 + 0.1;         // x 将是 0.30000000000000004
(6)使用乘除法有助于解决上面的问题:
var x = (0.2 * 10 + 0.1 * 10) / 10;       // x 将是 0.3
(7)数字和字符串相加
JavaScript的加法和级联(concatenation)都使用 + 运算符。数字用加法。字符串用级联。如果您对两个数相加,结果将是一个数:
var x = 10;
var y = 20;
var z = x + y;           // z 将是 30(一个数)
(8)如果对两个字符串相加,结果将是一个字符串的级联:
var x = "10";
var y = "20";
var z = x + y;           // z 将是 1020(字符串)
(9)如果您对一个数和一个字符串相加,结果也是字符串级联:
var x = 10;
var y = "20";
var z = x + y;           // z 将是 1020(一个字符串)
(10)如果您对一个字符串和一个数字相加,结果也是字符串级联:
var x = "10";
var y = 20;
var z = x + y;           // z 将是 1020(字符串)
(11)常见的错误是认为结果应该是 30:
var x = 10;
var y = 20;
var z = "The result is: " + x + y;
(12)常见的错误是认为结果应该是 102030:
var x = 10;
var y = 20;
var z = "30";
var result = x + y + z;
因为x和y都是数,10+ 20将被相加。因为z是字符串,30+"30"被级联。
 
2.数字字符串
JavaScript字符串可以拥有数字内容:
var x = 100;         // x 是数字
var y = "100";       // y 是字符串
 
3.在所有数字运算中,JavaScript会尝试将字符串转换为数字:
(1)除法:
var x = "100";
var y = "10";
var z = x / y;       // z 将是 10
(2)乘法
var x = "100";
var y = "10";
var z = x * y;       // z 将是 1000
(3)减法
var x = "100";
var y = "10";
var z = x - y;       // z 将是 90
(4)加法
var x = "100";
var y = "10";
var z = x + y;       // z 不会是 110(而是 10010)
亲自试一试
JavaScript用+运算符对字符串进行了级联。
 
4.NaN - 非数值
NaN属于JavaScript保留词,指示某个数不是合法数。
(1)用一个非数字字符串进行除法会得到NaN(Not a Number):
var x = 100 / "Apple";  // x 将是 NaN(Not a Number)
(2)字符串包含数值,则结果将是数
var x = 100 / "10";     // x 将是 10
(3)使用全局JavaScript函数isNaN()来确定某个值是否是数:
var x = 100 / "Apple";
isNaN(x);               // 返回 true,因为 x 不是数
(4)要小心NaN。在数学运算中使用了NaN,则结果也将是NaN:
var x = NaN;
var y = 5;
var z = x + y;         // z 将是 NaN
(5)结果是串连接:
var x = NaN;
var y = "5";
var z = x + y;         // z 将是 NaN5
(5)NaN是数,typeof NaN 返回 number:
typeof NaN;             // 返回 "number"
 
5.Infinity
Infinity(或 -Infinity)是JavaScript在计算数时超出最大可能数范围时返回的值。
(1)执行直到 Infinity
var myNumber = 2;
while (myNumber != Infinity) {          // 执行直到 Infinity
    myNumber = myNumber * myNumber;
}
(2)除以0(零)也会生成 Infinity:
var x =  2 / 0;          // x 将是 Infinity
var y = -2 / 0;          // y 将是 -Infinity
(3)Infinity 是数:typeOf Infinity返回number。
typeof Infinity;        // 返回 "number"
 
6.十六进制
JavaScript会把前缀为0x的数值常量解释为十六进制。
(1)实例
var x = 0xFF;             // x 将是 255
(2)绝不要用前导零写数字(比如 07)。
一些JavaScript版本会把带有前导零的数解释为八进制。默认地,Javascript把数显示为十进制小数。但是您能够使用toString()方法把数输出为十六进制、八进制或二进制。
var myNumber = 128;
myNumber.toString(16);     // 返回 80
myNumber.toString(8);      // 返回 200
myNumber.toString(2);      // 返回 10000000
 
7.数值可以是对象
通常JavaScript数值是通过字面量创建的原始值:var x = 123,但是也可以通过关键词new定义为对象:var y = new Number(123)。
(1)实例
var x = 123;
var y = new Number(123);
// typeof x 返回 number
// typeof y 返回 object
不要创建数值对象。这样会拖慢执行速度。new关键词使代码复杂化,并产生某些无法预料的结果。
(2)使用 == 相等运算符时,相等的数看上去相等:
var x = 500;             
var y = new Number(500);
// (x == y) 为true,因为x和y有相等的值
(3)当使用===相等运算符后,相等的数变为不相等,因为===运算符需要类型和值同时相等。
var x = 500;             
var y = new Number(500);
// (x === y) 为 false,因为 x 和 y 的类型不同
(4)对象无法进行对比:
var x = new Number(500);             
var y = new Number(500);
// (x == y) 为 false,因为对象无法比较