在 JavaScript 中,Number 类型是用于表示整数和浮点数(小数)的数据类型。这里有一些关于 JavaScript 中的数字(Numbers)的基本信息:

数字表示

  • 可以表示正数、负数,以及零。
  • 包括整数和浮点数。
  • 遵循国际 IEEE 754 标准。
  • 在 JavaScript 中,所有数字都是以 64 位浮点格式存储的,因此,不存在其他语言中常见的整数类型和浮点类型之分。
var x = 3.14; // A number with decimals
var y = 3; // A number without decimals
var x = 123e5; // 12300000
var y = 123e-5; // 0.00123

特殊的数字值

  • Infinity:代表无穷大,任何超出 JavaScript 数值范围的操作都会返回 Infinity。比如,1 / 0 会返回 Infinity
  • -Infinity:代表负无穷大,类似 Infinity,但是在消极方面,比如 -1 / 0 会返回 -Infinity
  • NaN(Not a Number 的缩写):代表一个不是数字的值。当一个数学运算无法返回一个明确的数字时,比如 0 / 0Math.sqrt(-1),结果将是 NaN
isNaN(x);
let x = 100 / "Apple"; // NaN
let y = NaN + 10; // NaN
 
let x = 100 / "10"; // 10
 
let x = NaN;
let y = "5";
let z = x + y; //  NaN5:
 
// `NaN` is a number: `typeof NaN` returns `number`
// `Infinity` is a number: `typeof Infinity` returns `number`.

数值范围

  • JavaScript 中的最大可表示数字是 Number.MAX_VALUE
  • 最小可表示数字是 Number.MIN_VALUE
  • 安全整数范围是 Number.MIN_SAFE_INTEGERNumber.MAX_SAFE_INTEGER;超出这个范围的整数可能无法精确表示。

数字字面量

允许直接在代码中使用十进制、十六进制(前缀 0x)、八进制(前缀 0o,ECMAScript 6 引入),和二进制(前缀 0b,ECMAScript 6 引入)。

示例:

var decimalNum = 100; // 十进制
var hexNum = 0xff; // 十六进制
var octalNum = 0o377; // 八进制 (ES6)
var binaryNum = 0b11111111; // 二进制 (ES6)
 
let myNumber = 32;
myNumber.toString(32);
myNumber.toString(16);
myNumber.toString(12);
myNumber.toString(10);
myNumber.toString(8);
myNumber.toString(2);

精度问题

由于使用了浮点数表示法,数学运算中常常会出现精度问题,如 0.1 + 0.2 并不等于 0.3,而是一个接近于 0.3 但不完全等于 0.3 的浮点数。开发者必须意识到这一点,并在必要时采取适当的措施来处理这种计算误差。

Number 类型在编程中是非常基础也非常重要的,无论是在数学计算还是在日常的数据操作中,合理使用和处理数字对于开发者来说是一个必要的技能。

除此之外,超过 Number 表示范围的也会出现精度问题:

9007199254740992 === 9007199254740993; // is true !!!

Numbers as Objects

JS 更详细的运算符

let x = 123;
let y = new Number(123);
// When using the == operator, x and y are equal:
// When using the === operator, x and y are not equal.
 
// Comparing two JavaScript objects **always** returns **false**.
let x = new Number(500);
let y = new Number(500);

其他

JS 数字与字符串转换