JavaScript 中的 ==
和 ===
是两个不同的相等比较运算符:
- **
==
松散相等比较:**将两个值转换为相同类型,然后比较它们的值。 - **
===
严格相等比较:**比较两个值是否完全相等,包括类型和值。
区别
==
松散相等比较会将两个值转换为相同类型,然后比较它们的值。这意味着以下情况会被认为相等:
- 数字和字符串(例如:
1 == "1"
) - 布尔值和数字(例如:
true == 1
) - 对象和 null(例如:
{} == null
)
===
严格相等比较不会转换值,而是直接比较两个值是否完全相等,包括类型和值。这意味着以下情况不会被认为相等:
- 数字和字符串(例如:
1 === "1"
) - 布尔值和数字(例如:
true === 1
) - 对象和 null(例如:
{} === null
)
何时使用
一般来说,建议使用严格相等比较运算符 ===
,因为它更准确且不易出错。松散相等比较运算符 ==
可能会导致意外的结果,尤其是在比较不同类型的值时。
示例
console.log(1 == "1"); // true (松散相等)
console.log(1 === "1"); // false (严格相等)
console.log(true == 1); // true (松散相等)
console.log(true === 1); // false (严格相等)
console.log({} == null); // true (松散相等)
console.log({} === null); // false (严格相等)