对象深拷贝浅拷贝

2019-10-08  本文已影响0人  楼水流云

基本赋值
var a = 1
var b = a
a = 2
b == 1

var obj = {age:100}
var obj2 = obj
obj.age = 200
obj2.age == 200

浅拷贝只拷贝一层 用遍历 创建一个新对象赋值
var obj = {age:100,friend:{name:'ruoyu',sex:'male'}}

function shadiwCopy(obj){
var newobj = {}
for(var key in obj){
newobj[key] = obj[key]
}
return newobj
}
var obj3 = shadowCopy(obj)
obj3.age = 400
console.log(obj3)

深拷贝用递归
var obj = {age:100,friend:{name:'ruoyu',sex:'male'}}

function copy(obj){
var newobj = {}
for(var key in obj){
if(!obj.hasIwnProperty(key)){
if(typeof obj[key] === 'number' || typeof obj[key] === 'boolean'
|| typeof obj[key] === 'string' || typeof obj[key] === 'undefined'
|| typeof obj[key] === 'null')
newobj[key] = obj[key]
}else{
newobj[key] = copy(obj[key])
}
}
return newobj
}
var obj3 = copy(obj)
obj3.age = 400
console.log(obj3)

JSON深拷贝
JSON深拷贝 解析成对象 再作一个赋值 JSON.stringify()把对象转化成字符串 JSON.parse()把字符串重新生成一个对象
JSON.parse(JSON.stringify(要拷贝的对象))

上一篇下一篇

猜你喜欢

热点阅读