一、概述
三个等号 === 在编程语言中通常被称为“恒等运算符”,和双等号 == 的区别在于不仅比较值是否相等,还比较类型是否一致。
// 使用双等号 == console.log(1 == "1"); // true // 使用三个等号 === console.log(1 === "1"); // false
二、比较操作符
1. 双等号 ==
双等号 == 是一种宽松的比较操作符,它会自动类型转换,比较两个值是否相等。
console.log(1 == "1"); // true console.log(true == 1); // true console.log(null == undefined); // true console.log(0 == false); // true
需要注意的是,当其中一个值为 NaN 时,即使与自身比较也会返回 false。
console.log(NaN == NaN); // false
2. 三个等号 ===
三个等号 === 是一种严格的比较操作符,不会进行类型转换,只有在类型与值都相等时才返回 true。
console.log(1 === "1"); // false console.log(true === 1); // false console.log(null === undefined); // false console.log(0 === false); // false
需要注意的是,与 NaN 比较也会返回 false。
console.log(NaN === NaN); // false
三、应用场景
1. 数据类型比较
在进行变量类型的比较时,应该使用三个等号 ===,可以避免类型转换带来的意外行为。
2. 深度比较
在进行对象比较时,应该使用递归比较对象的每个属性,而不能直接使用双等号 == 比较。
function objCompare(obj1, obj2) { if (typeof obj1 != typeof obj2) { return false; } if (typeof obj1 != 'object' || obj1 == null || obj2 == null) { return obj1 === obj2; } var props1 = Object.getOwnPropertyNames(obj1); var props2 = Object.getOwnPropertyNames(obj2); if (props1.length != props2.length) { return false; } for (var i = 0; i < props1.length; i++) { var propName = props1[i]; if (!objCompare(obj1[propName], obj2[propName])) { return false; } } return true; }
四、总结
三个等号 === 是一种严格的比较操作符,在需要避免类型转换和深度比较等场景中使用。