《JavaScript高级程序设计》学习总结三(2)

引言:新的一天,坚持学习,总结。昨天的文章今天再看一次,发现更新的知识点着实有些少了,今天要多写一才行。那么这一篇博文继续对数据概念、基础等知识点进行总结。

 

Number类型:

  Number 类型应该是JavaScript中最受关注的类型了。这种类型采用 IEEE754 格式来表示整数和浮点数值(双精浮点数值),为支持各种数值类型,ECMA-262定义了不同的数值字面量格式。比如:

十进制: var intNum=65;(整型)    

       var octalNum=070 (八进制的56),八进制的第一位数值必须是0 ,然后八进制数字序列(0~7),八进制字面量在严格模式下是无效的,会导致支持的JavaScript引擎抛出错误。

    var hexNum=0xA (十六进制的10),十六进制字面值前两位必须是0x ,后跟任何十六进制数字,(0~9 及A~F),其中A~F 可以大写也可以小写。

    在计算时,所有八进制与十六进制表示的数值最终都被转换成十进制。

 

浮点数值:

  所谓浮点数,就是指数值中必须包含一个小数点,并且小数点后面必须至少有一个数字。

  由于保存浮点数值需要的内存空间是保存整数值 的两倍,因此ECMAScript 会不失时机的将浮点数转换成整数,那么很显然,如果小数点后面没有任何数字,那么这个数就可以作为整型来保存。

  例如:var floatNum=1.0; 这个就会被解析成1 。

  对于那些极大或者极小的数值,可以采用e 表示法(科学计数法),用e 表示法表示数值 等于e 前面的数值乘以10 的指数次幂,比如:var floatNum=3.14e2 那么这个数就是314 。

  浮点数的最高精度为17位小数,但是进行算数计算时其精度远远不如整数,例如 ,0.1+0.2的结果不是0.3  而是0.30000000000000004 (别数了一共15个0)。这个小小的舍入误差会导致无法测试特定的浮点数值。当然如果是0.15+0.15 或者0.05+0.25那么都没问题。因此都不要测试特定的浮点数值。

 

数值范围:

  由于内存限制,ECMAScript 并不能保存世界上的所有值,最小值一般保存在:Number.MIN_VALUE 中,最大值保存在Number.MAX_VALUE 中。而超出的范围则转化成特殊的 Infinity 值,如果是负值那么就是 -infinity (负无穷),正值则是 Infinity(正无穷)。如果某次计算返回 Infinity的话(无论正负),那么这个数值是不能进行下次计算的。所以为了避免这种情况,我们可以用 isFinite()函数来判断这个函数是否在最大与最小值期间。如果是,那么返回true 。关于最大与最小值的具体值,大多数浏览器中最小值可以到:5e-324  而最大可以是:1.7976931348623157e+308。

 

NaN  (not  a number):

  这个数值作用是:表示一个本来要返回数值的操作数未返回数值的情况。(通俗点就是这个返回这个数不是数字)。在其他的编程语言中任何数除以0 可能会导致报错,但是JavaScript不会,它会返回一个NaN 。

  NaN有两个特点:1、任何涉及NaN的操作(例如:NaN/5)都会返回NaN。2、NaN不与任何数相等,即使这个数是NaN也一样(NaN==NaN 会报错)。

针对NaN的这两个特点,ECMAScript 定义了isNaN()函数,这个函数接收一个参数,其参数可以是任何类型,而这个函数可以帮我们判断这个数值“不是数值”,isNaN()接收到参数后会帮我们将其转化成数值,不能转化成数值的数则返回 true。比如:

  alert( isNaN(NaN )) //true

  alert( isNaN(10)) //false   10是一个数值

  alert( isNaN("10" )) //false 可以被转换成数值

  alert( isNaN("blue")) //true 不能转化成数值

  alert( isNaN("true" )) //false 可以被转换成数值 1 

这个函数比较不可思议的是可以适用于对象,当参数是一个对象时,会首先调用 valueOf ()方法,然后确定该返回值是否能转化成数值,如果不能则调用 toString()方法进行测试。(具体详情接下来会解答,请耐心往下看)。

 

数值转换:

 有三个函数可以把进行数值转换:Number(),parseInt(),parseFloat()。第一个函数适用于任何类型,另外两个函数则专门用于把字符串换成数值。这三个函数对相同的参数有不同的输出,那么接下来让我们分别对其进行详细的了解:

Number()转换规则:

  1、如果是boolean。true 和false 会被转换成 1 和0 。

  2、如果是数字(废话,如果是数字那当然没变啦)。

  3、如果是NULL ,返回 0.

  4、如果是undefined 则返回NaN .

  5、如果是字符串,那么遵循下列规则:(1)字符串只包含数字,那么久转换成对应的数字。比如“111” 转成111,“012”转成12(前面的0会被忽略)。

                     (2)如果字符串包含有效的浮点,则转成对应的浮点 比如 “1.1” 转成1.1 。

                     (3)如果字符串包含有效的十六进制,例如“0xf” 那么会转成对应的十进制数。

                     (4)如果字符串为“ ”空,那么转换为0.

                     (5)如果字符串包含上述所说的格式之外的字符,则转换为NaN,如果是对象,则调用对象的valueOf()方法,然后依照上面的规则进行再次的检测判断,如果转换的结果是NaN,那么调用 toString()方法进行再次的检测。(不得不说“对象”的待遇就是不一般)。

实例:Number("hello")// NaN

   Number(" ")// 0

   Number(" 00064")// 64

   Number(true)// 1

 

parseInt(): 

 这个方法的特点:1、会忽略字符串前面的空格,直到找到第一个字符。

        2、如果第一个字符不是数字字符或者负号,则返回NaN.

        3、这个方法碰到数字字符串后会一直解析下去,直到碰到非数字字符。

        4、该方法能识别进制,如以0x 开头则会当做十六进制。0开头则是八进制(但是这里存在分歧,ECMAScript 3认为是八进制,而ECMAScript 认为是十进制0 )。

实例:

  paeseInt(“123abc”)// 123

  paeseInt(“  ”)// NaN

  paeseInt(“0xA”)// 10

  paeseInt(22.5)/ /22

  paeseInt(“070”)// 56

  paeseInt(“70”)// 70

  paeseInt(“0xf”)// 15 

         

正如上面所说。因为 070在不同版本中解析死不一样的,这样的话会造成不好的效果。于是,平时我们在使用这个方法时可以用两个参数。第二个参数指定进制。例如 parseInt( "070", 8 )。这样就能更精准的获取到想要的效果。(十进制可忽略第二个参数)。

 

parseFloat():

这个方法就不做赘述,因为和parseInt 差不多但是还是有情况不同,比如:parseFloat 会始终忽略前导的零,十六进制格式的字符会被转化成0,此方法只解析十进制,所以不提供第二个参数,直接上实例:

parseFloat("1234blue")//1234

parseFloat("0xA")//0 十六进制被解析成0

parseFloat("22.5")//22.5

 parseFloat("22.34.5")//22.34 

 parseFloat("0908.5")//908.5

parseFloat("3.125e7")//31250000.。

 

转载于:https://www.cnblogs.com/wxhhts/p/9400509.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值