JavaScript 类型转换

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"NaNfalsethrows TypeError
null"null"0falsethrows TypeError
true"true"1new Boolean(true)
false"false"0new Boolean(false)
""0falsenew String("")
"1.2"1.2truenew String("1.2")
"one"NaNtruenew String("one")
0"0"falsenew Number(0)
-0"0"falsenew Number(-0)
NaN"NaN"falseNumber(NaN)
Infinity"Infinity"truenew Number(Infinity)
-Infinity"-Infinity"truenew Number(-Infinity)
1"1"truenew Number(1)
{}(任意对象)true
[](任意数组)""0true
[9](1个数字元素)"9"9true
["a"](其他数组)使用 join() 方法NaNtrue
function(){}(任意函数)NaNtrue

参考资料:

《JavaScript 权威指南》 (第6版) [美].David Flanagan著 淘宝前端团队译
《JavaScript 高级程序设计》 (第3版) [美].Nicholas C.Zakas著 李松峰 曹力译
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值