分享更有价值
被信任是一种快乐

object.assign()如何使用

文章页正文上

这篇“object.assign()如何使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“object.assign()如何使用”文章吧。 object.assign()方法用于将所有可枚举属性的值从一个或多个源对象(sources)分配到目标对象(target),并返回目标对象;语法“Object.assign(target, …sources)”,参数“target”是指目标对象,即接收源对象属性的对象,也是修改后的返回值,参数“sources”是指源对象,包含将被合并的属性。Object.assign() 的用法该方法用于将所有可枚举属性的值从一个或多个源对象(sources)分配到目标对象(target),并返回目标对象。

Object.assign(target,...sources)

target:目标对象,接收源对象属性的对象,也是修改后的返回值。sources:源对象,包含将被合并的属性。一、对象的拷贝

consttarget={a:1,b:2};
constsource1={b:4,c:5};
constsource2={b:6,c:7};
constobj=Object.assign(target,source1,source2);
console.log(obj);//(a:1,b:6,c:7)

注意:
1、源对象属性与目标对象属性不同,则会被拷贝到目标对象中;
2、如果目标对象和源对象有相同的属性,目标对象的属性值会被源对象的属性值覆盖掉;
3、如果有多个源对象有相同的属性,那么目标对象的属性将会被最后一个源对象属性覆盖。二、继承属性和不可枚举属性不能拷贝

constobj1=Object.create({foo:1},{//foo是个继承属性。
bar:{
value:2//bar是个不可枚举属性。
},
baz:{
value:3,
enumerable:true//baz是个自身可枚举属性。
}
});
constobj=Object.assign({},obj1);
console.log(obj);//{baz:3}
//创建对象时,如果没有设置enumerable的值,默认为false(不可枚举属性),设置为true,则为可枚举属性

注意:Object.assign 方法只会拷贝源对象自身的并且可枚举的属性到目标对象,继承的和不可枚举的属性不会拷贝。三、对象的深拷贝Object.assign()拷贝是浅拷贝,它拷贝的是属性值,假如源对象的属性值是一个对象 obj,那么拷贝的则是这个对象值的指针(也就是地址);这个时候修改obj 的值,则目标对象会受到影响。
想要避免这种影响我们需要对对象进行深拷贝:

letobj1={a:1,b:{c:2}};
letobj2={d:2};
letobj=Object.assign(obj2,JSON.parse(JSON.stringify(obj1)));
console.log(obj);//{d:2,a:1,b:{c:2}}
obj1.b.c=4;
console.log(obj);//{d:2,a:1,b:{c:2}}
//对象obj1.b.c值的变化则不会再影响到目标对象obj的值。

注意:深拷贝只能解决引用类型的值拷贝,对于继承和不可枚举属性依然不可以拷贝。四、异常会终止拷贝

consttarget=Object.defineProperty({},"foo",{
value:1,
writable:false
});//target的foo属性是个只读属性。

Object.assign(target,{bar:2},{foo2:3,foo:3,foo3:3},{baz:4});
//TypeError:"foo"isread-only
//注意这个异常是在拷贝第二个源对象的第二个属性时发生的。
console.log(target.bar);//2,说明第一个源对象拷贝成功了。
console.log(target.foo2);//3,说明第二个源对象的第一个属性也拷贝成功了。
console.log(target.foo);//1,只读属性不能被覆盖,所以第二个源对象的第二个属性拷贝失败了。
console.log(target.foo3);//undefined,异常免费云主机、域名之后assign方法就退出了,第三个属性是不会被拷贝到的。
console.log(target.baz);//undefined,第三个源对象更是不会被拷贝到的。

五、原始类型将会被包装成对象原始类型会被包装,null 和 undefined 会被忽略。

constobj1='aaa';
constobj2=false;
constobj3=true;
constobj4=10;
constobj=Object.assign(obj1,obj2,obj3,obj4);
console.log(obj);//{0:'a',1:'a',2:'a'}

注意:只有字符串的包装对象才可能有自身可枚举属性。以上就是关于“object.assign()如何使用”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注云技术行业资讯频道。

相关推荐: jQuery如何实现弹出框功能

本篇内容介绍了“jQuery如何实现弹出框功能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 在我们构建网站或应用程序时,经常需要使用弹出框来展示重要信息或提示…

文章页内容下
赞(0) 打赏
版权声明:本站采用知识共享、学习交流,不允许用于商业用途;文章由发布者自行承担一切责任,与本站无关。
文章页正文下
文章页评论上

云服务器、web空间可免费试用

宝塔面板主机、支持php,mysql等,SSL部署;安全高速企业专供99.999%稳定,另有高防主机、不限制内容等类型,具体可咨询QQ:360163164,Tel同微信:18905205712

主机选购导航云服务器试用

登录

找回密码

注册