一、基本类型 :
(1)加号运算符
存在加号运算符的时候,其他类型都会转为 String
(2)其他运算符
存在运算符(-,*,/,%)时, 基本类型都转换为 Number
(3)“==”运算符(两个操作数的类型不相同时)
如果一个值是null,另一个值是undefined,则它们相等
如果一个值是数字,另一个值是字符串,先将字符串转换为数字,然后使用转换后的值进行比较
如果其中一个值是true,则将其转换为1再进行比较。如果其中的一个值是false,则将其转换为0再进行比较
如果一个值是对象,另一个值是数字或字符串,则将对象转换为原始值,再进行比较
(4)注意
undefined转化为Number是 为’NaN‘
String类型的带有字符的比如: '1a' ,'a1' 转化为 Number是 为’NaN‘
任何Number与NaN相加都为NaN
NaN 不与 任何值相等 包括自身,所以判断一个值 是否为 NaN, 即用 "!==" 即可
转换为 Boolean类型为 false 的有:null,0,'',undefined,NaN,false
number() 与 parseInt() 都可以将对象转化为Number类型,Number函数要比parseInt函数严格很多。基本上,只要有一个字符无法转成数值,整个字符串就会被转为NaN。
二、object类型
(1)当object与基本类型运算时:
Number类型会先调用valueOf(), String类型会先调用toString(), 如果结果是原始值,则返回原始值,否则继续用toString 或 valueOf(),继续计算,如果结果还不是原始值,则抛出一个类型错误;
为什么 {} + [] = 0 ? 因为 javascript在运行时, 将 第一次{} 认为是空的代码块,所以就相当于 +[] = 0. 还有 {} +5 = 5, 同理
三、练习
console.log(([])?true:fasle);// => console.log((true)?true:false);
console.log([]==false?true:false); // => console.log(0==0?true:false);
console.log(({}==false)?true:false); // => console.log((NaN==0)?true:false);
分析:
Boolean([]); //true
Number([]); //0
Number({}); // NaN
Number(false); //0