JavaScript 数字
JavaScript 只有一种数字类型。数字可以带小数或不带小数书写。
特大或特小的数字可以使用科学(指数)记数法书写
JavaScript 数字始终是 64 位浮点数
与许多其他编程语言不同,JavaScript 没有定义不同类型的数字,例如整数、短整数、长整数、浮点数等。
JavaScript 数字始终存储为双精度浮点数,遵循国际 IEEE 754 标准。
这种格式将数字存储在 64 位中,其中数字(分数)存储在 0 到 51 位,指数存储在 52 到 62 位,符号存储在 63 位
值(也称为分数/尾数) | 指数 | 符号 |
---|---|---|
52 位 (0 - 51) | 11 位 (52 - 62) | 1 位 (63) |
整数精度
整数(不带小数点或指数记数法的数字)精确到 15 位。
示例
let x = 999999999999999; // x 将是 999999999999999
let y = 9999999999999999; // y 将是 10000000000000000
自己动手试一试 »
小数的最大位数是 17 位。
浮点精度
数字和字符串相加
警告!!
JavaScript 使用 + 运算符进行加法和字符串连接。
数字相加。字符串连接。
如果您将两个数字相加,结果将是一个数字
如果您将两个字符串相加,结果将是字符串连接
如果您将一个数字和一个字符串相加,结果将是字符串连接
如果您将一个字符串和一个数字相加,结果将是字符串连接
一个常见的错误是期望结果为 30
一个常见的错误是期望结果为 102030
JavaScript 解释器从左到右执行。
首先,由于 x 和 y 都是数字,所以计算 10 + 20。
然后,由于 z 是字符串,所以连接 30 + "30"。
数字字符串
JavaScript 字符串可以包含数字内容
let x = 100; // x 是一个数字
let y = "100"; // y 是一个字符串
JavaScript 将尝试在所有数字运算中将字符串转换为数字
这会起作用
let x = "100";
let y = "10";
let z = x / y;
这也会起作用
let x = "100";
let y = "10";
let z = x * y;
这也会起作用
let x = "100";
let y = "10";
let z = x - y;
但这不起作用
let x = "100";
let y = "10";
let z = x + y;
在最后一个示例中,JavaScript 使用 + 运算符连接字符串。
NaN - 非数字
NaN
是 JavaScript 保留字,表示一个数字不是合法数字。
尝试对非数字字符串进行算术运算将导致 NaN
(非数字)
但是,如果字符串是数字,结果将是一个数字
您可以使用全局 JavaScript 函数 isNaN()
来判断一个值是否为非数字
请注意 NaN
。如果您在数学运算中使用 NaN
,结果也将是 NaN
或者结果可能是像 NaN5 这样的连接
NaN
是一个数字:typeof NaN
返回 number
Infinity
Infinity
(或 -Infinity
)是 JavaScript 在您计算超出最大可能数字的数字时将返回的值。
示例
let myNumber = 2;
// 执行直到无穷大
while (myNumber != Infinity) {
myNumber = myNumber * myNumber;
}
自己动手试一试 »除以 0(零)也会生成 Infinity
Infinity
是一个数字:typeof Infinity
返回 number
。
十六进制
如果数字常量前面是 0x,JavaScript 会将其解释为十六进制。
切勿以零开头书写数字(例如 07)。
一些 JavaScript 版本会将以零开头的数字解释为八进制。
默认情况下,JavaScript 将数字显示为 基数 10 十进制。
但是您可以使用 toString()
方法输出 基数 2 到 基数 36 的数字。
十六进制是 基数 16。十进制是 基数 10。八进制是 基数 8。二进制是 基数 2。
示例
let myNumber = 32;
myNumber.toString(32);
myNumber.toString(16);
myNumber.toString(12);
myNumber.toString(10);
myNumber.toString(8);
myNumber.toString(2);
自己动手试一试 »
JavaScript 数字作为对象
通常 JavaScript 数字是字面量创建的原始值
let x = 123;
但数字也可以用关键词 new
定义为对象
let y = new Number(123);
不要创建 Number 对象。
new
关键词会使代码复杂化并降低执行速度。
Number 对象可能产生意想不到的结果
注意 (x==y)
和 (x===y)
之间的区别。
比较两个 JavaScript 对象总是返回假。
完整的 JavaScript Number 参考
有关完整的 Number 参考,请访问我们的
此参考包含所有 Number 属性和方法的描述和示例。