JS数据类型的转换

字符串 (String)

数字转字符串:toString

布尔转字符串:toString

null转字符串:会报错

undefined转字符串:会报错

object转字符串:可以,但是得到的不是原内容

    var a=1
    a.toString()      //'1'
    
    var b=true
    b.toString()      //'true'
    
    var c=null
    c.toString        //(报错)cannot read property 'toString' of null at<anong mous>:1:3
    
    var d=undefined
    d.toString        //(报错)
    
    var e={name:'wudi'};
    e.toString()      //"[object Object]"
复制代码

老司机的写法是把内容后面跟(+ ‘’)就能转成字符串了。

    1 + ''            // "1"
    true + ''         // "true"
    null + ''         // "null"
    undefined + ''    //"undefined"
    
    var a = {}
    a + ''            //[object Object]
复制代码

还有个window.String() ,这个跟(+ ‘’)是一样的效果。


布尔(boolean)

布尔只要记住5个falsy值就行了

它的转换规则相对简单:除了以下五个值的转换结果为false,其他的值全部为true。

    Boolean(o)          //false(-0或者+0都是一样的)
    Boolean(NaN)        //false
    Boolean('')         //false(空字符串)
    Boolean(undefined)  //false
    Boolean(null)       //false
复制代码

注意,所有对象(包括空对象)的转换结果都是true,甚至连false对应的布尔对象new Boolean(false)也是true

    Boolean([])                     //true
    Boolean({})                    //true
    Boolean(new Boolean(false))    //true
复制代码

只要记住,所有的对象的布尔值都是true就行了

老司机的写法是内容前面加上2个感叹号就行了

    !! o        //false
    !! 1        //true
复制代码

数字(Number)

转换成数字有三种比较常见的方法:

  • Number()

  • parseInt()

  • parseFloat()

      Number(123)         //123
      //数值转数值还是数值
      
      Number('132')       //123
      //字符串如果可以被解析成数字,那就转成相应的数值
      
      Number('123abc')     //NaN
      //字符串不能全部解析,那就只能NaN
      
      Number('')           //0
      //空字符串转成零
      
      Number(true)          //1
      Number(false)         //0
      //布尔值中true转成1,false转成0
      
      Number(undefined)    //NaN
      // undefined:转成 NaN
      
      Number(null)         //0
      // null:转成0
    复制代码

Number函数将字符串转为数值,要比parseInt函数严格很多。基本上,只要有一个字符无法转成数值,整个字符串就会被转为NaN。

但是parseInt就没有这么严格了

    parseInt("123abc")    //123
    Number("123abc")      //NaN
    parseInt("0123")      //123
    parseInt("011",8)     //9 (字符串后面的8是八进制的意思,默认十进制)
复制代码

上面代码中,parseInt逐个解析字符,而Number函数整体转换字符串的类型。

另外,parseInt和Number函数都会自动过滤一个字符串前导和后缀的空格。

    parseInt('\t\v\r12.34\n')    // 12
    Number('\t\v\r12.34\n')      // 12.34
复制代码

当Number方法的参数是对象时,将返回NaN,除非是包含单个数值的数组。

    Number({a: 1})         // NaN
    Number([1, 2, 3])      // NaN
    Number([5])            // 5
复制代码

老司机一般用减零法或者是取正法来完成这个操作

需要的内容减零(- 0)

需要的内容取正 (+ )

    '1' - 0      //1  (这个比较常用)
    + '1'        //1  (这个容易混淆,不常用)
复制代码

自动转换

下面介绍自动转换,它是以强制转换为基础的。

遇到以下三种情况时,JavaScript 会自动转换数据类型,即转换是自动完成的,用户不可见。

第一种情况,不同类型的数据互相运算。

    123 + 'abc'      // "123abc"
复制代码

第二种情况,对非布尔值类型的数据求布尔值。

    if ('abc') {
    console.log('hello')
    }                       // "hello"
复制代码

第三种情况,对非数值类型的值使用一元运算符(即+和-)。

    + {foo: 'bar'}       // NaN
    - [1, 2, 3]          // NaN
复制代码

自动转换的规则是这样的:预期什么类型的值,就调用该类型的转换函数。比如,某个位置预期为字符串,就调用String函数进行转换。如果该位置即可以是字符串,也可能是数值,那么默认转为数值。

由于自动转换具有不确定性,而且不易除错,建议在预期为布尔值、数值、字符串的地方,全部使用Boolean、Number和String函数进行显式转换。

转载于:https://juejin.im/post/5bf0fc5d518825512506ea36

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值