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

删除JavaScript对象空值属性时触发Cannot convert undefined或null转对象错误如何解决

问题原因与解决方案

错误触发根源

你的报错和对象原型没有任何关联,是属性访问的语法使用错误导致的:
在JavaScript中,点语法obj.key会将key作为固定的字面量属性名读取,而非你for循环中声明的迭代变量key。你的测试对象中不存在名为key的属性,因此obj.key返回undefined,将undefined传入Object.keys方法就会触发你遇到的类型报错。

修复方案

1. 基础修正(仅修改属性访问语法)

将点语法替换为支持变量的方括号语法obj[key],同时增加前置类型校验,避免属性值为非对象/ null时调用Object.keys报错:

for (const key in obj) {
    // hasOwnProperty用于排除原型链继承的属性,仅处理对象自身挂载的属性
    if (obj.hasOwnProperty(key) && typeof obj[key] === 'object' && obj[key] !== null) {
        if (Object.keys(obj[key]).length === 0) {
            delete obj[key];
        }
    }
}

运行后测试对象中的empty属性会被正常删除。

2. 可选扩展:递归删除嵌套的空对象

如果需要处理嵌套层级里的空对象,可以用递归逻辑实现:

function removeEmptyObjects(obj) {
    for (const key in obj) {
        if (obj.hasOwnProperty(key) && typeof obj[key] === 'object' && obj[key] !== null) {
            // 先递归处理子属性
            removeEmptyObjects(obj[key]);
            // 子属性处理完如果是空对象就删除
            if (Object.keys(obj[key]).length === 0) {
                delete obj[key];
            }
        }
    }
    return obj;
}

// 调用方法
removeEmptyObjects(obj);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 23:06:07