Skip to main content

JS 内置对象之 Number

Number 对象是 JS 封装的处理数字值的对象,由 Number() 构造器创建。

一、属性

1、MAX_VALUE

Number.MAX_VALUE 接近于 1.79E+308。大于 MAX_VALUE 的值代表 Infinity

if (num1 * num2 <= Number.MAX_VALUE) {
fn();
}

2、MAX_SAFE_INTEGER

Number.MAX_SAFE_INTEGER 常量表示 JS 中的最大安全整数 253 - 1 = 9007199254740991。

Number.MAX_SAFE_INTEGER // 9007199254740991
Math.pow(2, 53) - 1 // 9007199254740991

3、POSITIVE_INFINITY

Number.POSITIVE_INFINITY 属性表示正无穷大。

该值的表现同数学上的无穷大有点不同:

  • 任何正值,包括 Number.POSITIVE_INFINITY,乘以 Number.POSITIVE_INFINITYNumber.POSITIVE_INFINITY
  • 任何负值,包括 Number.NEGATIVE_INFINITY,乘以 Number.POSITIVE_INFINITYNumber.NEGATIVE_INFINITY
  • 0 乘以 Number.POSITIVE_INFINITY 为 NaN。
  • NaN 乘以 Number.POSITIVE_INFINITY 为 NaN。
  • Number.POSITIVE_INFINITY 除以 Number.NEGATIVE_INFINITY 以外的任何负值为 Number.NEGATIVE_INFINITY
  • Number.POSITIVE_INFINITY 除以 Number.POSITIVE_INFINITY 以外的任何正值为 Number.POSITIVE_INFINITY
  • Number.POSITIVE_INFINITY 除以 Number.NEGATIVE_INFINITYNumber.POSITIVE_INFINITY 为 NaN。
  • 任何数除以 Number.POSITIVE_INFINITY 为 0。
console.log(Number.MAX_VALUE * 2)     // Infinity
console.log(Number.POSITIVE_INFINITY) // Infinity

4、MIN_VALUE

Number.MIN_VALUE 是 JS 中最接近 0 的正值(约为 5e-324),而非最小值,小于 Number.MIN_VALUE 的值将会转换为 0。

if (num1 / num2 >= Number.MIN_VALUE) {
fn();
}

5、MIN_SAFE_INTEGER

Number.MIN_SAFE_INTEGER 常量表示 JS 中的最小安全整数 -(253 - 1) = -9007199254740991。

Number.MIN_SAFE_INTEGER // -9007199254740991
-(Math.pow(2, 53) - 1) // -9007199254740991

6、NEGATIVE_INFINITY

Number.NEGATIVE_INFINITY 属性表示负无穷大。

该值的行为同数学上的无穷大(infinity)有点不同:

  • 任何正值,包括 Number.POSITIVE_INFINITY,乘以 Number.NEGATIVE_INFINITYNumber.NEGATIVE_INFINITY
  • 任何负值,包括 Number.NEGATIVE_INFINITY,乘以 Number.NEGATIVE_INFINITYNumber.POSITIVE_INFINITY
  • 0 乘以 Number.NEGATIVE_INFINITY 为 NaN.
  • NaN 乘以 Number.NEGATIVE_INFINITY 为 NaN.
  • Number.NEGATIVE_INFINITY 除以任何负值(除了 Number.NEGATIVE_INFINITY)为 Number.POSITIVE_INFINITY
  • Number.NEGATIVE_INFINITY 除以任何正值(除了 Number.POSITIVE_INFINITY)为 Number.NEGATIVE_INFINITY
  • Number.NEGATIVE_INFINITY 除以 Number.NEGATIVE_INFINITYNumber.POSITIVE_INFINITY 是 NaN。
  • 任何数除以 Number.NEGATIVE_INFINITY 为 0。
console.log((-Number.MAX_VALUE) * 2)    // -Infinity
console.log(Number.NEGATIVE_INFINITY) // -Infinity

7、EPSILON

Number.EPSILON 表示最小的浮点数之间的差值 2-52 = 2.2204460492503130808472633361816E-16。

