强制类型转换
parseInt、parseFloat、toString 等 (parseInt 和 parseFloat 的第二个参数为要转换成的进制)
隐式类型转换
if、逻辑运算、==、+拼接字符串
这里详细说说 if、逻辑运算、==
if
if 其实判断的是 truly 变量和 falsely 变量,那么问题来了,什么是 truly 变量,什么是 falsely 变量?
假设有一个变量为 a:
若 !!a === true 则表示为 truly 变量
若 !!a === false 则表示为 falsely 变量
falsely 变量有:0 false '[空字符串]' null undefined NaN
其余全部是 truly 变量
逻辑运算
&& 一假全假:
- 左边表达式为 falsely 变量,则立即返回左边的表达式
console.log(null && 0); // null
- 左边表达式为 truly 变量,但右边表达式为 falsely 变量,则返回右边表达式
console.log(1 && NaN); // NaN
- 左边和右边均为 truly 变量,则返回右边表达式
console.log("yes" && 1); // 1
|| 一真全真:
- 左边表达式为 truly 变量,则立即返回左边的表达式
console.log("YesYes" || 1); // YesYes
- 左边表达式为 falsely 变量,但右边表达式为 truly 变量,则返回右边表达式
console.log(NaN || 123); // 123
- 左边和右边均为 falsely 变量,则返回右边表达式
console.log('' || 0); // 0
== 和 ===
使用 == 符号比较的会先进行隐式转化,falsely 变量会转化为 false, truly 变量会转化为 false,然后再进行值比较,而使用 === 符号的会先比较类型,如果类型不同直接返回 false,如果类型相同再继续比较值,值类型直接比较值,引用类型比较内存地址。
那么什么时候使用两等什么时候使用三等呢?答案是:只有与 null 比较时使用 == , 其余情况一律使用 ===,null 使用 == 等价于两种情况【 假设有一个变量叫 xxx 】:
null == xxx ---> null === xxx || undefined === xxx