CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
JavaScript 进阶/课时/运算符与相等
RawBlame
课时目录12 节

JavaScript 进阶

  1. 01JS 进阶地图
  2. 02变量与提升
  3. 03运算符与相等
  4. 04控制流深入
  5. 05函数与 this
  6. 06异步深入
  7. 07对象与原型
  8. 08集合与 JSON
  9. 09模块系统
  10. 10内存与 GC
  11. 11调试与异常
  12. 12综合练习

运算符与相等

各类运算符、== vs ===、类型转换与 coercion。

35 分钟

运算符与相等

javascript-core 讲过基本运算;本课聚焦 类型转换(coercion) 与 == vs ===,这是 bug 与面试的高频区。API 层与 nodejs-essentials 校验输入时,应默认用严格相等。

学习目标

  • 掌握 ==、===、Object.is 的差异
  • 理解隐式转换规则(ToPrimitive、ToNumber、ToString)
  • 在业务代码中建立「默认 ===」的习惯

严格相等 ===

0 === false;        // false(类型不同)
'' === false;       // false
null === undefined; // false
NaN === NaN;        // false

无转换,类型与值都相同才 true。

宽松相等 ==

0 == false;         // true
'' == false;        // true
null == undefined;  // true(仅此一对特殊)
'1' == 1;           // true

规则复杂,生产代码避免使用 ==,除非明确要匹配 null | undefined:

function isNil(v) {
  return v == null; // 仅 null 或 undefined
}

Object.is

Object.is(NaN, NaN);           // true
Object.is(+0, -0);             // false(=== 为 true)
Object.is({}, {});             // false

Object.is 用于需要区分 +0/-0 或正确判断 NaN 的场景。

隐式转换链

对象参与运算时先 ToPrimitive(valueOf → toString):

const obj = {
  valueOf() { return 42; },
};
obj + 1; // 43

[] + []; // ''(两个空数组转字符串再拼接)
[] + {}; // '[object Object]'

逻辑运算符的短路

const name = user.nickname || user.name || '访客';
const count = config.count ?? 10; // 仅 null/undefined 时用默认值

0 || 100;  // 100(0 为 falsy)
0 ?? 100;  // 0(0 不是 nullish)

React 渲染 {count && <Badge />} 时,count === 0 会渲染 0 而非 nothing——进阶写法:count > 0 && <Badge />。

可选链与空值合并

const city = user?.address?.city ?? '未知';

与 react-essentials 中可选 props 解构配合使用。

练习

  • 预测 [1,2] + [3,4]、true + true 的结果并验证
  • 用 === 重写一段含 == 的校验函数
  • 说明 ?? 与 || 在 0、'' 上的区别

小结

默认 ===;理解 coercion 防坑;?? 处理 nullish。 下一课控制流深入。

加载本节练习…
← 上一课变量与提升下一课 →控制流深入