【问题标题】:How to provide default values for an empty string in a destructured object如何为解构对象中的空字符串提供默认值
【发布时间】:2025-11-26 01:40:01
【问题描述】:

在执行对象解构时,如果键不存在(即 undefinedKey),则可以提供默认值。

如果(字符串)键确实存在,它不会被覆盖(即使是空的)。

我想知道是否可以在解构时为空字符串指定覆盖。在下面的示例中,我希望 emptyKey 打印 Override for empty key

const testObject = {
  emptyKey: '',
  filledKey: 'Some Initial Value',
};

const {
  emptyKey = 'Override for empty key',
  filledKey = 'Override for filled key',
  undefinedKey = 'Override for undefined key',
} = testObject;

console.log(emptyKey); //''
console.log(filledKey); //'Some Initial Value'
console.log(undefinedKey); //'Override for undefined key'

【问题讨论】:

  • 为了在更大的函数中清晰起见,我正在尝试尽早定义默认值。我知道我可以在使用值的地方进行|| 比较,但我希望有一种更简洁的方法。

标签: javascript object ecmascript-6


【解决方案1】:

我想知道是否可以在解构时为空字符串指定覆盖。

不,仅当属性值为undefined 时才考虑默认值。无法覆盖此行为。


作为一种解决方法,您可以构建自己的小默认值处理程序,例如

function defaults(obj, test, defaults) {
  return Object.keys(defaults).reduce((acc, prop) => {
    acc[prop] = test(obj[prop]) ? defaults[prop] : obj[prop];
    return acc;
  }, {});
}

const testObject = {
  emptyKey: '',
  filledKey: 'Some Initial Value',
};

const {
  emptyKey,
  filledKey,
  undefinedKey,
} = defaults(
  testObject,
  v => v === undefined || v === '',
  {
    emptyKey: 'Override for empty key',
    filledKey: 'Override for filled key',
    undefinedKey:'Override for undefined key',
  }
);

console.log(emptyKey, filledKey, undefinedKey);

没有那么优雅,但很灵活。

【讨论】:

  • 嗯,这就回答了!非常感谢!