JS隐式转换与操作符"==",真的完全掌握了吗

303 阅读1分钟

1. [] 与 ![]

[] == false  //=> true
![] == false //=> true
[] == ![]    //=> true
[] == []     //=> false
if( [] )
    console.log("true");// => log: "true"
  • 可以为真也可以为假的[]

2. "" 与 " "

"" == false  //=> true
" " == false //=> true
"" == " "    //=> false
if("")
    console.log("true")
else console.log("false")  //log: "false"

if(" ") 
    console.log("true")//log: "true"
  • 可以为真也可以为假的" "
  • ""恒为false

3. "0" 与 0

0 == false //=> true
"0" == false //=> true
"0" == 0   //=> true
if("0") 
    console.log("true")//log: "true"
  • 可以为真也可以为假的"0"
  • 0恒为false

4. 混合

[] == 0 //=> true
[] == "0" //=> false
[] == " " //=> false
[] == "" //=> true
0 == "" //=> true
0 == " " //=> true

结论: 存在以下几种特殊情况

    1. [] == "" == 0 == false
    1. "0" == 0 == false
    1. " " == 0 ==false

除此以外,[]" ""0"都不会被视为false

这也许也是我们要尽量避免使用==的原因之一。

(ps: 主要原因应该是可恶的:"1" == 1

(ps2: 还能用的地方应该是null == undefined)