• 《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.。

  • 相关阅读:
    zip加密-字符串加密成字符串
    语言学习第一天
    localStorage和sessionStorage数据存储
    ValueOf()和toString()
    call()与apply()区别typeof和instanceof的区别
    javaScript判断手机型号
    HTML&CSS
    Doctype 严格模式与混杂模式-如何触发这两种模式,区分它们有何意义?
    获得地址栏内的参数
    私有变量
  • 原文地址:https://www.cnblogs.com/wxhhts/p/9400509.html
Copyright © 2020-2023  润新知