重学Javascript之类型转换
文章目录
强制类型转换(显示类型转换)
- Number()
- Boolean()
- String()
调用数组、函数、对象和正则表达式的valueOf() 会返回对象本身。日期类定义的valueOf()方法会返回它的一个内部表示:1970年1月1日以来的毫秒数。
自动类型转换
-
加号(+) 运算符
- 作为一元运算符: 常用于将操作数转换为数值
-
作为二元运算符
-
如果其中一个为对象,则会将对象转换为原始类型。日期对象通过调用toString()执行转换,其他的通过valueOf()(如果valueOf()返回一个原始类型的值得话)。由于多数对象不具备可用的valueOf()方法,因此他们会通过toString()来进行转换。
-
对象转换成原始类型的值后,如果其中一个为字符串的话,另一个操作数也要转换成字符串,然后进行字符串的拼接。
-
否则,两个数都转换为数字(或者NaN),然后进行加法操作。
-
有一个很有意思的一个,不能以上面的规则理解:
{} + {} : NaN (其实在Chrome控制台,输出的为:"[object Object][object Object]")
{} + [] : 0
这是因为,浏览器会把第一个{} 作为一个空的代码块解析,因此上面的两个分别就等价于: + {} , + [] 因此,得到上面相应的结果。
-
== 运算符
-
如果一个是null,一个是undefined,则返回true
-
如果一个是数字,一个是字符串,则将字符串转换为数字,然后再进行比较。
-
如果一个值为布尔值,将其转换为数字
-
如果一个数值为对象,另一个为数值或者是字符串,则先将对象通过valueOf()或toString()转换为原始类型,然后再比较。(JS核心的内置类会首先尝试valueOf(),再尝试使用toString().除了日期类,日期类只使用toString()转换。)
-
不满足上面的,均为false
-