zoukankan      html  css  js  c++  java
  • 《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
  • 相关阅读:
    抽象方法真的不能实例化么?
    java中静态属性和和静态方法的继承问题 以及多态的实质
    Java中数据类型转换问题
    Java中反射机制和Class.forName、实例对象.class(属性)、实例对象getClass()的区别
    java的static块执行时机
    代理服务器:正向代理和反向代理
    阿里巴巴的一些面试题(无答案)
    pl/sql实现打印九九乘法表
    java中的标记接口(标签接口)
    spring boot中log4j冲突问题和解决办法
  • 原文地址:https://www.cnblogs.com/kkun/p/2084962.html
Copyright © 2011-2022 走看看