JavaScript判断变量是否为null或undefined的方法及对比详解

 更新时间:2025年06月03日 09:37:44   作者:CAD老兵  
在JavaScript中,判断一个变量是否为null或undefined是日常开发中非常常见的需求,虽然这两个值都表示“无值”或“空”,但它们有本质区别,而判断的方式也有多种,适用于不同场景,本文将系统总结和比较这些写法,帮助你选择合适的方式编写更健壮的代码

一、undefined 与 null 的区别

类型含义使用场景
undefined变量声明了但未赋值"未定义"系统默认赋值
null显式赋值为 null"空值"表示有意的“无值”

二、各种判断方式

1. 使用宽松相等(==)

if (value == null) {
  // 相当于 value === null || value === undefined
}

优点:

  • 简洁、直观。
  • 同时判断 null 和 undefined

注意:

  • 宽松相等有时会被认为不严谨,容易被误用。
  • 不适用于 0false"" 这类也“falsy”的值。

2. 使用严格比较(===)

if (value === null || value === undefined) {
  // 更明确的判断
}

优点:

  • 精确控制判断条件。
  • 更显式、语义更清晰。

缺点:

  • 比 == null 稍显冗长。

3. 使用 typeof(判断是否为 undefined)

if (typeof value === 'undefined') {
  // 判断未定义
}

优点:

  • 安全地判断未声明变量。
  • 可用于全局变量或未声明变量的判断。

不判断 null,仅用于检测 undefined

4. 使用可选链与空值合并(ES2020+)

let result = value ?? 'default';
// value 为 null 或 undefined 时使用 'default'

优点:

  • 适用于赋默认值。
  • 写法简洁,安全高效。

不适用于 0false'' 等“有效的 falsy 值”。

5. 使用 == null 配合逻辑非(常见于布尔上下文)

if (!(value != null)) {
  // 等价于 value == null
}

虽然不推荐,但在某些场景中可能看到这样的写法。建议保持代码可读性,优先使用清晰写法。

三、实际应用建议

场景推荐写法
判断变量为 nullundefinedif (value == null)
判断变量是否 不为if (value != null)
安全读取属性obj?.prop
给变量赋默认值value ?? defaultValue
精确判断具体类型if (value === null)typeof value === 'undefined'

四、陷阱与误用

使用 if (!value) 的局限性:

if (!value) {
  // 会错误判断 0, "", false 为“空”
}

不推荐用于判断是否为 nullundefined,除非明确希望将 false0"" 也视为“无效值”。

五、总结

写法判断 null判断 undefined简洁性可读性推荐度
value == null★★★★☆★★★★☆⭐⭐⭐⭐
`value === nullvalue === undefined`★★★☆☆★★★★★⭐⭐⭐⭐
typeof value === 'undefined'★★★☆☆★★★☆☆⭐⭐⭐
value ?? defaultValue★★★★★★★★★☆⭐⭐⭐⭐
if (!value)★★★★★★★☆☆☆⭐⭐(谨慎使用)

六、附加建议

  • 对公共函数或 API 入参,建议使用显式判断,避免类型模糊带来的副作用。
  • 编写工具函数提高可读性,例如:
function isNil(val) {
  return val == null;
}

这样在阅读代码时更具语义性:

if (isNil(user)) {
  // user 为 null 或 undefined
}

结语

判断变量是否为 nullundefined 是基础但关键的技巧。理解每种写法的语义与适用场景,能写出更健壮、更易维护的代码。在日常开发中,推荐统一使用 value == nullvalue ?? 等更现代、更语义化的写法,提升代码一致性和可读性。

以上就是JavaScript判断变量是否为null或undefined的方法及对比详解的详细内容,更多关于JavaScript判断变量null或undefined的资料请关注脚本之家其它相关文章!

相关文章

  • JavaScrip简单数据类型隐式转换的实现

    JavaScrip简单数据类型隐式转换的实现

    本文主要介绍了JavaScrip简单数据类型隐式转换的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • js+HTML5 canvas 实现简单的加载条(进度条)功能示例

    js+HTML5 canvas 实现简单的加载条(进度条)功能示例

    这篇文章主要介绍了js+HTML5 canvas 实现简单的加载条(进度条)功能,涉及javascript使用时间函数与canvas绘图结合实现进度条的相关操作技巧,需要的朋友可以参考下
    2019-07-07
  • JavaScript中的闭包

    JavaScript中的闭包

    闭包,官方对闭包的解释是:一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分
    2016-02-02
  • 原生js实现可爱糖果数字时间特效

    原生js实现可爱糖果数字时间特效

    本文主要介绍了原生js实现可爱糖果数字时间特效的实例代码,附效果展示和代码演示。具有一定的参考价值,下面跟着小编一起来看下吧
    2016-12-12
  • JS 添加千分位与去掉千分位的示例

    JS 添加千分位与去掉千分位的示例

    本文为大家详细介绍下使用JS添加千分位以及去掉千分位的实现代码,感兴趣的朋友可以参考下哈,希望对大家有所帮助
    2013-07-07
  • bootstrap响应式表格实例详解

    bootstrap响应式表格实例详解

    这篇文章主要为大家详细介绍了bootstrap响应式表格的实例代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • JS 文件传参及处理技巧分析

    JS 文件传参及处理技巧分析

    其实为js文件传参是很久就接触过的一个问题,只是一直没有放在心上,今天在无忧看到又有人问这个问题,今日总结一下。
    2010-05-05
  • 微信小程序连续签到7天积分获得功能的示例代码

    微信小程序连续签到7天积分获得功能的示例代码

    今天通过一个案例给大家分享微信小程序连续签到7天积分获得功能,通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考价值,感兴趣的朋友一起学习吧
    2020-08-08
  • [JSF]使用DataModel处理表行事件的实例代码

    [JSF]使用DataModel处理表行事件的实例代码

    在使用JSF中,最常用的恐怕就要属于表格的处理了。使用DataModel可以方便地进行对表行的处理:
    2013-08-08
  • webpack之devtool详解

    webpack之devtool详解

    这篇文章主要介绍了webpack之devtool详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02

最新评论