Javascript 扩展运算符可以包含对象的未定义字段吗?

Can Javascript spread operator include undefined fields of an object?

有没有一种更易读的方法可以将一个对象的未定义字段散布到另一个对象上,而无需遍历它的每个元素?

以下示例将对象 A 传播到对象 B:

let A = { f1:'Foo', f2:'Bar', f3:'Baz' }
let B = { ...A }
// Now B has the value of { f1:'Foo', f2:'Bar', f3:'Baz' }

但是在下面的示例中,展开运算符将不包含未定义的值:

let A = { f1:'Foo', f2:undefined, f3:'Baz' }
let B = { ...A }
// Now B has the value of { f1:'Foo', f3:'Baz' }
// I would like it to be spread like { f1:'Foo', f2:undefined, f3:'Baz' } 
// or { f1:'Foo', f2:null, f3:'Baz' }

有没有一种方法可以使用扩展运算符投影具有 undefined 值的字段? (显然 WITHOUT 遍历对象的每个字段 A 并扩展到 B 如果该字段的值不是 undefined

如果您询问展开运算符是否会维护未定义的 属性 值 'post spread',他们会维护。

const original = { one: 1, two: 2, three: undefined, four: null };
console.log(original);
const withSpread = {five: 5, ...original };
console.log(withSpread);
console.log(typeof withSpread.three === 'undefined')

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax

原来是我的断言无效。扩展运算符确实扩展了具有 undefined 值的字段。 JSON.stringify() 删除了我的一个来源中的那些字段,这导致我得出一个无效的断言。

对于 Express.js 用户;您可以使用 app.set('json replacer', (k, v) => v===undefined ? null : v); 通过将 undefined 值替换为 null

来让表达字符串化您的 json 响应

或者类似地,您可以使用 JSON.stringify({...}, (k, v) => v===undefined ? null : v) 通过将 undefined 值替换为 null

来让它进行字符串化