列举强制类型转换和隐式类型转换

252 阅读2分钟

强制类型转换

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 变量


逻辑运算

&& 一假全假:

  1. 左边表达式为 falsely 变量,则立即返回左边的表达式
    console.log(null && 0);    // null
  1. 左边表达式为 truly 变量,但右边表达式为 falsely 变量,则返回右边表达式
    console.log(1 && NaN);    // NaN
  1. 左边和右边均为 truly 变量,则返回右边表达式
    console.log("yes" && 1);    // 1

|| 一真全真:

  1. 左边表达式为 truly 变量,则立即返回左边的表达式
    console.log("YesYes" || 1);    // YesYes
  1. 左边表达式为 falsely 变量,但右边表达式为 truly 变量,则返回右边表达式
    console.log(NaN || 123);    // 123
  1. 左边和右边均为 falsely 变量,则返回右边表达式
    console.log('' || 0);    // 0

== 和 ===

使用 == 符号比较的会先进行隐式转化,falsely 变量会转化为 false, truly 变量会转化为 false,然后再进行值比较,而使用 === 符号的会先比较类型,如果类型不同直接返回 false,如果类型相同再继续比较值,值类型直接比较值,引用类型比较内存地址。

那么什么时候使用两等什么时候使用三等呢?答案是:只有与 null 比较时使用 == , 其余情况一律使用 ===,null 使用 == 等价于两种情况【 假设有一个变量叫 xxx 】:

null == xxx ---> null === xxx || undefined === xxx