js 手写深浅拷贝

JavaScript013

js 手写深浅拷贝,第1张

先说一下浅拷贝的实现方式

ES6 中 Object 的一方法,可以是来合并多个JS对象(能用来实现浅拷贝)

第一个参数拷贝的目标对象,后面的参数是拷贝的来源对象

利用扩展运算法,可以实现浅拷贝的的功能。

手写浅拷贝的思路:

将一个对象从内存中完整的拷贝出来给目标独对象,并新开辟一个全新的内存空间存放对象,新对象的修改并不会改变原对象,实现真正的分离。

最简单的深拷贝的方法,就是把一个对象序列化成为 JSON 的字符串,并将对象里面的内容转成字符串,最后用 JSON.parse() 将 JSON 字符串生成一个新的对象。

但是 JSON.stringify 实现深拷贝有些地方需要注意:

这只是简版的,利用递归的方式实现深拷贝,同 JSON.stringify 效果一样,还是有些问题没有解决

即使修改 obj.data 下的属性,也是跟之前的没有关系

<style>

.ziti1{ font-family:黑体}

#div1{ font-family:宋体}

</style>

<div id="div1">字体目前是宋体</div>

<script language="javascript">

setTimeout("div1.className='.ziti1'",5000)//5秒以后,div1中的文字字体变成黑体

</scritp>

汉字照常写。

报错是因为,这个js文件编码的问题,用记事本打开js文件,选择文件另存为,在另存的时候,下方有个编码的选择,选择UTF-8,即可。另存后,看看里面的汉字是不是乱码,如果乱码,就重新写一遍,重新写的是在UTF-8格式下写的,这时就不会报错了。

如果是汉字注释的话,最后使用 /*** 注释 ***/ 无论汉字怎么乱码 JS文件都不会报错