Number
对象是数值对应的包装对象,可以作为构造函数使用,也可以作为工具函数使用。
- 作为构造函数时用于生成值为数值的对象
let num = new Number(1);
typeof num; // 'object'
- 作为工具函数时,它可以将任何类型的值转为数值
Number('a'); //NaN
Number(true); //1
Number('123'); //123
静态属性
- Number对象拥有以下一些静态属性(即直接定义在Number对象上的属性,而不是定义在实例上的属性)。
Number.POSITIVE_INFINITY // Infinity 正的限,指向Infinity
Number.NEGATIVE_INFINITY // -Infinity 负的无限,指向-Infinity
Number.NaN // NaN 表示非数值,指向NaN
Number.MAX_VALUE
// 1.7976931348623157e+308
Number.MAX_VALUE < Infinity
// true
Number.MIN_VALUE //表示最小的正数,即最接近0的正数;- Number.MIN_VALUE最接近0的负数
// 5e-324
Number.MIN_VALUE > 0
// true
Number.MAX_SAFE_INTEGER // 9007199254740991 表示能够精确表示的最大整数
Number.MIN_SAFE_INTEGER // -9007199254740991 表示能够精确表示的最小整数
实例方法
- toString(): 它能将十进制的数,转为其它进制的字符串. 如果需要将其它进制的数转回十进制,需要使用parseInt()方法
* 他可以接受一个参数表示输出的进制
(10).toString(); // '10'
(10).toString(2);// '1010' 将10转换成2进制字符串
(10).toString()也可以写成下面的方式:
10..toString(); //Js会把第一个点看成小数点,第二个点理解成调用对象属性
10 .toString();
10.0.toString()
10['toString']();
- Number.prootype.toFixed():先将一个数转为指定位数的小数,然后返回这个小数的对应的字符串
(10).toFixed(2);// '10.00'
// 参数的有效范围为0-100
// 由于四舍五入是不确定的,使用的时候必须非常小心
- Number.prototype.toExponential():用于将一个数转为科学计数法形式
(10).toExponential(); // '1e+1'
(10).toExponential(1); // '1.0e+1'
- Number.prototype.toPrecision():用于将一个数转为指定位数的有效数字
(1234).toPrecision(2);//'1.2e+3'
(1234).toPrecision(4);// '1234'
(1234).toPrecision(5);// '1234.0'
(1.256).toPrecision(2);// '1.3'
(1.246).toPrecision(2);//'1.2' 它的四舍五入不可靠,跟浮点数不是精确储存有关
- Number.prototype.toLocaleString():该方法接受一个地区码作为参数,返回一个字符串,表示当前数字在该地区的当地书写形式
(123).toLocaleString('zh-Hans-CN-u-nu-hanidec') //'一二三'
let nowTime = new Date();
nowTime.toLocaleString(); //'2021/4/4 下午6:01:47'
// 它还接受第二参数:用来定制指定用途的返回字符号,该对象的style属性指定输出样式,默认值是decimal,表示输出十进制形式。如果值为percent,表示输出百分数。
(123).toLocaleString('zh-Hans-CN', { style: 'percent' }); // "12,300%"
(123).toLocaleString('zh-Hans-CN',{style:'currency',currency: 'CNY' })// currency 可以是CNY人民币 EUR欧元 USD美元
// 如果Number.prototype.toLocaleString()省略了参数,则由浏览器自行决定如何处理,通常会使用操作系统的地区设定。注意,该方法如果使用浏览器不认识的地区码,会抛出一个错误。
- 自定义方法:与其他对象一样,Number.prototype对象上面可以自定义方法,被Number的实例继承
Number.prototype.adds = function (x){
return this + x;
};
(10).adds(10); // 20
Number.prototype.reduces = function (x){
return this - x;
};
(10).adds(12).reduces(4); //18 可以链式运算
// 数值的自定义方法,只能定义在它的原型对象Number.prototype上面,数值本身是无法自定义属性的
let n = 1;
n.x = 1;
n.x // undefined
// n是一个原始类型的数值。直接在它上面新增一个属性x,不会报错,但毫无作用,总是返回undefined。这是因为一旦被调用属性,n就自动转为Number的实例对象,调用结束后,该对象自动销毁。所以,下一次调用n的属性时,实际取到的是另一个对象,属性x当然就读不出来