《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 + "
"); 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
Tags: 

延伸阅读

最新评论

发表评论