前端判断不等于 undefined 不等于 null 的方法
在前端开发(JavaScript/TypeScript)中,判断一个变量既不等于 undefined 也不等于 null,通常被称为判断"空值"或"有效存在"。
以下是几种常用且推荐的方法,你可以根据场景选择:
1. 最常用:宽松相等法(推荐)
这是最简洁、最符合语言习惯的写法。利用 == null 的特性,它能同时匹配 null 和 undefined。
javascript
if (value != null) {
// 代码逻辑
// 进入这里说明 value 既不是 null,也不是 undefined
// value 可以是 0, false, '', [] 等任何其他值
}
- 原理: 在 JavaScript 中,
null == undefined返回true。因此value != null等价于value !== null && value !== undefined。 - 优点: 代码极简,性能好,是社区公认的"最佳实践"之一。
2. 严格判断:逻辑或(Explicit OR)
如果你追求代码的绝对清晰,或者团队规范禁止使用 ==,可以使用严格全等 === 配合逻辑非。
javascript
if (value !== null && value !== undefined) {
// 代码逻辑
}
- 优点: 语义非常明确,没有任何隐式转换,逻辑清晰。
- 缺点: 相对冗长。
3. 现代语法:空值合并运算符(Nullish Coalescing)
如果你是在进行赋值 或条件判断(例如设置默认值),这是 ES2020 提供的最新语法。
javascript
// 场景A:获取一个肯定有值的变量
const result = value ?? '默认值';
// 场景B:在 if 中使用(判断是否存在)
if ((value ?? false) !== false) {
// 或者更直接地结合布尔值判断
}
- 优点: 专门用于处理
null和undefined,不会把0、false、''误判为"空"。 - 注意:
??运算符在非常旧的浏览器(如 IE)中不支持,需要 Babel 转译。
4. 特殊情况:变量可能未声明
注意: 如果 value 这个变量可能根本就没有被 var/let/const 声明过(直接访问会报错),那么直接使用 value != null 会抛出 ReferenceError。
此时必须使用 typeof:
javascript
if (typeof value !== 'undefined' && value !== null) {
// 安全地处理可能未声明的变量
}
- 注意: 这种情况在现代模块化开发中很少见,通常变量都会先声明。
💡 避坑指南:不要只用 !value
请千万不要 使用下面这种写法,除非你同时也想过滤掉 0、false 和空字符串 '':
javascript
// 错误写法(过度过滤)
if (!value) {
// 这里会把 0, false, '' 也当成空值处理,通常不是我们想要的
}
总结建议
| 场景 | 推荐写法 |
|---|---|
| 日常开发、函数参数校验 | value != null (简洁高效) |
| 严格模式、代码审查严格 | value !== null && value !== undefined |
| 设置默认值 | const val = value ?? 'default' |