《Javascript高级程序设计》读书笔记 Number对象

1 http://homepage.yesky.com/481/2576981.shtml
2
3 //《Javascript高级程序设计》读书笔记 Number对象
4 /*
5 Javascript语言中的Number对象
6 Number是javascript的原始类型(primitive type),值存储在栈上
7 在C#语言中,能表示数字的类型有很多,如int,float,double,decimal等
8 C#中的这些东东在javascript语言中,就只有Number对象,仅此一家,别无分店
9 业务范围涵盖整数和浮点数,插播段广告
10 */
11 var foo = 10
12 window.alert = function(x){
13 document.writeln(x + "<br />");
14 }
15 /*
16
17
18 整数业务中的进制转换
19
20 无论以何种进制表示的数字其运算结果总是以十进制表示
21 Number公司提供了各种进制的表示法,例如二进制,八进制,十六进制以及十进制和任意进制,
  但是不论神马进制的,一但进行运算后均以十进制表示运算结果,下边的输出都是10进制结果:10
22 知识点,八进制表示时首字符必须是0,十六进制表示时前两位必须是0x
23 无论您以什么货币支付,美刀,英镑啥的,我们都以RMB结算
24 */
25 //定义16进制fee16 = 0xA,output 10
26 var fee16 = 0xA; alert(fee16)
27 //定义八进制fee8 = 012,output 10
28 var fee8 = 012; alert(fee8)
29 //十进制fee = 10,output 10
30 var fee = 10; alert(fee)
31 /*
32 从十进制转换到其它进制
33 使用toString(parameter)基模式就OK,一共两种模式,基模式和默认模式
34 默认模式就是基模式的重载而已,当在Number对象上调用toString()方法时,实际上调用的是toString(10)
35 */
36 fee = 10
37 alert(fee.toString(2))//1010
38 alert(fee.toString(8))//12
39 alert(fee.toString(16))//a
40 alert(fee.toString())//等同于下边一行的代码
41 alert(fee.toString(10))//10

42 alert(fee.toString(3))//101
43 /*
44
45 OK,问题出来了,下边这行代码输出神马?
46 */
47 alert("----------")
48 fee = 010
49 alert(fee.toString())
50 /*
51 前边说了,该公司永远以RMB结算,
52 所以嘞,010首先会转换成十进制变成8,没注意到这是个八进制表示法?
53 请认真体会[定义八进制fee8 = 012,output 10]
54 这里的010会首先进行八进制到十进制的转换,然后调用toString输出结果:8
55 世界上只有010,011,012,013,014,015,016,017,-010,-011,-012,-013,-014,-015,-016,-017
56 共计16个数有这个问题,在八进制中没有9,所以09一定不是八进制,继续输出9
57 而08由于该进位了,没有进位依然不是八进制,输出8,07和07以下是不是八进制无所谓了,转换成十进制还是原值
58 基于同样的原因,到018之后同样不存在这个问题了,只有010到017调用toString时会减2,-010到-017则加2
59
60
61 Number对象的特殊值,如非数,无穷大,无穷小,大于无穷大,小于无穷小等,比较简单,看清单
62 Number.MAX_VALUE,Number类型能存储的值的区间上限
63 Number.MIN_VALUE,Number类型能存储的值的区间下限
64 Number.NEGATIVE_INFINITY,当计算结果小于区间下限值是被赋值为NEGATIVE_INFINITY
65 Number.POSITIVE_INFINITY,当计算结果大于区间上限值时被赋值为POSITIVE_INFINITY
66 window.Infinity表示无穷大
67 Number.NaN,表示"非数字",Not a Number,多发生在转换到类型Number失败时,如转换"blue"为数字时就返回NaN
68 然而NaN不等于NaN,表达式NaN == NaN 结果为false,为什么妮?
69 举个例子,a是NaN吧,b也是NaN吧,那么代入上述公式,a == b吗?非数的情况太多,无法穷举
70 一定要做NaN等于判断是推荐使用isNaN函数进行判断,后边有介绍
71 同样的原因,也不推荐使用wndow.Infinity进行等于运算,推荐的做法是使用方法isFinite验证是否是无穷大数
72 */
73 alert("NaN----------")
74 alert(NaN == NaN)//false
75 alert(null == null)//true
76 alert(undefined == undefined)//true
77 alert(isFinite(Number.MAX_VALUE + 1))//true
78 alert(isFinite(Number.MIN_VALUE - 1))//true
79 /*
80
81
82 Number对象相关的方法
83 toFixed(parameter)方法返回的是具有指定位数小数的数字的字符串表示
84 */
85 alert(foo.toFixed(2))//output 10.00
86 /*
87 toExponential(parameter)方法返回的是用科学计数法表示的数字的字符串形式
88 */
89 alert(foo.toExponential(2))//output 1.00e+1
90 /*
91 toPrecision(parameter)方法根据最有意义的形式来返回数字的预订形式或指数形式.
92 它有一个参数,即用于表示数字的数字总数(不包括指数)
93 */
94 alert(foo.toPrecision(4))//output 10.00
95 /*
96 注意:以上三个方法都会进行舍入操作
97 valueOf方法返回Number的原始值
98 */
99 alert(foo.valueOf())//output 10
100 /*
101 再加上上边提到的isNaN,isFinite,toString方法,不重复介绍了.
102
103
104
105 其它类型转换成Number对象
106 parseInt(string,radix)
107 该方法首先查看位置0处的字符,判断它是否是个有效数字,如果不是则返回NaN,方法结束.
108 如果是,继续查看位置1处字符,进行同样的测试,这一过程将持续到发现非有效数字为止,此时parseInt
109
将把该字符之前的字符串转换成数字返回,例如1234abcd转换成数字后为1234,遇到a后结束
110 同toString方法类似,这个方法的第二个参数表示基,默认为10,
111 即当调用parseInt("1234abcd")时,相当于调用重载方法parseInt("1234abcd",10)
112 */
113 alert("parseInt-------------------------")
114 var goo = "1234abcd";
115 alert(parseInt(goo))//output 1234
116 //等同于
117 alert(parseInt(goo,10))//output 1234
118 //表示输出goo的8进制值
119 alert(parseInt(goo,8))//output 668
120 //表示输出goo的16进制值
121 alert(parseInt(goo,16))//output 305441741
122 /*
123 parseFloat(string)
124 parseFloat与parseInt方法类似,从位置0处开始查看每个字符,直到找到第一个非有效的字符为止,
125 然后把该字符之前的字符串转换成数字,不过,对于这个方法来说,第一个出现的小数点是有效字符,但第二个小数点就是无效字符了,
126 另一处不同是字符串必须以十进制表示,没有基模式,该方法会忽略前导0,八进制的0908将被解析成908,而对于0xA该方法将返回NaN
127 */
128 alert("parseFloat-------------------------")
129 alert(parseFloat(goo))//output 1234
130 /*
131
132 Number的一元运算
133 一元加法对数字没任何影响,但是对字符串却有影响,它将字符串转换成整型
134 一元减法等同于先执行一元加法,再取负,不累述
135 这种转换类似parseInt,
136 需要注意的是,对0x开头的字符串,一元加法将其转换成10进制,而对于0908运算完是908
137 */
138 alert("Number的一元运算--------------")
139 var foo = "1"
140 alert(typeof foo)//output string
141 var foo = +"1";
142 alert(typeof foo)//output number
posted @ 2011-06-20 09:04  kkun  阅读(2360)  评论(5编辑  收藏  举报