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
相关产品推荐
相关产品推荐

