JavaScript的相等运算符有什么区别?
JavaScript提供了两个用于比较的相等运算符:
- 双等号(
==
),也称为宽松相等运算符 - 三等号(
===
),也称为严格相等运算符
两者之间的关键区别在于,三等号(===
)运算符比较类型和值,而双等号(==
)运算符使用类型转换,使得两个操作数具有相同的类型,然后仅比较结果值。
以下是一些示例,以消除任何困惑:
const num = 0;
const str = '0';
const obj = new String(0);
const bool = false;
const undef = undefined;
const nil = null;
console.dir([
num == str, // 0 == 0, true
num == bool, // 0 == 0, true
str == obj, // '0' == '0', true
obj == num, // 0 == 0, true
bool == str, // 0 == 0, true
bool == obj, // 0 == 0, true
bool == nil, // false
undef == nil, // true
undef == bool, // false
]);
console.dir([
num === str, // 类型不匹配,false
num === bool, // 类型不匹配,false
str === obj, // 类型不匹配,false
obj === num, // 类型不匹配,false
bool === str, // 类型不匹配,false
bool === obj, // 类型不匹配,false
bool === nil, // 类型不匹配,false
undef === nil, // 类型不匹配,false
undef === bool, // 类型不匹配,false
]);
从上面的示例中可以看出,使用三等号(===
)运算符比使用双等号(==
)运算符更可预测和直观。因此,我们建议在大多数情况下使用三等号(===
)运算符,除非您完全确定要对比较的操作数应用类型转换。