You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中如何验证对象的属性值是否为空或null

问题根因

你之前的写法无法生效有两个明确问题:

  • 拼写错误:数组长度属性是length,你误写为lenght,代码运行时会拿到undefined,判断逻辑从根源失效
  • 逻辑偏差:Object.keys(obj)返回的是对象自身可枚举属性的属性名集合,只要属性本身存在,无论属性值是空字符串、null还是其他内容,返回的数组长度都不会变化。比如示例里的reference1始终持有name、phone两个属性,Object.keys(references.reference1).length永远返回2,根本无法感知属性值的空状态。
正确实现

单对象校验:判断单个子对象所有属性值是否全为空(空字符串/ null)

核心思路是直接取对象的所有属性值做遍历校验,而非判断属性是否存在:

const references = {
  reference1 : {
      "name" : "",
      "phone" : ""
  },
  reference2 : {
      "name" : null,
      "phone" : null
  }  
}

// 校验入参对象的所有属性值是否全为null或空字符串
function isAllPropsEmpty(obj) {
  return Object.values(obj).every(val => val === null || val === "")
}

// 测试用例
console.log(isAllPropsEmpty(references.reference1)) // 输出true
console.log(isAllPropsEmpty(references.reference2)) // 输出true
console.log(isAllPropsEmpty({name: "李四", phone: ""})) // 输出false,存在有效name值

代码说明:Object.values(obj)会直接返回对象所有属性值组成的数组,every方法会逐个校验值是否满足空规则,只有所有值都符合空条件时才会返回true。

批量校验:一次性检查外层所有引用项

如果需要批量校验references下的所有子对象,可以遍历外层对象统一输出校验结果:

function batchCheckReferences(refRoot) {
  const result = {}
  for (const [refKey, refContent] of Object.entries(refRoot)) {
    result[refKey] = isAllPropsEmpty(refContent)
  }
  return result
}

console.log(batchCheckReferences(references))
// 输出:{ reference1: true, reference2: true }

规则扩展

如果业务场景中需要把undefined也识别为空值,只需要调整判断条件即可:

function isAllPropsEmpty(obj) {
  return Object.values(obj).every(val => val === null || val === "" || val === undefined)
}

提示:上述方案适用于你给出的两层平面对象结构,如果待校验对象存在更深层的嵌套,需要额外加递归遍历逻辑处理嵌套属性。

内容的提问来源于stack exchange,提问作者Desarrollador

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 01:25:05