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

如何修改库中压缩的if语句以避免d为null时的报错?

修复CKEditor Widget代码中的Null引用错误

我来帮你搞定这个问题!这段压缩后的代码里,问题根源很明确:d = b.getFirst(g.isParserWidgetElement)有时候会返回null,但后面直接访问d.attributes时没做任何检查,所以才会抛出TypeError。

先把原代码展开格式化,方便理解

原压缩代码展开后大概是这样:

if (c = a.instances[c["data-cke-widget-id"]]) {
    d = b.getFirst(g.isParserWidgetElement);
    f.push({ 
        wrapper: b, 
        element: d, 
        widget: c, 
        editables: {} 
    });
    // 这里d可能为null,直接访问d.attributes会触发错误
    if ("1" != d.attributes["data-cke-widget-keep-attr"]) {
        delete d.attributes["data-widget"];
    }
}

修复方案:添加d的非空检查

你只需要在访问d.attributes之前,先确认d不是null或者undefined就行。这里有两种可靠的写法:

方案1:传统短路检查(兼容所有环境)

if (c = a.instances[c["data-cke-widget-id"]]) {
    d = b.getFirst(g.isParserWidgetElement);
    f.push({ 
        wrapper: b, 
        element: d, 
        widget: c, 
        editables: {} 
    });
    // 先检查d是否存在,再处理属性
    if (d && "1" != d.attributes["data-cke-widget-keep-attr"]) {
        delete d.attributes["data-widget"];
    }
}

这里用d && ...的短路逻辑,只有当d不为null/undefined时,才会执行后面的属性判断和删除操作,从根源避免了null引用错误。

方案2:可选链语法(ES2020+环境适用)

如果你的项目运行环境支持ES2020及以上的语法,可以用更简洁的可选链操作符:

if (c = a.instances[c["data-cke-widget-id"]]) {
    d = b.getFirst(g.isParserWidgetElement);
    f.push({ 
        wrapper: b, 
        element: d, 
        widget: c, 
        editables: {} 
    });
    // 可选链自动处理null/undefined的情况
    if ("1" != d?.attributes?.["data-cke-widget-keep-attr"]) {
        delete d?.attributes?.["data-widget"];
    }
}

d?.attributes会在d为null时直接返回undefined,不会抛出错误,代码看起来更清爽。

为什么之前添加检查没成功?

大概率是你把检查的位置放错了——比如可能在f.push之前就判断了d,但其实f.push里是允许element: d为null的,真正需要检查的是访问d.attributes的那一行。现在把检查放在属性操作的前面,就能完美解决问题啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:12:19