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 解释器从左到右执行。
首先 10 + 20 被加起来,因为 x 和 y 都是数字。
然后 30 + "30" 被连接起来,因为 z 是一个字符串。
数字字符串
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;
// 执行到 Infinity
while (myNumber != Infinity) {
myNumber = myNumber * myNumber;
}
自己尝试 »除以 0(零)也会产生 Infinity
Infinity
是一个数字:typeof Infinity
返回 number
。
十六进制
如果 JavaScript 数值常量以 0x 开头,则将其解释为十六进制。
切勿使用前导零(如 07)编写数字。
某些 JavaScript 版本将使用前导零编写的数字解释为八进制。
默认情况下,JavaScript 以**十进制**显示数字。
但您可以使用 toString()
方法从**二进制**到**三十六进制**输出数字。
十六进制是**十六进制**。十进制是**十进制**。八进制是**八进制**。二进制是**二进制**。
示例
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 对象**总是**返回**false**。