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_INFINITY
为Number.POSITIVE_INFINITY
。 - 任何负值,包括 Number.NEGATIVE_INFINITY,乘以
Number.POSITIVE_INFINITY
为 Number.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_INFINITY 或Number.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_INFINITY
为Number.NEGATIVE_INFINITY
。 - 任何负值,包括
Number.NEGATIVE_INFINITY
,乘以Number.NEGATIVE_INFINITY
为 Number.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_INFINITY
或 Number.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());