前端必知必会-JavaScript 数字类型


JavaScript 数字

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

示例

let x = 3.14; // 带小数的数字
let y = 3; // 不带小数的数字

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

示例

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 = 9999999999999999;// x 将为 999999999999999
let y = 999999999999999; // y 将为 100000000000000000

小数的最大位数为 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 = "结果为:" + 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 是数字

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

示例

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 返回数字:

示例

typeof NaN;

无穷大

如果计算的数字超出最大可能数字的范围,JavaScript 将返回无穷大(或 -Infinity)。

示例

let myNumber = 2;
// 执行直到无穷大
while (myNumber != Infinity) {
myNumber = myNumber * myNumber;
}

除以 0(零)也会产生无穷大:

示例

let x = 2 / 0;
let y = -2 / 0;

Infinity 是一个数字:typeof Infinity 返回数字。

示例

typeof Infinity;

十六进制

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

示例

let x = 0xFF;

永远不要写一个以零开头的数字(如 07)。
如果数字前面有零,某些 JavaScript 版本会将其解释为八进制。

默认情况下,JavaScript 将数字显示为十进制小数。

但您可以使用 toString() 方法输出从 2 到 36 进制的数字。

十六进制是十六进制。十进制是十进制。八进制是八进制。二进制是二进制。

示例

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 关键字使代码复杂化并降低执行速度。

Number 对象可能会产生意外结果:

使用 == 运算符时,x 和 y 相等:

let x = 500;
let y = new Number(500);

使用 === 运算符时,x 和 y 不相等。

let x = 500;
let y = new Number(500);

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

(x == y) 是 true 还是 false?

let x = new Number(500);
let y = new Number(500);

(x === y) 是 true 还是 false?

let x = new Number(500);
let y = new Number(500);

比较两个 JavaScript 对象总是返回 false。


总结

本文介绍了JavaScript 数字类型的使用,如有问题欢迎私信和评论

猜你喜欢

转载自blog.csdn.net/qq_24018193/article/details/143450282