中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

如何理解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

广安市| 大英县| 湖南省| 宝鸡市| 德昌县| 南江县| 忻城县| 正阳县| 元氏县| 香格里拉县| 凤冈县| 女性| 沅陵县| 威远县| 扬州市| 商洛市| 东平县| 营山县| 县级市| 广德县| 海安县| 垦利县| 天峨县| 淄博市| 长岛县| 鄂托克旗| 项城市| 松阳县| 吉安市| 太仓市| 杂多县| 新营市| 榆中县| 汉源县| 长春市| 亚东县| 民权县| 高雄县| 上饶市| 石屏县| 沙河市|