to Number

parseInt()

仅针对字符串

转换规则:

1. 忽略字符串前面的空格,直到找到第一个非空格符

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

    parseInt("") => NaN

3. 如果第一个字符是数字字符,继续解析第二个字符,直到解析完所有后续字符或遇到一个非数字字符

    parseInt("9527great") => 9527
    parseInt("11.4") => 11

4. 可以识别出各种整数字符(十进制、八进制、十六进制)

    parseInt("0xA") => 10
    parseInt("070") => 56

    在解析八进制时,ES3 和 ES5 存在分歧,为消除不必要的麻烦,建议传入第二个参数以表示转换时使用的基数(即进制数)

    parseInt("070",  8) => 56   // 当作八进制数来解析
    parseInt("070", 10) => 70   // 当作十进制数来解析

parseFloat()

仅针对字符串

转换规则:

1. 忽略字符串前面的空格,直到找到第一个非空格符

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

    parseFloat("") => NaN

3. 从位置 0 开始解析每个字符,一直解析到字符串末尾,或解析遇到一个无效的浮点数字符为止

    parseFloat("9527.23great") => 9527.23

4. 第一个小数点有效,第二个小数点无效

    parseFloat("22.34.56") => 22.34

5. 始终会忽略前导的 0

    parseFloat("0729.4") => 729.4

6. 只解析十进制整数格式

    无第二个参数指定基数的用法
    十六进制格式的字符串始终会被解析成 0

    parseFloat("0xF") => 0
    parseFloat("3.12e7") => 31200000

Number()

  • boolean

    Number(true)  => 1
    Number(false) => 0
  • number

    只是简单的传入与传出
    
    Number(2) => 2
  • null

    Number(null) => 0
  • undefined

    Number(undefined) => NaN
  • string

    1. 只包含数字,将其转换为十进制
    
        Number("1") => 1
        Number("011") => 11
    
    2. 包含有效的浮点格式,将其转换为对应的浮点数值
    
        Number("1.1") => 1.1
        Number("02.3") => 2.3
    
    3. 包含有效的十六进制格式,将其转换为相同大小的十进制数
    
        Number("0xf") => 15
    
    4. 空字符串,将其转换为 0
    
        Number("") => 0
    
    5. 其它格式字符串,将其转换为 NaN
    
        Number("2.2a") => NaN
  • 对象

    如果是对象,则调用对象的 valueOf() 方法,然后依照前面的规则转换返回的值。
    如果转换的结果是 NaN,则调用对象的 toString() 方法,然后再次依照前面的规则转换返回的字符串值。
    
    Number({}) => NaN    过程:{}.toString() => "[object Object]" => NaN

隐式转换

等价于 Number(x)

  • +x

  • x - 0


to String

toString()

  • number、boolean、object、string 都有 toString() 方法

  • 数值的 toString() 方法可以传递一个参数指定输出数值的基数

  • null 和 undefined 没有 toString() 方法

String()

  • String() 转型函数能够将任何类型的值转换为字符串

  • 转换规则

    1. 如果值有 toString() 方法,则调用该方法并返回相应的结果
    
    2. 如果值是 null,则返回 "null"
    
    3. 如果值是 undefined,则返回 "undefined"

隐式转换

等价于 String(x)

  • x + ""

Number to String

  • toFixed()

  • toExponential()

  • toPrecision()


to Boolean

Boolean()

  • boolean

    Boolean(true)  => true
    Booelan(false) => false
  • string

    Boolean("") => false
    Boolean("非空字符") => true
  • number

    Boolean(0)   => false
    Boolean(NaN) => false
    Boolean(非零数字值) => true
  • object

    Boolean(null) => false
    Boolean(任何对象) => true
  • undefined

    Boolean(undefined) => false

隐式转换

等价于 Boolean(x)

  • !!x

转换为字符串 数字 布尔值 对象
undefined "undefined" NaN false throws TypeError
null "null" 0 false throws TypeError
true "true" 1 new Boolean(true)
false "false" 0 new Boolean(false)
"" 0 false new String("")
"1.2" 1.2 true new String("1.2")
"one" NaN true new String("one")
0 "0" false new Number(0)
-0 "0" false new Number(-0)
NaN "NaN" false Number(NaN)
Infinity "Infinity" true new Number(Infinity)
-Infinity "-Infinity" true new Number(-Infinity)
1 "1" true new Number(1)
{}(任意对象) true
[](任意数组) "" 0 true
[9](1个数字元素) "9" 9 true
["a"](其他数组) 使用 join() 方法 NaN true
function(){}(任意函数) NaN true

参考资料:

《JavaScript 权威指南》 (第6版) [美].David Flanagan著 淘宝前端团队译
《JavaScript 高级程序设计》 (第3版) [美].Nicholas C.Zakas著 李松峰 曹力译

Drivable9979
26 声望1 粉丝