JS类型显式转换与隐式转换
2020-02-18 本文已影响0人
aermin
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.pngimage.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