JavaScript 数字

JavaScript 只有一种数值类型。书写数值时带不带小数点均可。

 

1. JavaScript 数值

书写 JavaScript 数值既可以带小数点,也可以不带:

范例

var x = 3.14;    // 带小数点的数值
var y = 3;// 不带小数点的数值

我要试一试

超大或超小的数可通过科学计数法来写:

范例

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

我要试一试

 

2. JavaScript 数值始终是 64 位的浮点数

与许多其他编程语言不同,JavaScript 不会定义不同类型的数,比如整数、短的、长的、浮点的等等。

JavaScript 数值始终以双精度浮点数来存储,根据国际 IEEE 754 标准。

此格式用 64 位存储数值,其中 0 到 51 存储数字(片段),52 到 62 存储指数,63 位存储符号:

值(aka Fraction/Mantissa) 指数 符号
52 bits(0 - 51) 11 bits (52 - 62) 1 bit (63)

 

3. 精度

整数(不使用指数或科学计数法)会被精确到 15 位。

范例

var x = 999999999999999;   // x 将是 999999999999999
var y = 9999999999999999;  // y 将是 10000000000000000

我要试一试

小数的最大数是 17 位,但是浮点的算数并不总是 100% 精准:

范例

var x = 0.2 + 0.1;  // x 将是 0.30000000000000004

我要试一试

使用乘除法有助于解决上面的问题:

范例

var x = (0.2 * 10 + 0.1 * 10) / 10;// x 将是 0.3

我要试一试

 

4. 数字和字符串相加

警告!!

JavaScript 的加法和级联(concatenation)都使用 + 运算符。

数字用加法。字符串用级联。

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

范例

var x = 10;
var y = 20;
var z = x + y;  // z 将是 30(一个数)

我要试一试

如果对两个字符串相加,结果将是一个字符串的级联:

范例

var x = "10";
var y = "20";
var z = x + y;    // z 将是 1020(字符串)

我要试一试

如果您对一个数和一个字符串相加,结果也是字符串级联:

范例

var x = 10;
var y = "20";
var z = x + y;    // z 将是 1020(一个字符串)

我要试一试

如果您对一个字符串和一个数字相加,结果也是字符串级联:

范例

var x = "10";
var y = 20;
var z = x + y;    // z 将是 1020(字符串)

我要试一试

常见的错误是认为结果应该是 30:

范例

var x = 10;
var y = 20;
var z = "The result is: " + x + y;

我要试一试

常见的错误是认为结果应该是 102030:

范例

var x = 10;
var y = 20;
var z = "30";
var result = x + y + z;

我要试一试

JavaScript 从左向右进行编译。

因为 x 和 y 都是数,10 + 20 将被相加。

因为 z 是字符串,30 + "30" 被级联。

 

5. 数字字符串

JavaScript 字符串可以拥有数字内容:

var x = 100;  // x 是数字

var y = "100";// y 是字符串

在所有数字运算中,JavaScript 会尝试将字符串转换为数字:

该例如此运行:

var x = "100";
var y = "10";
var z = x / y;// z 将是 10

我要试一试

该例也将如此运行:

var x = "100";
var y = "10";
var z = x * y;// z 将是 1000

我要试一试

该例如此运行:

var x = "100";
var y = "10";
var z = x - y;// z 将是 90

我要试一试

但是该例不会如上例般运行:

var x = "100";
var y = "10";
var z = x + y;// z 不会是 110(而是 10010)

我要试一试

在最后一个例子中,JavaScript 用 + 运算符对字符串进行了级联。

 

6. NaN - 非数值

NaN 属于 JavaScript 保留词,指示某个数不是合法数。

尝试用一个非数字字符串进行除法会得到 NaN(Not a Number):

范例

var x = 100 / "Apple";  // x 将是 NaN(Not a Number)

我要试一试

不过,假如字符串包含数值,则结果将是数:

范例

var x = 100 / "10";     // x 将是 10

我要试一试

您可使用全局 JavaScript 函数 isNaN() 来确定某个值是否是数:

范例

var x = 100 / "Apple";
isNaN(x);        // 返回 true,因为 x 不是数

我要试一试

要小心 NaN。假如您在数学运算中使用了 NaN,则结果也将是 NaN

范例

var x = NaN;
var y = 5;
var z = x + y;  // z 将是 NaN

我要试一试

结果也许是串连接:

范例

var x = NaN;
var y = "5";
var z = x + y;  // z 将是 NaN5

我要试一试

NaN 是数,typeof NaN 返回 number

范例

typeof NaN;      // 返回 "number"

我要试一试

JavaScript 数值方法:Number 方法用于处理数值。toString() 方法:toString(以字符串返回数值。所有数字方法可用于任意类型的数字(字面量、变量或表达式)。toExponential() 方法:toExponential() 返回字符串值,它包含已被四舍五入并使用指数计数法的数字。toFixed() 方法:toFixed() 返回字符串值,它包含了指定位数小数的数字。toPrecision() 方法。valueOf() 方法:valueOf() 以数值返回数值。