js中的隐式类型转换

一、基本类型 :

(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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容