本文涉及的内容很简单,适合初学者阅读。原文 >>
很多刚接触 JavaScript 的朋友常常会问一个问题:“在 JavaScript 中,=、== 和 === 有什么区别?”
运算符 =
= 运算符用于变量赋值。它将右侧的值赋给左侧的变量:
let a = 1;
const b = 1;
var c = 1;
在 JavaScript 中,= 也用于赋值表达式,赋值表达式不仅执行赋值操作,还会返回被赋的值。
let a = 1;
a = 3; // a: 3
let b = (a = 2); // b: 2, a: 2
这种特性在某些情况下非常有用,例如在条件或循环中赋值新值:
let i = 0;
while (++i < 10) console.log(i);
运算符 ==
== 运算符用于非严格相等比较。它在比较之前会尝试将两个值转换为相同类型,这个过程称为 类型转换 (type coercion):
function isEqual(a, b) {
return a == b;
}
isEqual(1, 2); // false
isEqual(1, 1); // true
isEqual(1, '1'); // true
isEqual(null, undefined); // true
例如,1 == '1' 结果为 true,因为 JavaScript 会将 '1' 转换成数字 1 后再进行比较。
由于存在类型转换,== 可能会产生意想不到的结果。一般建议避免使用 ==。但有一种使用场景可以接受使用 ==,那就是用来判断值是否为 null 或 undefined,因为 null == undefined 会返回 true:
function isEqualToNullOrUndefiend(value) {
return value == null;
}
isEqualToNullOrUndefiend(null); // true
isEqualToNullOrUndefiend(undefined); // true
isEqualToNullOrUndefiend(false); // false
isEqualToNullOrUndefiend(0); // false
isEqualToNullOrUndefiend(NaN); // false
运算符 ===
=== 运算符是严格相等运算符。它会在比较时不进行任何类型转换。只有值和类型都相同,比较才会返回 true:
function isEqualStrict(a, b) {
return a === b;
}
isEqualStrict(1, '1'); // false
isEqual(null, undefined); // false
总结
| 运算符 | 描述 | 示例 | 结果 |
|---|---|---|---|
| = | 赋值 | a = 1 | a 是 1 |
| == | 进行类型转换的相等比较 | 1 == '1' | true |
| === | 严格相等,不进行类型转换 | 1 === '1' | false |
一般来说:
- 使用
=进行赋值 - 避免使用
==,因为它会进行类型转换;用===进行比较
=== 运算符在大多数编程语言中并不常见,但由于使用 == 存在风险,JavaScript 引入了 === 作为解决方案!