JavaScript:逻辑操作符“==”与“===”的区别
Summary
JavaScript中,逻辑操作符“===”会先检查操作数的数据类型,对不同的数据类型会返回false. 而“==”对不同类型的操作数进行比较时,会进行类型转换后再比较。
Description
在JavaScript中进行判断的两种逻辑操作符:
- == (相等)
- === (严格相等/全等)
由于JavaScript是弱类型的脚本语言(weakly typed),用于作比较的两个操作数的类型允许不一致。而这两个逻辑操作符最大的区别在于对操作数类型的容忍度。
即:如果两个操作数的数据类型不一致
- “==” 会尝试对操作数的数据类型进行转换后再进行比较。
- “===”会直接返回false。
console.log(typeof null, typeof undefined); //object undefined console.log(null == undefined, null === undefined); //true false
可见,由于null与undefined的类型不同,两种比较的结果也不同。
再举例:
if(foo){ doSomething; } //foo为false的情况: //false //0 //'' (空字符串) //null //undefined //NaN
//且除了NaN外,任意组合使用"=="作比较的结果都是true,使用"==="作比较的结果都是false,如if('' == 0)为true.
//NaN与其他任何值都不相等,即当且仅当a=NaN时,a != a为true.
对于“==”和“===”比较更详细的规则,可以参考我的印象笔记。
参考资料:《JavaScript权威指南》