美文网首页Web 前端开发 让前端飞
JS类型显式转换与隐式转换

JS类型显式转换与隐式转换

作者: aermin | 来源:发表于2020-02-18 16:11 被阅读0次

    tips:欢迎关注我在github的博客点击查看

    显示类型转换

    尽管JavaScript可以自动做许多类型转换, 但有时仍需要做显式转换, 或者为了使代码变 得清晰易读而做显式转换。

    做显式类型转换最简单的方法就是使用Boolean()、Number()、String()或Object()函 数。

    Number( "3“ )  // 3
    String(false)  // "false" 或使用false.toString()
    Object(3) // Number(3)
    Boolean([])  // true
    Boolean('')  //  false
    

    这边拿Boolean([]) 和Boolean('') 来说好了,有的同学可能会有困惑

    来看看ECMA所述

    image.png
    image.png

    Boolean()用的是ToBoolean方法;
    参数为String中,string长度为0,也就是空字符串””时,Boolean显式转换为false,非空字符串为true;
    而参数只要是Object类型,都被Boolean显示转换成true,而众所周知,[]数组属于Object类型的一种。

    小测一下:Boolean(new Boolean(false))这结果显示为啥?

    答案是true,因为new Boolean(false)是对象而不是原始值

    原始值也有人称为基本类型,但从翻译的角度来看Primitive Values应该译为原始值,而引用类型应该叫对象引用更好些,其英文是Object References

    隐式转换

    JavaScript中的某些运算符会做隐式的类型转换

    x+"" // 等价于 String(x)  如88 + '6' => ’886’
    +x // 等价于 Number(x).也可以写成x-0  如+'886' => number类型的886
    !!x // 等价于Boolean(x) 如 !!'886' => true
    

    后话

    最后是不是觉得JS类型转换很令人头疼,深入研究会发现更头疼,比如 [] == ![] 为啥为true 所以开发中要用=== 代替 ==,少一些莫名其妙的隐式类型转换,能用上TS就更好了,让强大的类型推导为难你解忧。

    Reference

    《JavaScript权威指南》
    ECMA

    相关文章

      网友评论

        本文标题:JS类型显式转换与隐式转换

        本文链接:https://www.haomeiwen.com/subject/qwygfhtx.html