访问未声明变量会立即抛出ReferenceError,仅当用try...catch显式包裹时才能捕获;typeof可安全检测未声明变量是否为undefined,严格模式下未声明赋值直接报错。

JavaScript 中访问未定义变量会抛出 ReferenceError,但这类错误无法通过 try...catch 在所有场景下捕获——关键看变量是否在作用域中“存在”以及访问方式。
直接访问未声明变量会立即报错,无法用 try...catch 捕获
如果变量根本没声明(如 console.log(undeclaredVar)),JS 引擎在执行前就报 ReferenceError,此时代码会中断,try...catch 无效(除非该语句本身就在 try 块内)。
- ✅ 正确写法(可捕获):
try { console.log(undeclaredVar); } catch (e) { console.error(e); } - ❌ 错误理解:
认为只要变量“不存在”,任何地方访问都会被自动捕获——实际必须显式包裹在try中才能拦截。
用 typeof 安全检测变量是否存在(推荐用于预防)
对可能未声明的变量,优先用 typeof 判断,它不会抛错:
分析 Java Spring Boot 后端 Controller 代码,自动生成 Markdown 格式的接口文档。当用户说“生成 Java 接口文档”、“生成 API 文档”、“从 Spring 代码生成文档”时触发。
if (typeof myVar !== 'undefined') { /* 安全使用 myVar */ }-
typeof undeclaredVar === 'undefined'返回true,不报错 - 注意:
typeof null是'object',但这里只关心未声明变量,不影响判断
全局变量可通过 window(浏览器)或 globalThis(通用)间接访问
在浏览器中,顶层声明的变量是 window 的属性。未声明变量访问 window.xxx 会返回 undefined 而非报错:
console.log(window.maybeDefined); // undefined,不报错- 更可靠写法:
if ('maybeDefined' in window) { ... } - 跨环境统一方案:
if (typeof globalThis.maybeDefined !== 'undefined') { ... }
严格模式下禁止隐式创建全局变量,有助于提前暴露问题
启用 "use strict" 后,给未声明变量赋值(如 foo = 123)会直接报 ReferenceError,避免意外挂载到全局:
- 在文件顶部加
"use strict",或函数内启用 - 配合 ESLint 规则(如
no-undef)可在开发阶段提示未定义变量 - 构建工具(如 Webpack、Vite)通常默认启用严格模式
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










