运算符与相等
各类运算符、== 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 解构配合使用。