Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
aermin opened this issue Feb 17, 2020 · 0 comments
Open

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

aermin opened this issue Feb 17, 2020 · 0 comments
Labels

Comments

@aermin
Copy link
Owner

aermin commented Feb 17, 2020

显示类型转换

尽管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
image

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant