在执行对象解构时,如果密钥不存在(即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'
答案 0 :(得分:2)
我想知道在解构时是否可以为空字符串指定覆盖。
不,只有在属性值为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);
不太优雅,但很灵活。