JavaScript中的与数值相关的全局方法。

皮卡丘洗脑

先来洗脑一下吧



全局方法概括

1. parseInt ( )

2. parseFloat ( )

3. isNaN ( )

4. isFinate ( )

具体内容

1. parseInt ( )

(1) 基本用法

parseInt方法用于将字符串转为整数。

    parseInt('123') // 123

如果字符串头部有空格,空格会被自动去除。

    parseInt('   81') // 81

如果parseInt的参数不是字符串,则会先转为字符串再转换。

    parseInt(1.23) // 1
    // 等同于
    parseInt('1.23') // 1    

(2)进制转换

parseInt方法还可以接受第二个参数(2到36之间),表示被解析的值的进制,返回该值对应的十进制

数。默认情况下,parseInt的第二个参数为10,即默认是十进制转十进制。

    parseInt('1000') // 1000
    // 等同于
    parseInt('1000', 10) // 1000

下面是转换指定进制的数的例子。

    parseInt('1000', 2) // 8
    parseInt('1000', 6) // 216
    parseInt('1000', 8) // 512
    上面代码中,二进制、六进制、八进制的1000,分别等于十进制的8216512。
    这意味着,可以用parseInt方法进行进制的转换。

如果第二个参数不是数值,会被自动转为一个整数。这个整数只有在2到36之间,才能得到有意义的结果,超出这个范围,则返回NaN。如果第二个参数是0、undefined和null,则直接忽略。

    parseInt('10', 37) // NaN
    parseInt('10', 1) // NaN
    parseInt('10', 0) // 10
    parseInt('10', null) // 10
    parseInt('10', undefined) // 10

前面说过,如果parseInt的第一个参数不是字符串,会被先转为字符串。这会导致一些令人意外的结果。

    parseInt(0x11, 36) // 43
    parseInt(0x11, 2) // 1

    // 等同于
    parseInt(String(0x11), 36)
    parseInt(String(0x11), 2)

    // 等同于
    parseInt('17', 36)
    parseInt('17', 2)
上面代码中,十六进制的0x11会被先转为十进制的17,再转为字符串。然后,再用36进制或二进制解读字符
串17,最后返回结果43和1。

这种处理方式,对于八进制的前缀0,尤其需要注意。

2. parseFloat ( )

parseFloat方法用于将一个字符串转为浮点数。

    parseFloat('3.14') // 3.14

如果字符串符合科学计数法,则会进行相应的转换。

    parseFloat('314e-2') // 3.14
    parseFloat('0.0314E+2') // 3.14

如果字符串包含不能转为浮点数的字符,则不再进行往后转换,返回已经转好的部分。

    parseFloat('3.14more non-digit characters') // 3.14

    parseFloat方法会自动过滤字符串前导的空格。

    parseFloat('\t\v\r12.34\n ') // 12.34

如果参数不是字符串,或者字符串的第一个字符不能转化为浮点数,则返回NaN。

    parseFloat([]) // NaN
    parseFloat('FF2') // NaN
    parseFloat('') // NaN

上面代码中,尤其值得注意,parseFloat会将空字符串转为NaN。

这些特点使得parseFloat的转换结果不同于Number函数。

    parseFloat(true)  // NaN
    Number(true) // 1

    parseFloat(null) // NaN
    Number(null) // 0

    parseFloat('') // NaN
    Number('') // 0

    parseFloat('123.45#') // 123.45
    Number('123.45#') // NaN

3. isNaN ( )

isNaN方法可以用来判断一个值是否为NaN。

    isNaN(NaN) // true
    isNaN(123) // false

但是,isNaN只对数值有效,如果传入其他值,会被先转成数值。比如,传入字符串
的时候,字符串会被先转成NaN,所以最后返回true,这一点要特别引起注意。也就是说,
isNaN为true的值,有可能不是NaN,而是一个字符串。

    isNaN('Hello') // true
    // 相当于
    isNaN(Number('Hello')) // true

出于同样的原因,对于对象和数组,isNaN也返回true。

    isNaN({}) // true
    // 等同于
    isNaN(Number({})) // true

    isNaN(['xzy']) // true
    // 等同于
    isNaN(Number(['xzy'])) // true

但是,对于空数组和只有一个数值成员的数组,isNaN返回false。

    isNaN([]) // false
    isNaN([123]) // false
    isNaN(['123']) // false

上面代码之所以返回false,原因是这些数组能被Number函数转成数值,请参见《数据类型转换》一章。

因此,使用isNaN之前,最好判断一下数据类型。

    function myIsNaN(value) {
      return typeof value === 'number' && isNaN(value);
    }

判断NaN更可靠的方法是,利用NaN为唯一不等于自身的值的这个特点,进行判断。

    function myIsNaN(value) {
      return value !== value;
    }

4. isFinate ( )

isFinite方法返回一个布尔值,表示某个值是否为正常的数值。

    isFinite(Infinity) // false
    isFinite(-Infinity) // false
    isFinite(NaN) // false
    isFinite(-1) // true

除了Infinity、-Infinity和NaN这三个值会返回false,isFinite对于其他的数值都会返回true。


Previous
算法三级项目(管道铺设系统) 算法三级项目(管道铺设系统)
项目开发大致流程1. 摘要 2. 项目要求 3. 总体设计 4. 结果演示 5. 项目配置 6. 项目源代码 1. 摘要 本次课程的三级项目是要求设计实现一个管线铺
2018-07-22
Next
Node.js中的MD5加密 Node.js中的MD5加密
音乐先来一首陈势安的 《 天后 》来缓解一下疲惫的心情吧 MD5简介 1.定义 MD5即Message-Digest Algorithm 5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用
2018-03-22
目录