x = 0.2;
y = 0.3;
z = 0.1;
console.log((Math.abs(x - y + z) < Number.EPSILON)); // true

Polyfill:

if (Number.EPSILON === undefined) {
Number.EPSILON = Math.pow(2, -52);
}

二、方法

1、parseInt

Number.parseInt(string[, radix])

功能:依据指定基数把字符串解析成整数,等同于 parseInt

参数:

  • string:要解析的字符串。
  • radix(可选):基数(2 ~ 36)。

返回值:给定字符串解析的整数,如果无法被解析则返回 NaN。

示例:

console.log(parseInt('123'))        // 123
console.log(Number.parseInt('123')) // 123
console.log(Number.parseInt('aaa')) // NaN

2、parseFloat

Number.parseFloat(string)

功能:把字符串解析成浮点数,等同于 parseFloat

参数:string:被解析的字符串。

返回值:给定值解析的浮点数,如果无法被解析则返回 NaN。

示例:

console.log(parseFloat('1.23'))        // 1.23
console.log(Number.parseFloat('1.23')) // 1.23
console.log(Number.parseFloat('1.aa')) // 1
console.log(Number.parseFloat('a.aa')) // NaN

3、isNaN

Number.isNaN(value)

功能:判断值是否为 NaN,是 isNaN() 的严格版本,只有值为真正的 NaN 时才返回 true。

参数:value:要检测是否为 NaN 的值。

返回值:一个布尔值,表示给定的值是否是 NaN。

示例:

// 以下与全局 isNaN() 时返回结果相同
Number.isNaN(NaN); // true
Number.isNaN(Number.NaN); // true
Number.isNaN(0 / 0) // true

Number.isNaN(true); // false
Number.isNaN(null); // false
Number.isNaN(37); // false
Number.isNaN("37"); // false
Number.isNaN("37.37"); // false
Number.isNaN(""); // false
Number.isNaN(" "); // false

// 以下与全局 isNaN() 时返回结果不同,Number.isNaN () 只有在值为数字 NaN 时才返回 true
isNaN("NaN"); // true
Number.isNaN("NaN"); // false,字符串 "NaN" 不会被隐式转换成数字 NaN。
isNaN(undefined); // true
Number.isNaN(undefined); // false
isNaN({}); // true
Number.isNaN({}); // false
isNaN("blabla"); // true
Number.isNaN("blabla"); // false

以上代码中,Number.isNaN() 和全局 isNaN() 返回结果不一定相同,Number.isNaN() 不会自行将参数转成数字,只有在参数是值为 NaN 时,才会返回 true。

4、isInteger

Number.isInteger(value)

功能:判断给定的参数是否为整数。

参数:value:要判断的参数。

返回值:判断给定值是否是整数的 Boolean 值。

示例:

Number.isInteger(0);         // true
Number.isInteger(1); // true
Number.isInteger(-100000); // true

Number.isInteger(0.1); // false
Number.isInteger(Math.PI); // false
Number.isInteger(Infinity); // false
Number.isInteger("10"); // false
Number.isInteger(true); // false
Number.isInteger([1]); // false

5、isSafeInteger

Number.isSafeInteger(testValue)

功能:判断传入的参数是否是安全整数 -(253 - 1) ≤ testValue ≤ 253 - 1

参数:testValue:要检测的参数。

返回值:表示给定值是否是安全整数的布尔值。

示例:

Number.isSafeInteger(3);                    // true
Number.isSafeInteger(3.0); // true
Number.isSafeInteger(Math.pow(2, 53) - 1) // true
Number.isSafeInteger(Math.pow(2, 53)) // false
Number.isSafeInteger(NaN); // false
Number.isSafeInteger(Infinity); // false
Number.isSafeInteger("3"); // false
Number.isSafeInteger(3.1); // false

6、isFinite

Number.isFinite(value)

功能:判断传入的参数是否是有穷数。

参数:value:被检测有穷性的值。

返回值:表示给定值是否是有穷数的布尔值。

示例:

