ES6 - Number 对象
ES6 - Number 对象和数字字面量
Section titled “ES6 - Number 对象和数字字面量”在 JavaScript 中,数字主要是原始值(primitive values)。然而,JavaScript 也提供了一个 Number 对象,它是原始数字值的包装器(wrapper)。通常您不需要直接创建 Number 对象,因为当对其调用方法时,JavaScript 会自动将数字字面量转换为 Number 实例。
const numObj = new Number(value);如果 value 无法转换为数字,Number 对象将表示 NaN(非数字,Not-a-Number)。通常最好使用数字原始值进行操作。
Number 对象的静态属性
Section titled “Number 对象的静态属性”这些属性直接通过 Number 构造函数访问(例如 Number.MAX_VALUE)。
| 属性 | 描述 |
|---|---|
Number.EPSILON | 两个可表示数字之间的最小差异。用于浮点数比较。 |
Number.MAX_SAFE_INTEGER | JavaScript 中最大的安全整数(253 - 1)。超出此范围的操作可能会丢失精度。 |
Number.MIN_SAFE_INTEGER | JavaScript 中最小的安全整数(-(253 - 1))。 |
Number.MAX_VALUE | 可表示的最大正数。 |
Number.MIN_VALUE | 可表示的最小正数(最接近零,但不为零)。 |
Number.NaN | 表示“非数字”(Not-a-Number),是一个特殊值,表示不可表示或未定义的数值结果。 |
Number.NEGATIVE_INFINITY | 表示负无穷的特殊值(例如,负数除以零的结果)。 |
Number.POSITIVE_INFINITY | 表示正无穷的特殊值(例如,正数除以零的结果)。 |
Number.prototype | 一个对象,允许您向所有 Number 实例添加属性和方法。(高级用法)。 |
Number 对象的静态方法
Section titled “Number 对象的静态方法”这些方法直接在 Number 构造函数上调用。
| 方法 | 描述 |
|---|---|
Number.isNaN(value) | 确定传递的值是否为 NaN。比全局 isNaN() 函数更健壮,因为它不会将参数强制转换为数字。 |
Number.isFinite(value) | 确定传递的值是否为有限数(非 NaN,Infinity 或 -Infinity)。 |
Number.isInteger(value) | 确定传递的值是否为整数。 |
Number.isSafeInteger(value) | 确定传递的值是否为安全整数(即在 Number.MIN_SAFE_INTEGER 到 Number.MAX_SAFE_INTEGER 的范围内)。 |
Number.parseFloat(string) | 解析字符串参数并返回浮点数。与全局 parseFloat() 相同。 |
Number.parseInt(string, radix) | 解析字符串参数并返回指定基数(radix/base)的整数。与全局 parseInt() 相同。 |
console.log(Number.isNaN(NaN)); // trueconsole.log(Number.isNaN('hello' / 2)); // trueconsole.log(Number.isFinite(123)); // trueconsole.log(Number.isFinite(Infinity)); // falseconsole.log(Number.isInteger(10)); // trueconsole.log(Number.isInteger(10.5)); // falseconsole.log(Number.isSafeInteger(Math.pow(2, 53) - 1)); // trueconsole.log(Number.isSafeInteger(Math.pow(2, 53))); // falseNumber 的实例方法
Section titled “Number 的实例方法”这些方法在数字原始值或 Number 对象上调用。
| 方法 | 描述 |
|---|---|
num.toExponential(fractionDigits) | 返回以指数表示法表示数字的字符串。 |
num.toFixed(digits) | 返回以定点表示法表示数字的字符串(小数点后指定位数)。 |
num.toLocaleString(locales, options) | 返回表示数字的语言敏感字符串。 |
num.toPrecision(precision) | 返回表示具有指定精度(有效位数)的数字字符串。 |
num.toString(radix) | 返回指定基数(radix/base,例如二进制为 2,十六进制为 16)表示数字的字符串。默认为基数 10。 |
num.valueOf() | 返回 Number 对象的原始值。 |
const n = 12345.6789;console.log(n.toExponential(2)); // "1.23e+4"console.log(n.toFixed(2)); // "12345.68"console.log(n.toPrecision(7)); // "12345.68"console.log((255).toString(16)); // "ff" (十六进制)console.log((10).toString(2)); // "1010" (二进制)数字字面量 (ES6+)
Section titled “数字字面量 (ES6+)”ES6 引入了方便的二进制和八进制整数字面量语法。十六进制字面量之前已经可用。
- 二进制字面量(Binary Literals):以
0b或0B开头。示例:0b1010(十进制 10)。 - 八进制字面量(Octal Literals):以
0o或0O开头。示例:0o12(十进制 10)。(注意:以单独的0开头的旧式八进制字面量在严格模式下已弃用,应避免使用)。 - 十六进制字面量(Hexadecimal Literals):以
0x或0X开头。示例:0xA(十进制 10)。
console.log(0b001); // 1console.log(0b010); // 2console.log(0b1111); // 15console.log(0o010); // 8console.log(0o100); // 64console.log(0xFF); // 255 (F 在十六进制中是 15, FF = 15*16 + 15)console.log(0x100); // 256 (1*16^2 + 0*16^1 + 0*16^0)BigInt (ES2020)
Section titled “BigInt (ES2020)”对于大于 Number.MAX_SAFE_INTEGER 或小于 Number.MIN_SAFE_INTEGER 的数字,JavaScript 引入了 BigInt 类型。BigInt 可以通过在整数文字末尾添加 n 或调用 BigInt() 构造函数来创建。
const largeNumber = 9007199254740991n; // 一个 BigIntconst anotherLarge = BigInt("9007199254740992");console.log(largeNumber + 1n); // 9007199254740992n// 注意:您不能直接在标准算术运算中混合 Number 和 BigInt 类型。// console.log(largeNumber + 1); // 这将抛出一个 TypeErrorBigInt 允许任意精度整数算术。更多详细信息,请参阅 MDN BigInt 文档。