跳到主要内容

JavaScript 数字

提示
  1. 数据类型:在 JavaScript 中,数字是一种原始数据类型,可以表示整数和浮点数,例如 const a = 3; const b = 3.13;
  2. 特殊数字表现形式:可以使用指数表示法(例如 5e95e-5)表示非常大或非常小的数字,以及十六进制表示法(例如 0xff)。
  3. JavaScript 数字特性
    • + 运算符用于数字时表示加法,用于字符串时表示连接。
    • NaN 表示非数字值,可通过 isNaN() 函数检测。
    • Infinity-Infinity 表示超出数字范围的计算结果。
    • BigInt 类型用于表示超过 JavaScript 数字范围的整数。

在 JavaScript 中,数字是原始数据类型。例如,

const a = 3;
const b = 3.13;

与其他一些编程语言不同,您不需要使用 intfloat 等特别声明整数或浮点值。

您可以使用指数记法 e 来表示过大或过小的数字。例如,

const a1 = 5e9;
console.log(a1); //5000000000

const a2 = 5e-5;
console.log(a2); // 0.00005

数字还可以用十六进制记法表示。例如,

const a = 0xff;
console.log(a); // 255

const b = 0x00;
console.log(b); // 0

+ 运算符与数字

+ 用于数字时,它用于加法运算。例如,

const a = 4 + 9;
console.log(a); // 13

+ 用于数字和字符串时,它用于连接它们。例如,

const a = "4" + 9;
console.log(a); // 49

当数字字符串与其他数值运算一起使用时,数字字符串会被转换为数字。例如,

const a = "4" - 2;
console.log(a); // 2

const a = "4" / 2;
console.log(a); // 2

const a = "4" * 2;
console.log(a); // 8

JavaScript NaN

在 JavaScript 中,NaN(非数字)是表示值不是数字的关键字。

对数字与字符串进行算术运算(除 + 之外)会导致 NaN。例如,

const a = 4 - "hello";
console.log(a); // NaN

内置函数 isNaN() 可用于判断一个值是否为数字。例如,

const a = isNaN(9);
console.log(a); // false

const a = isNaN(4 - "hello");
console.log(a); // true

当对 NaN 值使用 typeof 运算符时,它会返回数字输出。例如,

const a = 4 - "hello";
console.log(a); // NaN
console.log(typeof a); // "number"

JavaScript Infinity

在 JavaScript 中,当计算结果超出最大(或最小)可能数字时,会返回 Infinity(或 -Infinity)。例如,

const a = 2 / 0;
console.log(a); // Infinity

const a = -2 / 0;
console.log(a); // -Infinity

JavaScript BigInt

在 JavaScript 中,Number 类型只能表示小于 (2^53 - 1) 和大于 -(2^53 - 1) 的数字。然而,如果您需要使用比这更大的数字,您可以使用 BigInt 数据类型。

通过在整数末尾附加 n 来创建 BigInt 数字。例如,

// BigInt 值
const value = 900719925124740998n;

// 相加两个大整数
const value1 = value + 1n;
console.log(value1); // 返回 "900719925124740999n"

注意:BigInt 是在 JavaScript 更新版本中引入的,许多浏览器不支持。访问 JavaScript BigInt 支持 了解更多。

JavaScript 数字以 64 位存储

在 JavaScript 中,数字以 64 位格式 IEEE-754 存储,也称为“双精度浮点数”。

数字以 64 位存储(数字存储在 0 到 51 位位置,指数在 52 到 62 位位置,符号在 63 位位置)。

数字指数符号
52 位(0 - 51)11 位(52- 62)1 位(63)

精度问题

对浮点数进行操作会导致一些意外结果。例如,

const a = 0.1 + 0.2;
console.log(a); // 0.30000000000000004

结果应该是 0.3 而不是 0.30000000000000004。这个错误是因为在 JavaScript 中,数字以二进制形式存储以内部表示十进制数字。而十进制数字无法在二进制形式中精确表示。

为了解决上述问题,您可以这样做:

const a = (0.1 * 10 + 0.2 * 10) / 10;
console.log(a); // 0.3

您也可以使用 toFixed() 方法。

const a = 0.1 + 0.2;
console.log(a.toFixed(2)); // 0.30

toFixed(2) 将十进制数四舍五入为两位小数。

const a = 9999999999999999;
console.log(a); // 10000000000000000

注意:整数在 15 位数内是精确的。

Number 对象

您也可以使用 new 关键字创建数字。例如,

const a = 45;

// 创建一个数字对象
const b = new Number(45);

console.log(a); // 45
console.log(b); // 45

console.log(typeof a); // "number"
console.log(typeof b); // "object"

注意:建议避免使用数字对象。使用数字对象会减慢程序速度。

JavaScript 数字方法

以下是 JavaScript 中内置的数字方法列表。

方法描述
isNaN()确定传递的值是否为 NaN
isFinite()确定传递的值是否为有限数
isInteger()确定传递的值是否为整数
isSafeInteger()确定传递的值是否为安全整数
parseFloat(string)将数字浮点字符串转换为浮点数
parseInt(string, [基数])将数字字符串转换为整数
toExponential(小数位数)以指数记法返回数字的字符串值
toFixed(数字)以固定点记法返回数字的字符串值
toPrecision()以指定精度返回数字的字符串值
toString([基数])以指定基数返回数字的字符串值
valueof()返回数字的值
toLocaleString()返回数字的语言敏感表示字符串

例如,

// 检查 a 是否为整数
const a = 12;
console.log(Number.isInteger(a)); // true

// 检查 b 是否为 NaN
const b = NaN;
console.log(Number.isNaN(b)); // true

// 显示两位小数
const d = 5.1234;
console.log(d.toFixed(2)); // 5.12

JavaScript 数字属性

以下是 JavaScript 中的 Number 属性列表。

属性描述
EPSILON返回两个可表示数之间的最小间隔
MAX_SAFE_INTEGER返回最大安全整数
MAX_VALUE返回最大可能值
MIN_SAFE_INTEGER返回最小安全整数
MIN_VALUE返回最小可能值
NaN代表“非数字”值
NEGATIVE_INFINITY代表负无穷大
POSITIVE_INFINITY代表正无穷大
prototype允许向 Number 对象添加属性

例如,

// 最大可能值
const a = Number.MAX_VALUE;
console.log(a); // 1.7976931348623157e+308

// 最大安全整数
const a = Number.MAX_SAFE_INTEGER;
console.log(a); // 9007199254740991

JavaScript Number() 函数

Number() 函数用于将各种数据类型转换为数字。例如,

const a = "23"; // 字符串
const b = true; // 布尔值

// 转换为数字
const result1 = Number(a);
const result2 = Number(b);

console.log(result1); // 23
console.log(result2); // 1

如果您想了解更多关于数字转换的内容,请访问 JavaScript 类型转换(JavaScript Type Conversion)