javascript中无空指针异常,但访问null/undefined属性会抛typeerror;应优先预防:用===null或==null明确判空,避免!value误判;善用?.安全访问、??提供默认值;函数参数和解构时结合??与默认值兜底。

JavaScript 中没有真正的“空指针异常”,但访问 null 或 undefined 值的属性或方法会抛出 TypeError(例如 Cannot read property 'x' of null),效果类似空指针。关键不是“捕获异常”,而是**提前预防**——通过明确检查、安全访问和合理默认值来规避问题。
用严格相等检查 null 和 undefined
避免只用 == null(它还会匹配 undefined,但语义模糊),推荐显式区分或统一处理:
-
value === null:精确判断是否为null -
value == null:等价于value === null || value === undefined,适合“空值兜底”场景 - 慎用
!value:会把0、''、false也判为“假值”,不适用于数值或字符串校验
用可选链操作符(?.)安全读取嵌套属性
这是现代 JS 最简洁的防错方式,遇到 null 或 undefined 时自动返回 undefined 而不报错:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
-
user?.profile?.name→ 如果user或profile是null,整个表达式返回undefined,不会报错 -
obj?.method?.()→ 安全调用可能不存在的方法 -
arr?.[0]→ 安全访问数组首项(即使arr是null)
用空值合并操作符(??)提供默认值
?? 只在左侧为 null 或 undefined 时使用右侧值,比 || 更精准(|| 会误把 0、'' 当作“空”):
-
const name = user?.name ?? '匿名用户':仅当user?.name真的是null或undefined才用默认值 -
const count = data?.length ?? 0:安全获取长度,默认为 0(不会因data为空数组而误设)
函数参数和对象解构时设置默认值
从源头减少 null 传播:
- 函数参数:
function greet(name = '访客') { ... },调用时传null不会触发默认值(null是真值),需配合??:function greet(name) { const actualName = name ?? '访客'; ... } - 解构赋值:
const { id = 1, title = '无标题' } = post ?? {},先用空对象兜底再解构,避免解构null报错
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










