摘要:圓圓中的也會變二淺拷貝圓圓不會變改變,因為只拷貝到一層同樣,解構賦值也是如此圓三深拷貝方法先將對象轉換為字符串然后再將字符串轉為對象。圓圓不變不變但在轉換,對象及時會出現問題,同時也會忽略。
前言
對于 數字,boolean 和 字符串 等基本類型 而言,賦值、淺拷貝和深拷貝無意義,因為每次都會在堆中開辟一塊新的空間,指向新的地址。
一、賦值:指向同一個地址,不拷貝。
var obj1 = {name:"圓", radius:10, point:{x:0,y:0}}; var obj2 = obj1; obj2.name = "圓2"; //obj1中的name也會變二、淺拷貝:
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}三、深拷貝: 方法1
JSON.stringify(obj) 先將對象轉換為字符串
JSON.parse(str) 然后再將字符串轉為對象。
var obj1 = {name:"圓", radius:10, point:{x:0,y:0}}; var obj2 = JSON.stringify(obj1 ); var obj2 = 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);
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/99210.html
摘要:淺拷貝與深拷貝一數據類型數據分為基本數據類型,和對象數據類型。淺拷貝是按位拷貝對象,它會創建一個新對象,這個對象有著原始對象屬性值的一份精確拷貝。對于字符串數字及布爾值來說不是或者對象,會拷貝這些值到新的數組里。 淺拷貝與深拷貝 一、數據類型數據分為基本數據類型(String, Number, Boolean, Null, Undefined,Symbol)和對象數據類型。 基本數據類...
摘要:參考鏈接淺拷貝最簡單的淺拷貝就賦值。所謂的淺拷貝就是,后面的對象和前面的對象在第一層數據結構中指向同一個堆地址。但是如果前面的數據不止有一層,如此時,使用和方式實現的都是淺拷貝。深拷貝管你怎么變,互不影響。 參考鏈接:http://www.cnblogs.com/st-les...https://blog.csdn.net/hj7jay/... 淺拷貝: 1.最簡單的淺拷貝就賦值。由于...
摘要:淺拷貝是按位拷貝對象,它會創建一個新對象,這個對象有著原始對象屬性值的一份精確拷貝。兩個對象引用都引用了同一個對象。對于字符串數字及布爾值來說不是或者對象,會拷貝這些值到新的數組里。 1、對象的理解 對象是一個包含相關數據和方法的集合(通常由一些變量和函數組成,我們稱之為對象里面的屬性和方法) 1.1 對象可以看成是Object對象構造出來的 showImg(https://user...
閱讀 2779·2023-04-26 01:47
閱讀 3591·2023-04-25 23:45
閱讀 2461·2021-10-13 09:39
閱讀 606·2021-10-09 09:44
閱讀 1789·2021-09-22 15:59
閱讀 2761·2021-09-13 10:33
閱讀 1706·2021-09-03 10:30
閱讀 656·2019-08-30 15:53