91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何理解JavaScript中的深拷貝和淺拷貝

發布時間:2020-04-16 10:24:54 來源:億速云 閱讀:180 作者:小新 欄目:web開發

今天小編給大家分享的是如何理解JavaScript中的深拷貝和淺拷貝,很多人都不太了解,今天小編為了讓大家更加了解JavaScript中的深拷貝和淺拷貝,所以給大家總結了以下內容,一起往下看吧。一定會有所收獲的哦。

對于 數字,boolean 和 字符串 等基本類型 而言,賦值、淺拷貝和深拷貝無意義,因為每次都會在堆中開辟一塊新的空間,指向新的地址。

一、賦值:

指向同一個地址,不拷貝。
如何理解JavaScript中的深拷貝和淺拷貝

var obj1 = {name:'圓', radius:10, point:{x:0,y:0}};
var obj2 = obj1;
 
obj2.name = "圓2";  //obj1中的name也會變

二、淺拷貝:

如何理解JavaScript中的深拷貝和淺拷貝

var obj1 = {name:'圓', radius:10, point:{x:0,y:0}};
var obj2 = Object.assign({},obj1);
 
obj2.name="圓2"  // obj1.name不會變
obj2.point.x = 2       //obj1.point.x 改變,因為只拷貝到point一層

同樣,解構賦值也是如此
var obj1 = {name:'圓', radius:10, point:{x:0,y:0}};
var obj2 = {…obj1}

三、深拷貝:

如何理解JavaScript中的深拷貝和淺拷貝

方法1

JSON.stringify(obj)  先將對象轉換為字符串
JSON.parse(str)      然后再將字符串轉為對象。

var obj1 = {name:'圓', radius:10, point:{x:0,y:0}};
var obj2 = JSON.stringify(obj1 );
var obj1 = JSON.parse(obj2);
 
obj2.name = "圓2";  // obj1 不變
obj2.point.x = 3;     //  obj1 不變

但JSON.stringify在轉換Date,RegExp對象及function時會出現問題,同時也會忽略undefined、function

//date 類型
var o = new Date();
console.log(o.toString());         //  Mon Nov 06 2017 11:23:35 GMT+0800 (China Standard Time)  本地標準時間
console.log(JSON.stringify(o));    // "2017-11-06T03:23:35.547Z"  國際標準時間

因為stringify默認調用的是Object的toJSON方法,所以重寫Date的toJSON,然后stringify就是ok的。

Date.prototype.toJSON = function () {
  return this.toLocaleString();
}
console.log(JSON.stringify(o));      // "11/6/2017, 11:23:35 AM"

同理RegExp

//RegExp類型
r1 = /\d+/;
console.log(JSON.stringify(r1));           //   {}
 
RegExp.prototype.toJSON = function(){
return this.toString();
}
console.log(JSON.stringify(r1));          //    "/\\d+/"
方法2

類庫的方式。jquery,lodash等庫

//jquery
let  y = $.extend(true,{},x)   //第一個參數 必須為true

//lodash庫
let  y = _.cloneDeep(x);

關于如何理解JavaScript中的深拷貝和淺拷貝就分享到這里了,當然并不止以上和大家分析的辦法,不過小編可以保證其準確性是絕對沒問題的。希望以上內容可以對大家有一定的參考價值,可以學以致用。如果喜歡本篇文章,不妨把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

平泉县| 定安县| 沁阳市| 丹江口市| 霍州市| 寻乌县| 肃南| 当雄县| 澄迈县| 东明县| 阜新| 绍兴市| 高阳县| 淅川县| 山阳县| 惠安县| 香格里拉县| 柘荣县| 昆明市| 澜沧| 金溪县| 应城市| 富源县| 永善县| 温宿县| 西乌珠穆沁旗| 四川省| 谢通门县| 临澧县| 武城县| 于都县| 大同市| 吴忠市| 加查县| 厦门市| 乌兰浩特市| 长白| 邵武市| 青海省| 太湖县| 措美县|