数字
JavaScript 只有一种数值类型:number(数字),包括“整数”和带小数的十进制数。此处 “整数”之所以加引号是因为和其他语言不同,JavaScript 没有真正意义上的整数,这也是 它一直以来为人诟病的地方。这种情况在将来或许会有所改观,但目前只有数字类型。
JavaScript 中的“整数”就是没有小数的十进制数。所以 42.0 即等同于“整数”42。
与大部分现代编程语言(包括几乎所有的脚本语言)一样,JavaScript 中的数字类型是基 于 IEEE 754 标准来实现的,该标准通常也被称为“浮点数”。JavaScript 使用的是“双精 度”格式(即 64 位二进制)。
网上的很多文章详细介绍了二进制浮点数在内存中的存储方式,以及不同方式各自的考 量。要想正确使用 JavaScript 中的数字类型,并非一定要了解数位(bit)在内存中的存储 方式。
数字的语法
JavaScript 中的数字常量一般用十进制表示。
例如:
var a = 42;
var b = 42.3;
数字前面的 0 可以省略:
var a = 0.42;
var b = .42;
小数点后小数部分最后面的 0 也可以省略:
var a = 42.0;
var b = 42.;
默认情况下大部分数字都以十进制显示,小数部分最后面的 0 被省略,如:
var a = 42.300;
var b = 42.0;
a; // 42.3
b; // 42
特别大和特别小的数字默认用指数格式显示,与 toExponential() 函数的输出结果相同。
![4ccca475a3654b3410403ccc07f8efef.png](https://i-blog.csdnimg.cn/blog_migrate/041a0d6672699eb99e547898bc825afc.jpeg)
由于数字值可以使用 Number 对象进行封装,因此数字值可以调用 Number.
prototype 中的方法。例如,tofixed(..) 方法可指定小数部分的显示位数:
![fa1911adf1b113b9afb88309a042760b.png](https://i-blog.csdnimg.cn/blog_migrate/bb145ff2ab3d2141516d218a92876808.jpeg)
请注意,上例中的输出结果实际上是给定数字的字符串形式,如果指定的小数部分的显示 位数多于实际位数就用 0 补齐。
toPrecision(..) 方法用来指定有效数位的显示位数:
![627267006ae50badfa789955143c5ab7.png](https://i-blog.csdnimg.cn/blog_migrate/b0ab3b32ae81bf7db6f665ae9ac8f54e.jpeg)
上面的方法不仅适用于数字变量,也适用于数字常量。不过对于 . 运算符需要给予特别注 意,因为它是一个有效的数字字符,会被优先识别为数字常量的一部分,然后才是对象属 性访问运算符。
![30754b2dbe375a2583d7d7d9a6d1dad5.png](https://i-blog.csdnimg.cn/blog_migrate/6c7c2d15100669766491dae331c383cf.jpeg)
42.tofixed(3) 是无效语法,因为 . 被视为常量 42. 的一部分(如前所述),所以没有 . 属 性访问运算符来调用 tofixed 方法。
42..tofixed(3) 则没有问题,因为第一个 . 被视为 number 的一部分,第二个 . 是属性访问 运算符。只是这样看着奇怪,实际情况中也很少见。在基本类型值上直接调用的方法并不 多见,不过这并不代表不好或不对。
下面的语法也是有效的(请注意其中的空格):
42 .toFixed(3); // "42.000"
然而对数字常量而言,这样的语法很容易引起误会,不建议使用。
我们还可以用指数形式来表示较大的数字,如:
var onethousand = 1E3; // 即 1 * 10^3
var onemilliononehundredthousand = 1.1E6; // 即 1.1 * 10^6
数字常量还可以用其他格式来表示,如二进制、八进制和十六进制。
当前的 JavaScript 版本都支持这些格式:
0xf3; // 243的十六进制
0Xf3; // 同上
0363; // 243的八进制
ES6 支持以下新格式:
0o363; // 243的八进制
0O363; // 同上
0b11110011; // 243的二进制
0B11110011; // 同上
考虑到代码的易读性,不推荐使用 0O363 格式,因为 0 和大写字母 O 在一起容易混淆。建 议尽量使用小写的 0x、0b 和 0o。