亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

习水县| 永清县| 德令哈市| 延津县| 老河口市| 温州市| 奉化市| 农安县| 宝坻区| 苗栗县| 浦东新区| 阜康市| 阳信县| 英吉沙县| 宁乡县| 察雅县| 津南区| 长乐市| 蕲春县| 日土县| 玛沁县| 固安县| 平谷区| 金平| 馆陶县| 二连浩特市| 北海市| 南宁市| 望城县| 蒙城县| 平定县| 昭平县| 梁山县| 健康| 贵南县| 永新县| 滨海县| 武山县| 普安县| 诸暨市| 犍为县|