跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
JavaScript大前端

JavaScript 中的赋值与相等操作符:=、== 和 === 详解

JavaScript 赋值操作符 = 用于变量赋值;相等操作符 == 为宽松相等,会进行隐式类型转换;严格相等操作符 === 则比较类型和值且不做转换。开发中推荐始终使用 === 以避免类型转换带来的意外行为,仅在特定场景下考虑其他比较方式。涵盖三者区别、开发建议及常见面试题解析。

NodeJser发布于 2026/2/24更新于 2026/10/24108 浏览
JavaScript 中的赋值与相等操作符:=、== 和 === 详解

前言

在 JavaScript 中,=、== 和 === 是三种不同的操作符,用途和含义完全不同。面试过程中常涉及这些基础知识点,需明确其用法与区别。

1. = (赋值操作符)

  • 用途:用于给变量赋值
  • 示例:
let x = 10; // 将值 10 赋给变量 x
const name = "Alice"; // 将字符串 "Alice" 赋给常量 name

2. == (相等操作符,宽松相等)

  • 用途:比较两个值是否相等,会进行类型转换
  • 特点:比较前会尝试将两边的值转换为相同类型
  • 示例:
5 == "5" // true (字符串 "5" 转换为数字 5)
0 == false // true (false 转换为数字 0)
null == undefined // true
"" == 0 // true

图片

3. === (严格相等操作符)

  • 用途:比较两个值是否严格相等,不进行类型转换
  • 特点:类型和值都必须完全相同
  • 示例:
5 === "5" // false (类型不同:数字 vs 字符串)
0 === false // false (类型不同:数字 vs 布尔值)
 ===  
 ===  
 ===  
null
undefined
// false (类型不同)
""
0
// false (类型不同)
5
5
// true (类型和值都相同)

图片

关键区别总结

操作符名称是否类型转换推荐使用场景
=赋值-给变量赋值
==宽松相等✅ 会转换一般不推荐使用
===严格相等❌ 不转换推荐使用

实际开发建议

  1. 推荐总是使用 === 和 !==
    • 避免因类型转换导致的意外行为
    • 代码更清晰,意图更明确
  2. 避免使用 == 的情况
// 可能产生意外结果
"0" == false // true
[] == false // true
"\t" == 0 // true
  1. 特殊情况
NaN === NaN // false (特殊情况,使用 isNaN() 判断)
+0 === -0 // true
Object.is() // ES6 更精确的比较方法

最佳实践:在 JavaScript 中,除非有特殊原因,否则总是使用 === 进行相等比较,这可以减少错误并使代码意图更明确。

面试题

基础概念题

1. 三者的基本区别

题目:请简述 =、== 和 === 在 JavaScript 中的主要区别。

2. 类型转换题

题目:以下代码输出什么?为什么?

console.log(0 == false);
console.log(0 === false);
console.log("" == false);
console.log("" === false);

代码输出题

3. 比较运算
let a = 5;
let b = "5";
let c = 5;
console.log(a == b); // ?
console.log(a === b); // ?
console.log(a === c); // ?
console.log(null == undefined); // ?
console.log(null === undefined); // ?
4. 对象比较
const obj1 = {name: "John"};
const obj2 = {name: "John"};
const obj3 = obj1;
console.log(obj1 == obj2); // ?
console.log(obj1 === obj2); // ?
console.log(obj1 === obj3); // ?
5. 数组比较
console.log([] == false); // ?
console.log([] === false); // ?
console.log([1, 2] == "1,2"); // ?
console.log([1, 2] === "1,2"); // ?
6. 特殊值比较
console.log(NaN == NaN); // ?
console.log(NaN === NaN); // ?
console.log(0 == -0); // ?
console.log(0 === -0); // ?
console.log(Number("abc") == NaN); // ?

编程题

7. 实现一个严格相等函数

题目:不使用 ===,实现一个 strictEqual(a, b) 函数,要求:

  • 返回布尔值
  • 行为与 === 一致
  • 处理特殊情况(NaN、+0/-0 等)
8. 类型转换陷阱

