Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Ecmascript 6中省略值的情况下,使用默认值初始化对象的最佳方法是什么?_Javascript_Ecmascript 6 - Fatal编程技术网

Javascript 在Ecmascript 6中省略值的情况下,使用默认值初始化对象的最佳方法是什么?

Javascript 在Ecmascript 6中省略值的情况下,使用默认值初始化对象的最佳方法是什么?,javascript,ecmascript-6,Javascript,Ecmascript 6,假设我想声明一个对象栏并将其值设置为对象foo的值,但我不确定foo是否具有所有必需的属性。我还想保留falsy值,比如来自foo的值,而不是恢复为默认值。例如: var foo = somefunc(); console.log(foo); //{prop1: "", prop2: "works"} var defaults = {prop1: "default1", prop2: "default2", prop3: "default3"} /* some piece of code */

假设我想声明一个对象栏并将其值设置为对象foo的值,但我不确定foo是否具有所有必需的属性。我还想保留falsy值,比如来自foo的值,而不是恢复为默认值。例如:

var foo = somefunc();
console.log(foo);
//{prop1: "", prop2: "works"}

var defaults = {prop1: "default1", prop2: "default2", prop3: "default3"}
/* some piece of code */
console.log(bar);
//should log: {prop1: "", prop2: "works", prop3: "default3"}
在Ecmascript 6中使用默认值进行初始化的最佳/*代码*/是什么?

可以使用Object.assign,以空对象作为目标,默认值和foo作为源,按此顺序进行初始化

let bar = Object.assign({}, defaults, foo);
可以使用Object.assign以空对象作为目标,默认值和foo作为源,按此顺序完成此操作

let bar = Object.assign({}, defaults, foo);
这对你有用吗

var foo={prop1:,prop2:works}; var defaults={prop1:default1,prop2:default2,prop3:default3} var bar=Object.assign{},默认值,foo 控制台.logbar//{prop1:,prop2:works,prop3:default3}这对你有用吗

var foo={prop1:,prop2:works}; var defaults={prop1:default1,prop2:default2,prop3:default3} var bar=Object.assign{},默认值,foo
控制台.logbar//{prop1:,prop2:works,prop3:default3}您可以优雅地使用spread操作符来实现这一点

var foo = {prop1: "", prop2: "works"};
console.log(foo);

var defaults = {prop1: "default1", prop2: "default2", prop3: "default3"}
var bar = {...defaults, ...foo}
console.log(bar);

您可以优雅地使用spread操作符来实现这一点

var foo = {prop1: "", prop2: "works"};
console.log(foo);

var defaults = {prop1: "default1", prop2: "default2", prop3: "default3"}
var bar = {...defaults, ...foo}
console.log(bar);


与其使用解构默认值,不如先分散默认值,然后再分散变量,或者使用Object.assign?我不明白分散默认值是什么意思。从默认值创建一个新对象,然后使用bar与Object.assign非常相似。此外,还可以使用分散运算符来实现相同的结果。常量结果={…默认值,…foo};我明白了,谢谢。也许这应该是一个答案。与其使用解构默认值,不如先分散默认值,然后使用vaules,或者使用Object.assign?我不理解分散默认值的意思。从默认值创建一个新对象,然后使用bar与Object.assign非常类似。此外,还可以使用分散运算符来实现相同的结果。常量结果={…默认值,…foo};我明白了,谢谢。也许这应该是一个答案。谢谢!您可以阅读有关对象的更多信息。谢谢!您可以阅读有关对象的更多信息。分配是否有理由支持此方法而非对象。分配已提及的解决方案,超出审美偏好?是否有理由支持此方法而非对象。分配已提及的解决方案,除了审美偏好之外?是否有理由支持这一点而不是对象。除了它更漂亮这一事实之外,这里提供了一个很好的解释,可能只是没有使用正确的术语,但请注意,对象传播不是ES6的一部分。部分没有使用正确的术语,在这方面,我可能应该询问现代Javascript,而不是具体的Ecmascript6,但由于它是标准化的,至少在我看来,这很好。有没有理由支持它而不是Object.assign,因为它更漂亮?这里提供了很好的解释,可能只是没有使用正确的术语,但请注意,对象扩展不是ES6的一部分。部分原因是没有使用正确的术语,因为我可能应该询问现代Javascript,而不是具体的ECMAScript 6,但由于它是标准化的,至少对于我的目的来说,这很好。