JavaScript 中的 =、== 和 === 的区别

230 阅读2分钟

carbon.png

本文涉及的内容很简单,适合初学者阅读。原文 >>

很多刚接触 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 后再进行比较。

由于存在类型转换,== 可能会产生意想不到的结果。一般建议避免使用 ==。但有一种使用场景可以接受使用 ==,那就是用来判断值是否为 nullundefined,因为 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 = 1a 是 1
==进行类型转换的相等比较1 == '1'true
===严格相等,不进行类型转换1 === '1'false

一般来说:

  • 使用 = 进行赋值
  • 避免使用 ==,因为它会进行类型转换;用 === 进行比较

=== 运算符在大多数编程语言中并不常见,但由于使用 == 存在风险,JavaScript 引入了 === 作为解决方案!