题目:找出以下代码中的问题并修复:

function validateAge(age) {
  if (age == 18) {
    return "刚刚成年";
  } else if (age > 18) {
    return "已成年";
  } else {
    return "未成年";
  }
}
console.log(validateAge("18")); // 期望输出:"刚刚成年"
console.log(validateAge(18)); // 期望输出:"刚刚成年"
console.log(validateAge("17")); // 期望输出:"未成年"
9. 深层比较

题目:实现一个 deepEqual(obj1, obj2) 函数,要求:

  • 能进行深层对象比较
  • 使用严格相等原则
  • 考虑循环引用的情况

场景分析题

10. 实际应用场景

题目:在以下场景中,应该使用 == 还是 ===?为什么?

  1. 从 URL 参数中获取数字并进行比较
  2. 检查一个值是否为 null 或 undefined
  3. 比较用户输入的表单数据
11. 代码审查

题目:以下代码有什么潜在问题?如何改进?

function processInput(input) {
  if (input == null) {
    return "输入为空";
  }
  if (input.id == undefined) {
    return "缺少 ID";
  }
  if (input.value == 0) {
    return "值为 0";
  }
  return "处理成功";
}

高级题

12. 抽象相等算法

题目:解释 == 操作符的类型转换规则(抽象相等比较算法)的主要步骤。

13. Object.is() 比较

题目:

console.log(Object.is(NaN, NaN)); // ?
console.log(Object.is(0, -0)); // ?
console.log(Object.is([], [])); // ?
// 与 === 的区别是什么?
14. 隐式类型转换

题目:分析以下表达式的执行过程:

"5" + 3 == 53; // ?
"5" - 3 == 2; // ?
true + false == 1; // ?
[] + {} == "[object Object]"; // ?

目录

  1. 前言
  2. 1. = (赋值操作符)
  3. 2. == (相等操作符,宽松相等)
  4. 3. === (严格相等操作符)
  5. 关键区别总结
  6. 实际开发建议
  7. 面试题
  8. 基础概念题
  9. 1. 三者的基本区别
  10. 2. 类型转换题
  11. 代码输出题
  12. 3. 比较运算
  13. 4. 对象比较
  14. 5. 数组比较
  15. 6. 特殊值比较
  16. 编程题
  17. 7. 实现一个严格相等函数
  18. 8. 类型转换陷阱
  19. 9. 深层比较
  20. 场景分析题
  21. 10. 实际应用场景
  22. 11. 代码审查
  23. 高级题
  24. 12. 抽象相等算法
  25. 13. Object.is() 比较
  26. 14. 隐式类型转换

更多推荐文章

查看全部
  • Zotero论文阅读标记颜色框架
  • 10 款主流 AI 降重工具对比与选型建议
  • 高鋒集團合夥人黃俊瑯:以資本與生態賦能傳統企業 Web3 轉型
  • IDA Pro 详细使用教程与逆向分析基础
  • Spatial Joy 2025 全球 AR&AI 开发大赛参赛指南与赛道解析
  • 算法实战:利用前缀和求解和为 K 的子数组
  • 2026 AI视频生成提示词模板50例:文生视频、图生视频一次搞定
  • Python 爬虫抓取医学研究数据:从论文到临床信息
  • Qwen3.5-35B-AWQ-4bit 多模态应用:AR 维修图解与铭牌录入
  • SVPWM 过调制算法原理及 Matlab 仿真
  • 评估微调后大模型实际业务效果的性能指标有哪些
  • Mac Mini 部署 OpenClaw 本地 AI 智能体配置指南
  • Spring Boot 整合 DL4J 构建智能写作助手
  • SQL 查询:组合两个表
  • 服务器文件备份策略与自动化实施指南
  • OpenClaw:从程序员玩具到开源 AI 代理的演变
  • Flutter 三方库 groq_sdk 的鸿蒙化适配指南
  • 数据结构:单向链表的基本操作
  • OpenCode 开源 AI 编程助手完全使用指南
  • Linux 网络基础:局域网通信与跨网段传输详解

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online