# 写代码时,为什么总有人提醒你用 `===` 而不是 `==`?
最近学JavaScript的朋友问我:“我看别人写代码总用 `===`,但我之前学的 `==` 不也能比较相等吗?一定要换吗?” 这个问题特别常见,今天咱们就用最直白的方式聊清楚——**严格相等运算符 `===` 到底有什么特别之处**,以及为什么它更值得被推荐。
---
#### 先想个生活问题:你买的奶茶到底是不是一杯?
假设你现在渴了,去奶茶店点单。店员问你:“要喝奶茶吗?” 你说:“对,我要一杯奶茶。” 这时候你们达成共识——你确实想要奶茶。
但如果店员问的是:“你要喝‘奶茶’吗?” 而你回答:“我要一杯‘奶茶’(带引号的)。” 这时候可能就有问题了——你说的“奶茶”是不是指真正的奶茶?还是说你在开玩笑,或者指的是“奶茶”这两个字?
JavaScript里的 `==` 和 `===` 就像这两种对话场景:
- `==` 相当于“你说的奶茶是奶茶吗?”——它会自动帮你“猜”对方的意思,甚至允许“差不多就行”。
- `===` 相当于“你说的奶茶是真正的奶茶(而不是文字游戏)吗?”——它要求“必须完全一致”,连“类型”都不能错。
---
#### 回到代码:`0` 和 `"0"` 到底相等吗?
我们直接看例子:
```javascript
console.log(0 == "0"); // 输出 true
console.log(0 === "0"); // 输出 false
```
是不是有点困惑?明明一个是数字0,一个是字符串"0"(文字形式的0),为什么 `==` 会说它们相等,而 `===` 不同意?
**关键在“类型”**。JavaScript里每个数据都有自己的“身份标签”(类型):
- 数字(比如 `0`、`123`)的类型是 `number`;
- 文字(比如 `"0"`、`"你好"`)的类型是 `string`;
- 真假值(`true`、`false`)的类型是 `boolean`……
`==` 比较的时候,会先“忽略”类型差异,只看“值是否像”。比如数字0和字符串"0",它们的“值”都是0,所以 `==` 认为它们相等。
但 `===` 更严格:它要求“值相等 **并且** 类型也必须相同”。数字0的类型是 `number`,字符串"0"的类型是 `string`,类型不一样,所以 `===` 直接说“不相等”。
---
#### 为什么程序员更爱用 `===`?
你可能会想:“那 `==` 不是更方便吗?何必这么较真?” 但实际写代码时,`==` 的“灵活”反而容易坑人。
举个真实的例子:
假设你要做一个“判断用户是否输入了0”的功能。用户输入的内容通常是通过网页表单获取的,而表单返回的数据**一定是字符串类型**(比如用户输入“0”,拿到的是 `"0"`)。
如果你用 `==` 比较:
```javascript
const userInput = "0"; // 用户输入了0,得到的是字符串
if (userInput == 0) {
console.log("你输入了0");
}
```
这时候代码会正常输出,看起来没问题。
但如果用户输入的是 `0`(比如通过某些特殊输入框),或者程序里其他地方生成了一个数字0,这时候 `userInput` 可能变成数字0。这时候用 `==` 依然没问题,但如果是另一种情况呢?
比如用户输入了 `"00"`(两个0),这时候 `userInput == 0` 会怎么样?
```javascript
const userInput = "00";
console.log(userInput == 0); // 输出 true!
```
因为 `"00"` 转换成数字也是0,所以 `==` 会认为它们相等。但这可能根本不是你想要的——用户明明输入了两个0,程序却误以为他输入了0。
而用 `===` 的话,这种情况就会被直接排除:
```javascript
const userInput = "00";
console.log(userInput === 0); // 输出 false(类型不同,直接不比较值)
```
**简单说:`===` 能帮你避免很多“我以为相等,但其实类型不同”的意外错误**。尤其是在处理用户输入、接口返回数据这些“不可控来源”时,严格的类型检查能让代码更可靠。
---
#### 总结:什么时候用 `===`?
记住一个原则:**99%的情况下,都应该用 `===`**。
除非你非常清楚自己在做什么(比如确定两个值的类型一定相同),否则别轻易用 `==`。
下次写代码时,遇到比较是否相等的场景,不妨多敲几个字符,用 `===` 替代 `==`——这会帮你少踩很多坑。
---
这样应该能帮小白理解 `===` 的作用和优势了吧?如果还有疑问,欢迎留言讨论~
写代码时,为什么总有人提醒你用 `===` 而不是 `==`?
1 分钟阅读
50 字
如果文章对您有帮助,欢迎支持作者继续创作