js 检测变量是否存在

实际开发过程中,会有判断一个变量是否存在的场景
首先想到的是

 if(a==undefined){
        console.log("a is undefined")
    }else{

        console.log("a is defiend")
    }

这里会报错,有可能产生阻塞,而且不够优雅
这里写图片描述

解决方法:

 if(typeof a!=="undefined"){

        console.log("a is undefined")
    }else{

        console.log("a is defiend")
    }
在 JavaScript 中,判断一个变量是否存在”需要根据变量的声明方式和作用域来决定。以下是几种常见情况及对应的判断方法。 --- ### ✅ 1. 判断变量是否已声明并存在(使用 `typeof` 安全检测) ```javascript if (typeof myVariable !== 'undefined') { console.log('变量存在且已定义'); } else { console.log('变量未定义或不存在'); } ``` #### 🔍 解释: - 使用 `typeof` 检查变量类型时,**即使变量未声明也不会报错**。 - 如果变量未声明,`typeof someUndeclaredVar` 返回 `'undefined'`。 - 这是**最安全的方式**,适用于全局变量或可能未声明的变量。 > ✅ 推荐用于判断可能未声明的变量是否存在。 --- ### ✅ 2. 判断变量是否存在且不为 null 或 falsy (更严格) ```javascript if (myVariable != null) { console.log('变量存在且不是 null 或 undefined'); } ``` 等价于: ```javascript if (myVariable !== undefined && myVariable !== null) ``` #### 🔍 说明: - `!= null` 是简写方式,能过滤掉 `null` 和 `undefined`。 - 适合你只想排除 `null/undefined`,但仍允许 `0`, `''`, `false` 等。 --- ### ✅ 3. 在对象中判断属性是否存在 ```javascript const obj = { name: 'Alice' }; // 方法一:in 操作符(包含原型链) if ('name' in obj) { console.log('obj 有 name 属性'); } // 方法二:hasOwnProperty(仅自身属性,不包括原型) if (obj.hasOwnProperty('name')) { console.log('obj 自身有 name 属性'); } ``` --- ### ✅ 4. 使用 try-catch 判断可能抛出错误的变量(极少见) 当访问某个变量会引发 ReferenceError 时(如块级作用域外访问 `let/const`): ```javascript let exists = false; try { someLetVariable; // 可能未初始化 exists = true; } catch (e) { exists = false; } if (exists) { console.log('变量可访问'); } ``` > ⚠️ 注意:`let` 和 `const` 在声明前访问会报错(暂时性死区),所以不能用 `typeof` 安全检查! 示例: ```js console.log(typeof notDeclared); // "undefined" console.log(typeof declaredLet); // 报错!如果在声明前执行 let declaredLet = 123; ``` --- ### ✅ 5. 判断全局变量是否存在(浏览器环境) ```javascript if ('myGlobalVar' in window) { console.log('全局变量 myGlobalVar 存在'); } ``` Node.js 环境中可用: ```javascript if ('myGlobalVar' in global) { ... } ``` --- ### 🧪 示例对比 ```js // 情况测试 console.log(typeof a); // undefined // console.log(a); // ReferenceError if accessed before declaration var a; // 声明提升,typeof 安全 let b; const c = 1; console.log(typeof a); // "undefined" console.log(typeof b); // "undefined" console.log(typeof c); // "number" console.log(typeof d); // "undefined"(d 从未声明) ``` --- ### ✅ 总结:推荐做法 | 场景 | 推荐写法 | |------|----------| | 判断变量是否已定义(安全) | `typeof myVar !== 'undefined'` | | 判断非 null 且非 undefined | `myVar != null` | | 判断对象是否有某属性 | `'prop' in obj` 或 `obj.hasOwnProperty('prop')` | | 判断全局变量 | `'varName' in window`(浏览器) | ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值