摘要:圓圓中的也會(huì)變二淺拷貝圓圓不會(huì)變改變,因?yàn)橹豢截惖揭粚油瑯?,解?gòu)賦值也是如此圓三深拷貝方法先將對(duì)象轉(zhuǎn)換為字符串然后再將字符串轉(zhuǎn)為對(duì)象。圓圓不變不變但在轉(zhuǎn)換,對(duì)象及時(shí)會(huì)出現(xiàn)問題,同時(shí)也會(huì)忽略。
前言
對(duì)于 數(shù)字,boolean 和 字符串 等基本類型 而言,賦值、淺拷貝和深拷貝無意義,因?yàn)槊看味紩?huì)在堆中開辟一塊新的空間,指向新的地址。
一、賦值:指向同一個(gè)地址,不拷貝。
var obj1 = {name:"圓", radius:10, point:{x:0,y:0}}; var obj2 = obj1; obj2.name = "圓2"; //obj1中的name也會(huì)變二、淺拷貝:
var obj1 = {name:"圓", radius:10, point:{x:0,y:0}}; var obj2 = Object.assign({},obj1); obj2.name="圓2" // obj1.name不會(huì)變 obj2.point.x = 2 //obj1.point.x 改變,因?yàn)橹豢截惖絧oint一層 同樣,解構(gòu)賦值也是如此 var obj1 = {name:"圓", radius:10, point:{x:0,y:0}}; var obj2 = {…obj1}三、深拷貝: 方法1
JSON.stringify(obj) 先將對(duì)象轉(zhuǎn)換為字符串
JSON.parse(str) 然后再將字符串轉(zhuǎn)為對(duì)象。
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在轉(zhuǎn)換Date,RegExp對(duì)象及function時(shí)會(huì)出現(xiàn)問題,同時(shí)也會(huì)忽略u(píng)ndefined、function。
//date 類型 var o = new Date(); console.log(o.toString()); // Mon Nov 06 2017 11:23:35 GMT+0800 (China Standard Time) 本地標(biāo)準(zhǔn)時(shí)間 console.log(JSON.stringify(o)); // "2017-11-06T03:23:35.547Z" 國際標(biāo)準(zhǔn)時(shí)間
因?yàn)閟tringify默認(rèn)調(diào)用的是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) //第一個(gè)參數(shù) 必須為true //lodash庫 let y = _.cloneDeep(x);
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/99210.html
摘要:淺拷貝與深拷貝一數(shù)據(jù)類型數(shù)據(jù)分為基本數(shù)據(jù)類型,和對(duì)象數(shù)據(jù)類型。淺拷貝是按位拷貝對(duì)象,它會(huì)創(chuàng)建一個(gè)新對(duì)象,這個(gè)對(duì)象有著原始對(duì)象屬性值的一份精確拷貝。對(duì)于字符串?dāng)?shù)字及布爾值來說不是或者對(duì)象,會(huì)拷貝這些值到新的數(shù)組里。 淺拷貝與深拷貝 一、數(shù)據(jù)類型數(shù)據(jù)分為基本數(shù)據(jù)類型(String, Number, Boolean, Null, Undefined,Symbol)和對(duì)象數(shù)據(jù)類型。 基本數(shù)據(jù)類...
摘要:二淺拷貝與深拷貝深拷貝和淺拷貝是只針對(duì)和這樣的引用數(shù)據(jù)類型的。淺拷貝是按位拷貝對(duì)象,它會(huì)創(chuàng)建一個(gè)新對(duì)象,這個(gè)對(duì)象有著原始對(duì)象屬性值的一份精確拷貝。對(duì)于字符串?dāng)?shù)字及布爾值來說不是或者對(duì)象,會(huì)拷貝這些值到新的數(shù)組里。 一、數(shù)據(jù)類型 數(shù)據(jù)分為基本數(shù)據(jù)類型(String, Number, Boolean, Null, Undefined,Symbol)和對(duì)象數(shù)據(jù)類型。 基本數(shù)據(jù)類型的特點(diǎn):直...
摘要:二淺拷貝與深拷貝深拷貝和淺拷貝是只針對(duì)和這樣的引用數(shù)據(jù)類型的。淺拷貝是按位拷貝對(duì)象,它會(huì)創(chuàng)建一個(gè)新對(duì)象,這個(gè)對(duì)象有著原始對(duì)象屬性值的一份精確拷貝。對(duì)于字符串?dāng)?shù)字及布爾值來說不是或者對(duì)象,會(huì)拷貝這些值到新的數(shù)組里。 一、數(shù)據(jù)類型 數(shù)據(jù)分為基本數(shù)據(jù)類型(String, Number, Boolean, Null, Undefined,Symbol)和對(duì)象數(shù)據(jù)類型。 基本數(shù)據(jù)類型的特點(diǎn):直...
摘要:參考鏈接淺拷貝最簡單的淺拷貝就賦值。所謂的淺拷貝就是,后面的對(duì)象和前面的對(duì)象在第一層數(shù)據(jù)結(jié)構(gòu)中指向同一個(gè)堆地址。但是如果前面的數(shù)據(jù)不止有一層,如此時(shí),使用和方式實(shí)現(xiàn)的都是淺拷貝。深拷貝管你怎么變,互不影響。 參考鏈接:http://www.cnblogs.com/st-les...https://blog.csdn.net/hj7jay/... 淺拷貝: 1.最簡單的淺拷貝就賦值。由于...
摘要:淺拷貝是按位拷貝對(duì)象,它會(huì)創(chuàng)建一個(gè)新對(duì)象,這個(gè)對(duì)象有著原始對(duì)象屬性值的一份精確拷貝。兩個(gè)對(duì)象引用都引用了同一個(gè)對(duì)象。對(duì)于字符串?dāng)?shù)字及布爾值來說不是或者對(duì)象,會(huì)拷貝這些值到新的數(shù)組里。 1、對(duì)象的理解 對(duì)象是一個(gè)包含相關(guān)數(shù)據(jù)和方法的集合(通常由一些變量和函數(shù)組成,我們稱之為對(duì)象里面的屬性和方法) 1.1 對(duì)象可以看成是Object對(duì)象構(gòu)造出來的 showImg(https://user...
閱讀 2960·2023-04-26 01:47
閱讀 3710·2023-04-25 23:45
閱讀 2596·2021-10-13 09:39
閱讀 680·2021-10-09 09:44
閱讀 1978·2021-09-22 15:59
閱讀 2944·2021-09-13 10:33
閱讀 1887·2021-09-03 10:30
閱讀 723·2019-08-30 15:53