0 == "\n" 为 true ? JS 等于判断中的那些坑

1,323 阅读2分钟

Javascript == 判断中的坑和总结记录。

我参与了掘金人气创作者榜单评比,欢迎点击这里为我投票哈~

等号判断举例

  • 常见的判断
"1" == 1;     // true
"1" === 1;    // false    
  • 来点稍微有难度的
"0" == ""     // false
"0" == false  // true
"" == 0       // true
  • 地狱级难度
[] == ![]            // true
2 == [2];            // true
"" == [null];        // true
"" == [];            // true

宽松相等和严格相等

在Javascript中判断两个变量是否相等可以用等号和全等号判断,全等相较于等号判断方式更为严格

常见的理解是: == 检查值是否相等,=== 检查值和类型是否相等

但这不够准确,== 和 === 都会检查操作数的类型。区别在于操作数类型不同时它们的处理方式不同。

准确的理解为:== 允许在相等比较中进行强制类型转换,而 === 不允许

批量练习

"0" == null;
"0" == undefined;
"0" == false;
"0" == NaN;
"0" == 0;
"0" == "";
false == null;
false == undefined;
false == NaN;
false == 0;
false == "";
false == [];
false == {};
"" == null;
"" == undefined;
"" == NaN;
NaN == NaN 
"" == 0;
"" == [];
"" == {};
0 == null;
0 == undefined;
0 == NaN;
0 == [];
0 == {};
0 == "\n";
0 == " ";
+0 == -0

[] == ![] 
2 == [2];
"" == [null];

结果(先尝试自己做再看结果)

"0" == null;         // false
"0" == undefined;    // false
"0" == false;        // true -- 晕! 
"0" == NaN;          // false
"0" == 0;            // true
"0" == "";           // false
false == null;       // false
false == undefined;  // false
false == NaN;        // false
false == 0;          // true -- 晕! 
false == "";         // true -- 晕! 
false == [];         // true -- 晕!
false == {};         // false
"" == null;          // false
"" == undefined;     // false
"" == NaN;           // false
NaN == NaN           // false
"" == 0;             // true -- 晕! 
"" == [];            // true -- 晕! 
"" == {};            // false
0 == null;           // false
0 == undefined;      // false
0 == NaN;            // false
0 == [];             // true -- 晕! 
0 == {};             // false
0 == "\n";           // true
0 == " ";            // true
+0 == -0             // true

[] == ![]            // true
2 == [2];            // true
"" == [null];        // true

总结

如果非要对 == 两边的值进行对比,以下两个原则可以有效地避免出错。

  • 如果两边的值中有 true 或者 false,千万不要使用 ==。
  • 如果两边的值中有 []、"" 或者 0,尽量不要使用 ==。

总之 == 最好能不用就不用,还是多打一个字符用 === 吧。

参考