原生JS:Number对象详解

Number对象

本文参考MDN做的详细整理,方便大家参考MDN
JavaScript 的 Number 对象是经过封装的能让你处理数字值的对象。Number 对象由 Number() 构造器创建。
new Number(value);
如果参数无法被转换为数字,则返回 NaN。
在非构造器上下文中 (如:没有 new 操作符),Number(x) 能被用来执行类型转换。

属性:

Number.EPSILON IE Safari无
两个可表示(representable)数之间的最小间隔。EPSILON 属性的值接近于 2.2204460492503130808472633361816E-16, 或者 2的-52次方.
Number.MAX_SAFE_INTEGER IE无
在 JavaScript 中最大的安全整数 (2的53次方 - 1)。值是9007199254740991,这个数字形成的原因是,Javascript在IEEE 754 中使用double-precision floating-point format numbers作为规定,在这个规定中能安全的表示数字的范围在-(2的53次方 - 1) 到 2的53次方 - 1之间.
Number.MAX_VALUE
能表示的最大正数。最大的负数是 -MAX_VALUE。MAX_VALUE 属性值接近于 1.79E+308。大于 MAX_VALUE 的值代表 "Infinity"。

if (num1 * num2 <= Number.MAX_VALUE) {
   func1();
} else {
   func2();
}

Number.MIN_VALUE
能表示的最小正数即最接近 0 的正数 (实际上不会变成 0)。最小的负数是 -MIN_VALUE。MIN_VALUE 的值约为 5e-324。小于 MIN_VALUE ("underflow values") 的值将会转换为 0。
if (num1 / num2 >= Number.MIN_VALUE){...}
Number.NaN
特殊的“非数字”值(Not-A-Number)。和 NaN 相同
Number.NEGATIVE_INFINITY
特殊的负无穷大值,在溢出时返回该值。它和全局对象的 Infinity 属性的负值相同,该值的表现同数学上的无穷大有点儿不同(见MDN)
Number.POSITIVE_INFINITY
特殊的正无穷大值,在溢出时返回改值。它同全局对象 Infinity 属性的值相同,该值的表现同数学上的无穷大有点儿不同(见MDN)
Number.prototype
表示 Number 构造函数的原型。

静态方法

Number.isNaN() IE Safari无
用来检测传入的值是否是 NaN。只有在参数是真正的数字类型,且值为 NaN 的时候才会返回 true。
在 JavaScript 中,NaN 最特殊的地方就是,我们不能使用相等运算符(== 和 ===)来判断一个值是否是 NaN,因为 NaN == NaN 和 NaN === NaN 都会返回 false。因此,必须要有一个判断值是否是 NaN 的方法
和全局函数 isNaN() 相比,该方法不会强制将参数转换成数字,只有在参数是真正的数字类型,且值为 NaN 的时候才会返回 true。
兼容写法Polypill:

Number.isNaN = Number.isNaN || function(value) {
    return typeof value === "number" && isNaN(value);
}

Number.isFinite() IE Safari无
用来检测传入的参数是否是一个有穷数。和全局的 isFinite() 函数相比,这个方法不会强制将一个非数字的参数转换成数字,这就意味着,只有真正的数字才有可能返回 true。
Polypill

Number.isFinite = Number.isFinite || function(value) {
    return typeof value === "number" && isFinite(value);
}

Number.isInteger() IE Safari无
确定传递的值类型是“number”,且是整数。
Polypill

Number.isInteger = Number.isInteger || function(value) {
    return typeof value === "number" && 
           isFinite(value) && 
           Math.floor(value) === value;
};

Number.isSafeInteger() 只有Firefox实现
用来判断传入的参数值是否是一个“安全整数”(处于 -(2的53次方 -1) 和 2的53次方 -1 之间的整数)。
Number.parseFloat() IE Safari无
把一个字符串解析成浮点数,和全局对象 parseFloat() 一样。
Number.parseInt(string[, radix]) IE Safari无
根据给定的进制数把一个字符串解析成整数,和全局对象 parseInt() 一样。

Number 实例方法

数字字面量直接调用以下方法:只要能够让JavaScript引擎不混淆小数点和对象的点运算符,各种写法都能用,JavaScript会把第一个点理解成小数点(即10.0),把第二个点理解成调用对象属性,从而得到正确结果。

(10).toString(2)
10..toString(2) // "1010"
10 .toString(2) // "1010"
10.0.toString(2) // "1010"
10['toString'](2) // "1010"

Number.prototype.toExponential(n)
将一个数转为科学计数法形式字符串。参数表示小数点后有效数字的位数,范围为0到20,超出这个范围,会抛出一个RangeError。
Number.prototype.toFixed(x)
将一个数转为指定位数x的小数,返回这个小数对应的字符串(会进行四舍五入),位数x有效范围为0到20,超出这个范围将抛出RangeError错误。
Number.prototype.toLocaleString()
返回一个根据本地语言环境的数字格式字符串。重写了Object.prototype.toLocaleString() 方法
Number.prototype.toPrecision(n)
用于将一个数转为指定位数n的有效数字的字符串,参数n为有效数字的位数,范围是1到21,超出这个范围会抛出RangeError错误。该方法执行的四舍五入不可靠,跟浮点数不是精确储存有关,如:

(12.35).toPrecision(3) // "12.3"
(12.25).toPrecision(3) // "12.3"
(12.15).toPrecision(3) // "12.2"
(12.45).toPrecision(3) // "12.4"

Number.prototype.toString(radius)
用来将一个数值转为字符串形式.
可选的参数radius,表示输出的进制,默认是10进制
Number.prototype.valueOf()
返回一个 Number 对象的基本数字值.。重写了 Object.prototype.valueOf() 方法.

posted on 2016-09-06 17:55  SuriFuture  阅读(5165)  评论(1编辑  收藏  举报

导航