跳至正文

JavaScript入门教程笔记(3)-数值

整数和浮点数

JavaScript内部,所有数字都是以64位浮点数形式存储,即使整数也是如此。所以,1与1.0是相等的,是同一个数。

1 === 1.0 // true

也就是说,JavaScript 底层根本没有整数,所有数字都是小数(64位浮点数)。如果某些运算一定要整数,则JavaScript自动把64位浮点数转换为32位整数,再进行运算。由于浮点数不是精确的值,所以涉及小数的比较和运算要特别小心。如:

0.1 + 0.2 === 0.3 // false
0.3 / 0.1  // 2.99999
(0.3 - 0.2) === (0.2 - 0.1) // false

数值范围

根据标准,64位浮点数的指数部分的长度是11个二进制位,意味着指数部分的最大值是2047(2的11次方减1)。也就是说,64位浮点数的指数部分的值最大为2047,分出一半表示负数,则 JavaScript 能够表示的数值范围为2的1024次方到2的-1023次方(开区间),超出这个范围的数无法表示。

JavaScript 提供Number对象的 MAX_VALUE 和 MIN_VALUE 属性,返回可以表示的具体的最大值和最小值。

Number.MAX_VALUE // 1.7976931348623157e+308
Number.MIN_VALUE // 5e-324

数值的进制

JavaScript 对整数提供四种进制的表示方法:十进制、十六进制、八进制、二进制。

  • 十进制:没有前导0的数值。
  • 八进制:有前缀0o或0O的数值,或者有前导0、且只用到0-7的八个阿拉伯数字的数值。
  • 十六进制:有前缀0x或0X的数值。
  • 二进制:有前缀0b或0B的数值。

NaN

NaN是 JavaScript 的特殊值,表示“非数字”(Not a Number),主要出现在将字符串解析成数字出错的场合。

5 - 'x' // NaN

上面代码运行时,会自动将字符串x转为数值,但是由于x不是数值,所以最后得到结果为NaN,表示它是“非数字”(NaN)。

0除以0也会得到NaN。

0 / 0 // NaN

需要注意的是,NaN不是独立的数据类型,而是一个特殊数值,它的数据类型依然属于Number,使用typeof运算符可以看得很清楚。

typeof NaN // 'number'

Infinity

Infinity表示“无穷”,用来表示两种场景。一种是一个正的数值太大,或一个负的数值太小,无法表示;另一种是非0数值除以0,得到Infinity。

// 场景一
Math.pow(2, 1024) // Infinity

// 场景二
0 / 0 // NaN
1 / 0 // Infinity

注:本文适用于ES5规范,原始内容来自 JavaScript 教程,有修改。

标签:

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注