目录

JavaScript 数字


JavaScript 只有一种数字类型。数字可以带有或不带有小数。


示例

let x = 3.14;    // A number with decimals
let y = 3;       // A number without decimals

亲自试一试 »

特大或特小的数字可以用科学(指数)表示法书写:

示例

let x = 123e5;    // 12300000
let y = 123e-5;   // 0.00123

亲自试一试 »


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 will be 999999999999999
let y = 9999999999999999;  // y will be 10000000000000000
亲自试一试 »

小数位数最多为 17 位。

浮动精度

浮点运算并不总是 100% 准确:

let x = 0.2 + 0.1;

亲自试一试 »

为了解决上面的问题,可以使用乘法和除法:

let x = (0.2 * 10 + 0.1 * 10) / 10;
亲自试一试 »


添加数字和字符串

警告 !!

JavaScript 使用 + 运算符进行加法和连接。

数字已添加。字符串被连接起来。

如果将两个数字相加,结果将是一个数字:

示例

let x = 10;
let y = 20;
let z = x + y;
亲自试一试 »

如果添加两个字符串,结果将是字符串连接:

示例

let x = "10";
let y = "20";
let z = x + y;
亲自试一试 »

如果将数字和字符串相加,结果将是字符串连接:

示例

let x = 10;
let y = "20";
let z = x + y;
亲自试一试 »

如果添加一个字符串和一个数字,结果将是一个字符串连接:

示例

let x = "10";
let y = 20;
let z = x + y;
亲自试一试 »

一个常见的错误是预期结果为 30:

示例

let x = 10;
let y = 20;
let z = "The result is: " + x + y;
亲自试一试 »

一个常见的错误是预期结果为 102030:

示例

let x = 10;
let y = 20;
let z = "30";
let result = x + y + z;
亲自试一试 »

JavaScript 解释器从左到右工作。

首先添加 10 + 20,因为 x 和 y 都是数字。

然后 30 + "30" 被连接起来,因为 z 是一个字符串。


数字字符串

JavaScript 字符串可以包含数字内容:

let x = 100;         // x is a number

let y = "100";       // y is a string

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(不是数字):

示例

let x = 100 / "Apple";

亲自试一试 »

但是,如果字符串是数字,则结果将是数字:

示例

let x = 100 / "10";
亲自试一试 »

您可以使用全局 JavaScript 函数isNaN()判断一个值是否不是数字:

示例

let x = 100 / "Apple";
isNaN(x);
亲自试一试 »

留意NaN。如果你使用NaN在数学运算中,结果也将是NaN

示例

let x = NaN;
let y = 5;
let z = x + y;
亲自试一试 »

或者结果可能是像 NaN5 这样的串联:

示例

let x = NaN;
let y = "5";
let z = x + y;
亲自试一试 »

NaN是一个数字:typeof NaN回报number

示例

typeof NaN;
亲自试一试 »

无穷

Infinity(或者-Infinity) 是当您计算的数字超出最大可能数字时 JavaScript 将返回的值。

示例

let myNumber = 2;
// Execute until Infinity
while (myNumber != Infinity) {
  myNumber = myNumber * myNumber;
}
亲自试一试 »

除以 0(零)也会生成Infinity

示例

let x =  2 / 0;
let y = -2 / 0;
亲自试一试 »

Infinity是一个数字:typeof Infinity回报number

示例

typeof Infinity;
亲自试一试 »

十六进制

如果数字常量前面有 0x,JavaScript 会将其解释为十六进制。

示例

let x = 0xFF;
亲自试一试 »

切勿写入带有前导零的数字(例如 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);

示例

let x = 123;
let y = new Number(123);
亲自试一试 »

不要创建 Number 对象。

这个new关键字使代码复杂化并降低执行速度。

数字对象可能会产生意想不到的结果:

当使用==运算符,x 和 y 是相等

let x = 500;
let y = new Number(500);
亲自试一试 »

当使用===运算符,x 和 y 是不等于

let x = 500;
let y = new Number(500);
亲自试一试 »

注意之间的区别(x==y)(x===y)

(x == y)对或错?

let x = new Number(500);
let y = new Number(500);
亲自试一试 »

(x === y)对或错?

let x = new Number(500);
let y = new Number(500);
亲自试一试 »

比较两个 JavaScript 对象总是回报错误的

完整的 JavaScript 数字参考

如需完整的编号参考,请访问我们的:

完整的 JavaScript 数字参考.

该参考包含所有 Number 属性和方法的描述和示例。