admin管理员组文章数量:1023744
let user = { name: "Nasir", age: 25 };
let employee = Object.assign( {}, user, { add: "dhaka", age: 35 } );
console.log( user ); //{ name: 'Nasir', age: 25 }
console.log( employee ); // { name: 'Nasir', age: 35, add: 'dhaka' }
//------------------------------------------//
let user1 = { name: "ahmed" };
let employee1 = Object.assign( user1, { permission: "can edit" } );
console.log( user1 ); // { name: 'ahmed', permission: 'can edit' }
console.log( employee1 ); //{ name: 'ahmed', permission: 'can edit' }
Why user1
object gets the property: permission
?
I copied user1
objects properties to employee1
and add additional property permission
, so permission
should be found
on only the employee1
object, not in user1
.
Please guide me, what did I miss?
let user = { name: "Nasir", age: 25 };
let employee = Object.assign( {}, user, { add: "dhaka", age: 35 } );
console.log( user ); //{ name: 'Nasir', age: 25 }
console.log( employee ); // { name: 'Nasir', age: 35, add: 'dhaka' }
//------------------------------------------//
let user1 = { name: "ahmed" };
let employee1 = Object.assign( user1, { permission: "can edit" } );
console.log( user1 ); // { name: 'ahmed', permission: 'can edit' }
console.log( employee1 ); //{ name: 'ahmed', permission: 'can edit' }
Why user1
object gets the property: permission
?
I copied user1
objects properties to employee1
and add additional property permission
, so permission
should be found
on only the employee1
object, not in user1
.
Please guide me, what did I miss?
Share Improve this question edited Apr 13, 2021 at 6:43 Nguyễn Văn Phong 14.2k19 gold badges46 silver badges63 bronze badges asked Apr 13, 2021 at 6:14 NasirNasir 2754 silver badges15 bronze badges4 Answers
Reset to default 6Since, the Object.assign()
has syntax Object.assign(target, source)
so you are using user1
as a target. Thus, use an empty object {}
as a target so that the objects are merged in that target and the user1
object is not changed.
let user1 = {
name: "ahmed"
};
let employee1 = Object.assign({}, user1, {
permission: "can edit"
});
console.log(user1); // { name: 'ahmed' }
console.log(employee1); //{ name: 'ahmed', permission: 'can edit' }
You can even use the spread syntax to achieve this:
let user1 = {
name: "ahmed"
};
let employee1 = {
...user1,
...{ permission: "can edit" }
}
console.log(user1); // { name: 'ahmed' }
console.log(employee1); //{ name: 'ahmed', permission: 'can edit' }
According to MDN's docs says that
Properties in the
target object are overwritten by properties in the sources if they have the same key
. Later sources' properties overwrite earlier ones
And, the syntax is
Object.assign(target, ...sources)
So that's the reason why user1
has been changed.
Solution, There are 2 options:
- Create a dummy
target
object by adding{}
at first param.
Please take a closer the second param ...sources
, and specs say that
The Object.assign() method copies all enumerable own properties from one or more source objects to a target object
so from the second params that act as source
.
let user1 = { name: "ahmed" };
let employee1 = Object.assign({}, user1, { permission: "can edit" } );
console.log(user1); // { name: 'ahmed' }
console.log(employee1); //{ name: 'ahmed', permission: 'can edit' }
- Using Spread in object literals
let user1 = { name: "ahmed" };
let employee1 = {...user1, ...{permission: 'can edit'}}
console.log(user1); // { name: 'ahmed' }
console.log(employee1); //{ name: 'ahmed', permission: 'can edit' }
let user1 = { name: "ahmed" };
let employee1 = {...user1,...{ permission: "can edit" }};
console.log( user1 ); // { name: 'ahmed', permission: 'can edit' }
console.log( employee1 );
Object.assign(obj1,obj2 ,....)
Here assign method will add all property or object to left side object or the object you have in first Param (i.e obj1) that is why its return in both.
so try {}
in first left side or use above shorthand.
The reason this happens is that Object.assign()
alters the first parameter object given to it. In the first care you are altering an empty object {}
and in the second case you are altering user1
object.
let user = { name: "Nasir", age: 25 };
let employee = Object.assign( {}, user, { add: "dhaka", age: 35 } );
console.log( user ); //{ name: 'Nasir', age: 25 }
console.log( employee ); // { name: 'Nasir', age: 35, add: 'dhaka' }
//------------------------------------------//
let user1 = { name: "ahmed" };
let employee1 = Object.assign( user1, { permission: "can edit" } );
console.log( user1 ); // { name: 'ahmed', permission: 'can edit' }
console.log( employee1 ); //{ name: 'ahmed', permission: 'can edit' }
Why user1
object gets the property: permission
?
I copied user1
objects properties to employee1
and add additional property permission
, so permission
should be found
on only the employee1
object, not in user1
.
Please guide me, what did I miss?
let user = { name: "Nasir", age: 25 };
let employee = Object.assign( {}, user, { add: "dhaka", age: 35 } );
console.log( user ); //{ name: 'Nasir', age: 25 }
console.log( employee ); // { name: 'Nasir', age: 35, add: 'dhaka' }
//------------------------------------------//
let user1 = { name: "ahmed" };
let employee1 = Object.assign( user1, { permission: "can edit" } );
console.log( user1 ); // { name: 'ahmed', permission: 'can edit' }
console.log( employee1 ); //{ name: 'ahmed', permission: 'can edit' }
Why user1
object gets the property: permission
?
I copied user1
objects properties to employee1
and add additional property permission
, so permission
should be found
on only the employee1
object, not in user1
.
Please guide me, what did I miss?
Share Improve this question edited Apr 13, 2021 at 6:43 Nguyễn Văn Phong 14.2k19 gold badges46 silver badges63 bronze badges asked Apr 13, 2021 at 6:14 NasirNasir 2754 silver badges15 bronze badges4 Answers
Reset to default 6Since, the Object.assign()
has syntax Object.assign(target, source)
so you are using user1
as a target. Thus, use an empty object {}
as a target so that the objects are merged in that target and the user1
object is not changed.
let user1 = {
name: "ahmed"
};
let employee1 = Object.assign({}, user1, {
permission: "can edit"
});
console.log(user1); // { name: 'ahmed' }
console.log(employee1); //{ name: 'ahmed', permission: 'can edit' }
You can even use the spread syntax to achieve this:
let user1 = {
name: "ahmed"
};
let employee1 = {
...user1,
...{ permission: "can edit" }
}
console.log(user1); // { name: 'ahmed' }
console.log(employee1); //{ name: 'ahmed', permission: 'can edit' }
According to MDN's docs says that
Properties in the
target object are overwritten by properties in the sources if they have the same key
. Later sources' properties overwrite earlier ones
And, the syntax is
Object.assign(target, ...sources)
So that's the reason why user1
has been changed.
Solution, There are 2 options:
- Create a dummy
target
object by adding{}
at first param.
Please take a closer the second param ...sources
, and specs say that
The Object.assign() method copies all enumerable own properties from one or more source objects to a target object
so from the second params that act as source
.
let user1 = { name: "ahmed" };
let employee1 = Object.assign({}, user1, { permission: "can edit" } );
console.log(user1); // { name: 'ahmed' }
console.log(employee1); //{ name: 'ahmed', permission: 'can edit' }
- Using Spread in object literals
let user1 = { name: "ahmed" };
let employee1 = {...user1, ...{permission: 'can edit'}}
console.log(user1); // { name: 'ahmed' }
console.log(employee1); //{ name: 'ahmed', permission: 'can edit' }
let user1 = { name: "ahmed" };
let employee1 = {...user1,...{ permission: "can edit" }};
console.log( user1 ); // { name: 'ahmed', permission: 'can edit' }
console.log( employee1 );
Object.assign(obj1,obj2 ,....)
Here assign method will add all property or object to left side object or the object you have in first Param (i.e obj1) that is why its return in both.
so try {}
in first left side or use above shorthand.
The reason this happens is that Object.assign()
alters the first parameter object given to it. In the first care you are altering an empty object {}
and in the second case you are altering user1
object.
本文标签: javascriptObjectassign queryStack Overflow
版权声明:本文标题:javascript - Object.assign query - Stack Overflow 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://it.en369.cn/questions/1745521040a2154315.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论