Number.isFinite(10 / 5);  // true
Number.isFinite(1 / 0); // false
Number.isFinite(0 / 0); // false

7、toFixed

numObj.toFixed(digits)

功能:使用定点表示法来格式化一个数值。

参数:digits(可选):保留几位小数(0 ~ 20),省略则默认为 0。

返回值:使用定点表示法表示给定数字的字符串。

示例:

function financial(x) {
return Number.parseFloat(x).toFixed(2);
}

console.log(financial(123.456)); // "123.46"
console.log(financial(0.004)); // "0.00"
console.log(financial('1.23e+5')); // "123000.00"

8、toPrecision

numObj.toPrecision(precision)

功能:以指定的精度返回该数值对象的字符串表示。

参数:precision(可选):指定有效数个数的整数(如果非整数则向下取整)。

返回值:以定点表示法或指数表示法表示的一个数值对象的字符串表示。

示例:

var numObj = 5.123456;
console.log(numObj.toPrecision()); // 输出 5.123456
console.log(numObj.toPrecision(5)); // 输出 5.1235
console.log(numObj.toPrecision(2)); // 输出 5.1
console.log(numObj.toPrecision(1)); // 输出 5

// 注意:在某些情况下会以指数表示法返回
console.log((1234.5).toPrecision(2)); // "1.2e+3"

9、toExponential

numObj.toExponential(fractionDigits)

功能:以科学记数法返回该数值字符串。

参数:fractionDigits(可选):用来指定小数点后有几位数字的整数。

返回值:一个用幂的形式 (科学记数法) 来表示 Number 对象的字符串。

示例:

var numObj = 77.1234;

numObj.toExponential(); // 7.71234e+1
numObj.toExponential(4); // 7.7123e+1
numObj.toExponential(2); // 7.71e+1
77.1234.toExponential(); // 7.71234e+1
77 .toExponential(); // 7.7e+1

10、toString

numObj.toString([radix])

功能:将 Number 对象转为字符串。

参数:radix(可选):基数(2 ~ 36),若省略则默认基数为 10,即十进制。

返回值:该对象指定基数的字符串。

示例:

var num = 10;
console.log(num.toString()); // "10"
console.log(num.toString(2)); // "1010"

11、toLocaleString

numObj.toLocaleString([locales [, options]])

功能:将 Number 对象转为本地格式的字符串。

参数:

  • locales(可选):设置指定的语言格式
  • options(可选):对 Number 对象进行定制。

返回值:返回一个语言环境下的表示字符串。

示例:

var number = 123456.789;

// 使用 locales

// 德国使用逗号作为小数分隔符,分位周期为千位
console.log(number.toLocaleString('de-DE')); // 123.456,789

// 在大多数阿拉伯语国家使用阿拉伯语数字
console.log(number.toLocaleString('ar-EG')); // ١٢٣٤٥٦٫٧٨٩

// 印度使用千位/拉克(十万)/克若尔(千万)分隔
console.log(number.toLocaleString('en-IN')); // 1,23,456.789

// nu 扩展字段要求编号系统,e.g. 中文十进制
console.log(number.toLocaleString('zh-Hans-CN-u-nu-hanidec')); // 一二三,四五六.七八九

// 当请求不支持的语言时,例如巴厘语,加入一个备用语言,比如印尼语
console.log(number.toLocaleString(['ban', 'id'])); // 123.456,789

// 使用 options

// 要求货币格式
console.log(number.toLocaleString('de-DE', { style: 'currency', currency: 'EUR' }));
// 123.456,79 €

// 日元不使用小数位
console.log(number.toLocaleString('ja-JP', { style: 'currency', currency: 'JPY' }))
// ¥123,457

// 限制三位有效数字
console.log(number.toLocaleString('en-IN', { maximumSignificantDigits: 3 }));
// 1,23,000

12、valueOf

numObj.valueOf()

功能:返回一个被 Number 对象包装的原始值。

参数:

返回值:指定 Number 对象的原始值的数字。

示例:

var numObj = new Number(10);
console.log(numObj.valueOf());