如何比较值_JavaScript中==和===的区别是什么

11次阅读

=== 要求值和类型都一致,== 会强制类型转换;常见陷阱如 0 == false、”” == false、[] == false 均为 true;唯一可接受的 == 用法是 value == NULL 检查 null 或 undefined

如何比较值_JavaScript中==和===的区别是什么

== 会强制类型转换,=== 不会

javaScript 中 == 是抽象相等(又叫“宽松相等”),会在比较前尝试把两边转成同一类型;=== 是严格相等,要求值和类型都一致。这是最核心的区别,也是绝大多数意外行为的根源。

比如 null == undefined 返回 true,但 null === undefinedfalse;又如 "0" == 0true,而 "0" === 0false

常见隐式转换陷阱有哪些

这些不是冷知识,而是日常踩坑高频点:

  • 0 == falsetruefalse 被转成 0
  • "" == falsetrue(空字符串转成 0,再与 false 比)
  • [] == falsetrue(空数组先 .toString()"",再走上面那条)
  • [0] == falsetrue[0].toString()"0",再转成数字 0
  • {} == truefalse,但 {} == falsefalse对象转原始值逻辑更复杂,容易误判)

什么时候能放心用 ==

几乎不能。唯一被广泛接受的例外是检查 nullundefined

立即学习Java免费学习笔记(深入)”;

if (value == null) {   // 等价于 value === null || value === undefined }

这是 ecmascript 规范明确鼓励的简写。除此之外,所有其他 == 使用都建议替换成 ===,尤其在条件判断、数组过滤、对象键匹配等场景。

typescript 和 ESLint 怎么帮你避坑

即使你写的是 javascript,用 eslint-plugin-eslint-recommendedeslint:recommended 配置,默认就启用了 eqeqeq 规则,会警告所有 ==!= 的使用。

TypeScript 编译器本身不检查这个,但配合 strict 模式 + ESLint,基本能杜绝这类问题。注意:类型断言(如 value as string)不会影响运行时比较逻辑,该错还是错。

真正难缠的不是记不住规则,而是某些库返回值类型模糊(比如 localStorage.getItem() 返回 string | null),这时候漏掉 === null 判断,又用 == "" 去测,结果 null == ""false,但逻辑上你想捕获的是“没值”,反而绕过去了。

text=ZqhQzanResources