JavaScript Numbers
JavaScript只有一种数字类型。数字可以带有或不带有小数。
1 | let x = 3.14; // A number with decimals |
超大或超小的数字可以用科学(指数)符号书写:
1 | let x = 123e5; // 12300000 |
JavaScript 数字始终是 64 位浮点数
与许多其他编程语言不同, JavaScript 没有定义不同类型的数字,例如整数、短整型、长整型、 浮点数等。
JavaScript 数字始终存储为双精度浮点数 数字,遵循国际 IEEE 754 标准。
此格式 以 64 位存储数字,其中数字(分数)以位 0 存储 到 51,以位 52 到 62 为单位的指数,以及以位 63 为单位的符号:
值(又名分数/尾数) | 指数 | 标志 |
---|---|---|
52 位 (0 - 51) | 11 位 (52 - 62) | 1 位 (63) |
整数精度
整数(没有句点或指数表示法的数字)最多可精确到 15 位。
1 | let x = 999999999999999; // x will be 999999999999999 |
最大小数位数为 17。
浮动精度
浮点运算并不总是 100% 准确:
1 | let x = 0.2 + 0.1; |
为了解决上述问题,可以使用乘法和除法:
1 | let x = (0.2 * 10 + 0.1 * 10) / 10; |
添加数字和字符串
警告!!
JavaScript 使用 + 运算符进行加法和串联。
数字已添加。字符串是连接的。
如果将两个数字相加,结果将是一个数字:
1 | let x = 10; |
如果添加两个字符串,结果将是一个字符串连接:
1 | let x = "10"; |
如果添加一个数字和一个字符串,结果将是一个字符串连接:
1 | let x = 10; |
如果添加字符串和数字,则结果将是字符串连接:
1 | let x = "10"; |
一个常见的错误是期望此结果为30:
1 | let x = 10; |
一个常见的错误是期望此结果为 102030:
1 | let x = 10; |
JavaScript 解释器从左到右工作。
前 10 + 20 相加,因为 x 和 y 都是数字。
然后 30 + “30” 被连接起来,因为 z 是一个字符串。
数字字符串
JavaScript 字符串可以包含数字内容:
1 | let x = 100; // x is a number |
JavaScript 将尝试在所有数值运算中将字符串转换为数字:
这将起作用:
1 | let x = "100"; |
这也将起作用:
1 | let x = "100"; |
这将起作用:
1 | let x = "100"; |
但这行不通:
1 | let x = "100"; |
在最后一个示例中,JavaScript 使用 + 运算符来连接字符串。
NaN - 不是一个数字
NaN
是一个 JavaScript 保留字,指示数字不是合法数字。
尝试使用非数字字符串进行算术运算将导致(不是 编号):NaN
1 | let x = 100 / "Apple"; |
但是,如果字符串是数字,则结果将是数字:
1 | let x = 100 / "10"; |
您可以使用全局 JavaScript 函数isNaN()
来确定值是否不是数字:
1 | let x = 100 / "Apple"; |
注意NaN
。如果在数学运算中使用NaN
,结果也将为NaN
:
1 | let x = NaN; |
或者结果可能是像NaN5
这样的串联:
1 | let x = NaN; |
NaN
是一个数字:typeof NaN
返回number
:
1 | typeof NaN; |
无限
Infinity
(或 -Infinity
)是当您计算的数字超出最大可能数字时 JavaScript 将返回的值
1 | let myNumber = 2; |
除以 0(零)也会生成无穷大:
1 | let x = 2 / 0; |
Infinity
是一个数字:typeof Infinity
返回number
。
1 | typeof Infinity; |
十六进制
如果数字常量前面有 0x,JavaScript 会将其解释为十六进制。
1 | let x = 0xFF; |
切勿用前导零写数字(如 07)。
某些 JavaScript 版本解释 数字为八进制,如果它们用前导零书写。
默认情况下,JavaScript 将数字显示为以 10 为基数的小数。
但是您可以使用toString()
方法输出从基数 2 到基数 36 的数字。
十六进制是以 16 为基数。十进制是以 10 为基数。 八进制是以 8 为基数。二进制是以 2 为基数。
1 | let myNumber = 32; |
JavaScript 数字作为对象
通常,JavaScript 数字是从文字创建的原始值:
1 | let x = 123; |
但数字也可以用关键字new
定义为对象:
1 | let y = new Number(123); |
1 | let x = 123; |
不要创建 Number 对象。
new
关键字使代码复杂化并减慢执行速度。
数字对象可能会产生意想不到的结果:
使用运算符时,x 和 y 相等:==
1 | let x = 500; |
使用运算符时,x 和 y 不相等。===
1 | let x = 500; |
请注意(x==y)
和(x===y)
之间的区别。
(x == y)
对还是错?
1 | let x = new Number(500); |
(x === y)
对还是错?
1 | let x = new Number(500); |
比较两个 JavaScript 对象总是返回 false。
0评论