javascript中一律用===避免类型转换陷阱;==会引发0==false为true等反直觉结果;&&/||返回操作数本身,??仅对null/undefined生效,?.链式取值防报错。

直接聚焦高频、易错、现代项目里真正用得上的部分,别从“运算符分类表”开始背。重点不是记全所有符号,而是搞懂 为什么这么设计、在哪种场景下必须用对、写错会悄悄出什么问题。
严格相等(===)和类型转换陷阱
== 会自动做类型转换,结果常反直觉:
-
0 == false→ true(但0 === false→ false) -
"1" == true→ true(字符串转数字再转布尔) -
null == undefined→ true(但null === undefined→ false)
建议:所有比较一律用 ===;仅在明确需要宽松匹配时(如表单输入校验),才考虑 ==,并加注释说明。
逻辑运算符不只是 true/false 判断
&& 和 || 返回的是操作数本身,不是固定布尔值:
-
user && user.name→ 如果 user 是 null/undefined,直接返回它;否则返回 user.name -
config.theme || 'dark'→ 若 theme 为 falsy 值(如 ''、0、null),就用默认值 - 注意:
0 || 'default'返回 'default',但0 ?? 'default'返回 0(因为 ?? 只认 null/undefined)
空值合并(??)和可选链(?.)替代手写判空
以前要这样写:
const city = user && user.address && user.address.city;
现在一行搞定:
const city = user?.address?.city ?? 'Unknown';-
??只在左侧为null或undefined时生效,不会误吞0、false、'' -
?.遇到null/undefined就停,不报错,返回undefined
三元运算符别嵌套,但可链式组合
嵌套三元(a ? b : c ? d : e)可读性差,容易漏括号。更推荐:
- 单层判断:简洁清晰,适合 JSX 中内联渲染
- 多条件用 if-else 或 switch,或拆成独立函数
- 链式三元只用于简单状态映射,比如:
status === 'loading' ? '⏳' : status === 'success' ? '✅' : '❌'











