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

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类型显式转换与隐式转换)