运行函数时报Uncaught TypeError: Cannot read properties of null (reading 'Link')错误怎么解决?
错误本质
该报错的核心含义是你正在尝试读取一个null值的Link属性,只有当变量值为null时访问其属性才会触发该类类型错误。
常见产生原因
- 变量未完成初始化就被提前访问:最常见的是异步请求还未返回结果时,就直接访问了请求返回对象的
Link属性,请求完成前该对象的默认值为null - DOM元素获取失败:通过
document.querySelector()、getElementById等方法获取带Link属性的DOM节点时,选择器拼写错误、DOM未完成渲染就执行JS代码,都会导致拿到的节点值为null - 状态变量初始化不合理:React、Vue等框架中给状态设置的默认值为
null,还未完成赋值就直接访问了状态的Link属性 - 前置函数返回异常:调用的前置处理函数在异常分支返回了
null,没有做非空校验就直接读取了返回值的Link属性
排查修复方案
- 首先定位报错代码行:打开浏览器控制台的Sources面板,点击报错堆栈对应的行,找到具体是哪个变量在读取
Link属性 - 先加非空校验做兜底:访问属性前先判断变量是否为
null/undefined,两种常用写法:- 现代JS/框架环境可以直接用可选链:
target?.Link,变量为空时会直接返回undefined不会抛出报错 - 传统兼容写法:
if (target !== null && target !== undefined) { // 在这里访问target.Link }
- 现代JS/框架环境可以直接用可选链:
- 针对性修复变量初始化逻辑:
- 如果是异步获取的变量,把属性读取逻辑放到异步回调(Promise的then、async/await的await语句之后)中执行,确保变量赋值完成后再访问
- 如果是DOM元素,把JS代码放到
body标签末尾,或者放到DOMContentLoaded事件回调、框架的onMounted/useEffect等DOM渲染完成的生命周期钩子中执行,同时核对选择器拼写是否正确 - 如果是状态变量,把状态的默认值从
null改为空对象{},从根源避免空指针问题
- 校验前置函数返回值:如果变量是其他函数的返回结果,检查该函数所有分支的返回值,异常分支要么返回符合结构的默认值,要么提前抛出可识别的错误方便处理。
内容的提问来源于stack exchange,提问作者user17373203
相关产品推荐
相关产品推荐

