一、現(xiàn)象:直接用=的方式把一個對象賦值給另一個對象,會導致修改新對象時,原對象也發(fā)生變化
var obj1 = {"name": "1111"}; var obj2 = obj1; obj2.name = "2222"; console.log(obj1.name); //"2222"二、原因:JavaScript 中對象的賦值是默認引用賦值的(兩個對象指向相同的內存地址) 三、解決方法: JSON.parse(JSON.stringify(obj))
通過 Object.assign() 賦值
// 使用 Object.assign() 方法復制對象 let obj1 = { a: 0 , b: { c: 0}}; let obj2 = Object.assign({}, obj1); console.log(JSON.stringify(obj2)); // { a: 0, b: { c: 0}} obj2.a = 2; console.log(JSON.stringify(obj1)); // { a: 1, b: { c: 0}} console.log(JSON.stringify(obj2)); // { a: 2, b: { c: 0}} obj2.b.c = 3; console.log(JSON.stringify(obj1)); // { a: 1, b: { c: 3}} console.log(JSON.stringify(obj2)); // { a: 2, b: { c: 3}}
此方法也有不足之處:當修改obj2.b.c的值時,原對象obj1.b.c也跟著發(fā)生了變化,Object.assign()只是讓對象里第一層的數(shù)據(jù)沒有了關聯(lián)性,但是對象內的對象則跟被復制的對象有著關聯(lián)性的。
終極解決方案:JSON.parse(JSON.stringify(obj))
var function cloneObjectFn (obj){ // 對象復制 return JSON.parse(JSON.stringify(obj)) } var obj1={a:2,b{c:0}} var obj2=cloneObjectFn(obj1) console.log(obj2) // {a:2,b{c:0}}
更多詳細內容請參考:https://www.cnblogs.com/c2016...
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://www.ezyhdfw.cn/yun/102268.html
摘要:在之前的文章專題之數(shù)據(jù)類型和類型檢測中我有講過,中的數(shù)據(jù)類型分為兩種,基本數(shù)據(jù)類型和引用數(shù)據(jù)類型,基本數(shù)據(jù)類型是保存在棧的數(shù)據(jù)結構中的是按值訪問,所以不存在深淺拷貝問題。 前言 在開發(fā)過程中,偶爾會遇到這種場景,拿到一個數(shù)據(jù)后,你打算對它進行處理,但是你又希望拷貝一份副本出來,方便數(shù)據(jù)對比和以后恢復數(shù)據(jù)。 那么這就涉及到了 JS 中對數(shù)據(jù)的深淺拷貝問題,所謂深淺拷貝,淺拷貝的意思就是,...
摘要:它將返回目標對象。有些文章說是深拷貝,其實這是不正確的。深拷貝相比于淺拷貝速度較慢并且花銷較大。拷貝前后兩個對象互不影響。使用深拷貝的場景完全改變變量之后對沒有任何影響,這就是深拷貝的魔力。 一、賦值(Copy) 賦值是將某一數(shù)值或對象賦給某個變量的過程,分為: 1、基本數(shù)據(jù)類型:賦值,賦值之后兩個變量互不影響 2、引用數(shù)據(jù)類型:賦址,兩個變量具有相同的引用,指向同一個對象,相互之間有...
摘要:淺拷貝是按位拷貝對象,它會創(chuàng)建一個新對象,這個對象有著原始對象屬性值的一份精確拷貝。兩個對象引用都引用了同一個對象。對于字符串數(shù)字及布爾值來說不是或者對象,會拷貝這些值到新的數(shù)組里。 1、對象的理解 對象是一個包含相關數(shù)據(jù)和方法的集合(通常由一些變量和函數(shù)組成,我們稱之為對象里面的屬性和方法) 1.1 對象可以看成是Object對象構造出來的 showImg(https://user...
摘要:展開語法木易楊通過代碼可以看出實際效果和是一樣的。木易楊可以看出,改變之后的值并沒有發(fā)生變化,但改變之后,相應的的值也發(fā)生變化。深拷貝使用場景木易楊完全改變變量之后對沒有任何影響,這就是深拷貝的魔力。木易楊情況下,轉換結果不正確。 一、賦值(Copy) 賦值是將某一數(shù)值或對象賦給某個變量的過程,分為下面 2 部分 基本數(shù)據(jù)類型:賦值,賦值之后兩個變量互不影響 引用數(shù)據(jù)類型:賦址,兩個...
閱讀 2487·2021-10-09 09:41
閱讀 3460·2021-09-26 09:46
閱讀 987·2021-09-03 10:34
閱讀 3270·2021-08-11 11:22
閱讀 3471·2019-08-30 14:12
閱讀 803·2019-08-26 11:34
閱讀 3416·2019-08-26 11:00
閱讀 1862·2019-08-26 10:26