在 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 / 0或Math.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_INTEGER到Number.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
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);