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

时间:2019-01-16 16:13:01

标签: javascript operators spread-syntax

是否存在一种更易读的方式来将对象的未定义字段散布到另一个对象上而不遍历该对象的每个元素?

以下示例将对象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值的字段的方法? (很显然,全部遍历对象A的每个字段,如果该字段的值不是B则扩展到undefined

2 个答案:

答案 0 :(得分:0)

如果您询问价差运算符是否会在“价差”后维护未定义的属性值,那么它们会这样做。

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

答案 1 :(得分:0)

事实证明这是我的无效主张。传播算子确实传播了具有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来对其进行字符串化