设置对象 属性 的更简洁方法,其中对象可能为 null 或未定义

More concise way to set object property where object might be null or undefined

我有一个 JavaScript errors 对象,我在 Salesforce Lightning Web 组件中使用了一个开箱即用的 table 组件,称为数据table.我不会详细介绍它是如何使用的,但就我的问题而言,errors 可以为 null,或者它可以有一个 rows 属性(它本身是一个对象,用于行级错误),它也可以有一个 table 属性(也是一个对象,用于 table 级错误)。

以下是 errors 的一些可能值:

errors = null;

errors = {
    rows: {
        ...
    }
}

errors = {
    table: {
        ...
    }
}

errors = {
    rows: {
        ...
    },
    table: {
        ...
    }
}

设置 table 级错误时,我不想只说 errors = { table: {...}},因为这样我可能会覆盖一些行级错误。所以这就是我目前的编码方式:

if (errors === null) {
    errors = { table: {} };
} else {
    errors.table = {};
}
errors.table.title = 'You must select at least one item to be returned.';

有更简洁的方法吗?

你不需要 else:

errors = errors || {};
errors.table = errors.table || {};

在现代 JavaScript 环境中,最好使用 ??(合并运算符):

errors = errors ?? {};
errors.table = errors.table ?? {};

还可以更短:

errors ??= {};
errors.table ??= {};

在你的情况下没有太大区别,但是 || 对值执行老式的“真实”测试,而 ?? 只检查 nullundefined.

说到这一点,在 大多数 情况下,与 null 相比,我更喜欢使用 == 而不是 === 因为 == nullundefined 被认为是同一件事。在大多数编码情况下,明确区分两者有点脆弱。