JS 判断空值:不把 0 当空的几种写法

JS 里的”空值”判断经常被 !value 搞坏——它会把 0falseNaN 都当成空,实际业务里这三个通常是有效值。

不推荐:!value

if (!value) { /* 错误率很高 */ }

会把这些都当”空”:

  • nullundefined ✓(确实空)
  • '' ✓(确实空)
  • 0 ✗(数字零是有效值)
  • false ✗(布尔假是有效值)
  • NaN ✗(通常需要单独处理)

推荐:精确判断

if (value == null || value === '') {
    // 空值:null、undefined、空字符串
}

value == null 利用了宽松相等,同时捕获 nullundefined,不会误伤 0false

封装成工具函数:

function isEmpty(value) {
    return value == null || value === '';
}

isEmpty(null)        // true
isEmpty(undefined)   // true
isEmpty('')          // true

isEmpty(0)           // false
isEmpty(false)       // false
isEmpty([])          // false(空数组不是空)
isEmpty({})          // false(空对象不是空)

加上空白字符串处理

如果 " " 也要算空:

function isEmpty(value) {
    return value == null ||
           (typeof value === 'string' && value.trim() === '');
}

isEmpty('   ')  // true
isEmpty(' x ')  // false

??= 做默认值赋值

ES2021 的空值合并赋值更精确:

let count = 0;
count ||= 10;  // count = 10,因为 0 是 falsy(错误)
count ??= 10;  // count = 0,因为 0 不是 null/undefined(正确)

只想在 null / undefined 时设默认值,用 ??= 而不是 ||=

几种场景对应的写法

场景推荐写法
只判断 null/undefinedvalue == null
null/undefined/空字符串value == null || value === ''
加上空白字符串value == null || String(value).trim() === ''
设默认值(0 是有效值)value ??= defaultVal
设默认值(0 也算空)value ||= defaultVal

表单校验里的典型误用

// ❌ 数量字段输入 0,会被误判为"未填写"
if (!form.quantity) {
    showError('数量不能为空');
}

// ✓ 正确写法
if (form.quantity == null || form.quantity === '') {
    showError('数量不能为空');
}

记住:!value 是”falsy 检查”,不是”空值检查”。两者在大多数场景下不等价。