淺克隆:
引用值改變赠堵, 兩個都一起變小渊。
改變克隆對象
改變temp.hobby[0] , obj.hobbyj[0]隨之改變。
因為淺復制只會將對象的各個屬性進行依次復制茫叭,并不會進行遞歸復制酬屉,而 JavaScript 存儲對象都是存地址的,所以淺復制會導致 obj.hobby和 temp.hobby指向同一塊內存地址揍愁。
深克履湃:
1)判斷是不是引用值
1.1)判斷是數組還是對象。
2)建立相應的數組或對象莽囤。
3)遞歸谬擦。
改變克隆對象
而深克隆則不同,它不僅將原對象的各個屬性逐個復制出去朽缎,而且將原對象各個屬性所包含的對象也依次采用深復制的方法遞歸復制到新對象上惨远。
這就不會存在上面 obj.hobby和 temp.hobby屬性指向同一個對象的問題。
簡單來說话肖,對于字符串類型北秽,淺克隆是對值的復制,對于對象來說狼牺,淺克隆是對對象地址的復制羡儿,并沒 有開辟新的棧,也就是克隆的結果是兩個對象指向同一個地址是钥,修改其中一個對象的屬性掠归,則另一個對象的屬性也會改變缅叠,而深克隆則是開辟新的棧,兩個對象對應兩個不同的地址虏冻,修改一個對象的屬性肤粱,不會改變另一個對象的屬性。