Number对象

源码下载

包装对象

  谈到数字涉及到两个概念一个是Number数据类型,另一个是Number数字对象。 一般处理数字问题,声明数字变量就像第33行代码一样直接赋值let m = 10;赋值为10,解释器会明白a是一个数字类型数据,具体说是整型。 Javascript语言内置了一个构造函数Number(),可以单独使用,可以和new操作符结合使用,如下第34行let n = Number(10);、 第35行let w = new Number(10);两种变量创建方式。使用typeof可以判断这三种方式创建的变量的数据类型,可以看出前两种声明方式 变量是数字类型,使用操作符的时候是对象类型。这时候可能大家会问数字变量是值类型数据,不是对象类型数据怎么会有方法和属性?本着万物皆对象的精神,Javascript语言或者说他的解释器 设置了一个自动转化机制,把原始类型包转为包装对象。具体来说就是如果使用直接赋值的方式let m = 10;声明一个变量,当浏览器js解释器阅读到let.toString(16)这样 利用符号点调用方法的时候,后自动把数字变量转化为对象,等方法调用结束后,内存中会销毁刚刚生成的对象,不会占用内存。这个过程是隐式进行的,如果你编写代码let w = new Number(10);,这就是告诉浏览器 你给我创建一个变量,类型是object,值是10。下面使用运算==和===的返回结果也可以看到,使用==的时候,m和w相等,使用===的时候,不相等。(使用===会比较类型和值两项,==仅仅比较值是否相等,至于是数字、字符串、对象不关心)。

32        //比较Number、new Number区别
33        let m = 10;
34        let n = Number(10);
35        let w = new Number(10);
36   
37        document.write(typeof m);//返回m数据类型 number
38        document.write("<br>");
39        document.write(typeof n);//返回n数据类型 number
40        document.write("<br>");
41        document.write(typeof w);//返回w数据类型 object
42        document.write("<br>");
43   
44        document.write(m == n);//m == n返回结果true
45        document.write("<br>");
46        document.write(m === n);//m == n返回结果true
47        document.write("<br>");
48   
49        document.write(m == w);//m == n返回结果true
50        document.write("<br>");
51        document.write(m === w);//m == n返回结果false
52        document.write("<br>");

进制转化案例

  下面一段代码主要使用数字对象的toString方法在页面上显示十进制数的二进制和十六进制形式。

9         //x执行方法toString返回二进制形式1010
10        let a = x.toString(2);
11        //y执行方法toString返回十六进制形式FF
12        let b = y.toString(16);
13        document.write(a+"<br>");
14        document.write(b+"<br>");
15        //typeof  b测试b的数据类型,返回string
16        document.write(typeof  b + "<br>");

  简单描述,toString(n)方法的作用是把一个数转化为n进制数,第16行代码通过typeof判断b的类型是string可以发现,实际上是把数字转化为字符串,比如十进制10对应的是二进制1010,那么当执行toString(2)返回的结果就是 一个字符串"1010"。

  不管什么进制,那都是针对人类的书写系统而言,对于计算机而言,寄存器的状态要么是1要么是0,当程序中出现255的时候,对于计算机而言要么是按照数字来处理,根据数字存储的标准,初始化255的存储形式, 对于正整数计算机基本和数学中是一致的,直接数学计算得出255的二进制是1111111,浏览器初始化补全32为位, 凑够一个32位4个字节的存储单元就是000...0011111111(内存寄存器状态0是24位状态1是8位)。 要么把255视为字符串,按照字符存储标准,255是三个字符,比如按照UTF-8标准分别确定它们的二进制形式,2对应00110010,5对应00110101

number对象的属性constructor

  在Javascript语言中通过构造函数和操作符new创建的对象,都具有constructor属性,属性constructor的属性值就是本对象的构造函数。 当数字变量调用属性constructor时,解释器默认把数字转化为对象,自然可以返回数字对象的构造函数function Number() { [native code] }, Number()是Javascript语言本身自带的一个构造函数。

17        //x.constructor返回数字对象的constructor属性,function Number() { [native code] }
18        document.write(x.constructor);
19        document.write("<br>");
20   
21        //借助一个函数,学习constructor属性
22        function fun() {
23            let x = 11;
24            let y = 3;
25            let z = x+y;
26        }
27        var obj = new fun();
28        //obj.constructor返回结果function fun() { let x = 11; let y = 3; let z = x+y; }
29        document.write(obj.constructor);

Number对象基本语法

Number对象属性

  Number的MAX_VALUE、MIN_VALUE、NEGATIVE_INFINITY、POSITIVE_INFINITY属性可以视为数字类型数据一个数据,类似12、35...这样的数据,只不过大小不是12、35...。

属性 含义
MAX_VALUE 最大正数1.7976931348623157e+308
MIN_VALUE 接近于0的最小正数5e-324
NaN 无法表示数字
NEGATIVE_INFINITY 负无穷
POSITIVE_INFINITY 正无穷,超出MAX_VALUE
constructor 对象的构造函数
prototype 原型

MAX_VALUE

  浮点数的存储单元是64位,也就只说Javascript支持的极限数字有限制

  内置对象Number的属性MAX_VALUE和内置对象Math的属性PI一样都是静态属性,可以直接使用,代表着一个值

MIN_VALUE

  MIN_VALUE和MAX_VALUE同一样是静态属性,非Number实例属性, 按照IEEE754存储标准,浮点数不存在绝对的0,只能说0.0....01小数位至少有几个零时,认为这个数据为0,这是由浮点数在硬件的存储规则决定的,这里不细讲。 MIN_VALUE表示最小的正数,接近于0,但不等于0,当一个数小于MIN_VALUE的时候,Javascript会把它转为0。

NAN

  一般是计算失败时的返回值,比如

Number对象方法

toString(n)

  表示把一个数值转化为n进制的数,返回的结果是该进制下数值的字符串。

toString(n)

  四舍五入保留有效数字,有效数字的参数为参数n,返回结果是字符串