知识卡片
相等必须严格
内容
==/!= 类型不一致时强制转换,规则复杂违反直觉:''=='0' 为 false 但 0=='' 为 true、0=='0' 为 true,还破坏相等传递性(false=='false'为false,false=='0'为true);===/!== 只在类型值都一致才返回 true。发散:相等判断是业务分支地基,隐式转换把错误藏进普通比较代码,评审很难发现。
参考来源
- 位置:《JavaScript语言精粹(修订版)》附录B《糟粕 Bad Parts》"=="一节
- 结论依据:原文列出一系列 `==` 违反直觉的例子(如 `0 == ''` 为 true、`false == '0'` 为 true),并指出"==运算符对传递性的缺乏值得我们警惕",最终建议"永远不要使用那对邪恶的孪生兄弟。相反,请始终使用===和!==",据此推出相等判断应始终使用严格相等运算符的结论。
- 原始内容:而它们邪恶的孪生兄弟只有在两个运算数类型一致时才会做出正确的判断,如果两个运算数是不同的类型,它们试图去强制转换值的类型。转换的规则复杂且难以记忆……我的建议是永远不要使用那对邪恶的孪生兄弟。相反,请始终使用===和!==。