成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

深拷貝和淺拷貝-深度解析

jsyzchen / 2766人閱讀

摘要:圓圓中的也會變二淺拷貝圓圓不會變改變,因為只拷貝到一層同樣,解構賦值也是如此圓三深拷貝方法先將對象轉(zhuǎn)換為字符串然后再將字符串轉(zhuǎn)為對象。圓圓不變不變但在轉(zhuǎn)換,對象及時會出現(xiàn)問題,同時也會忽略。

前言

對于 數(shù)字,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)  先將對象轉(zhuǎn)換為字符串
JSON.parse(str) 然后再將字符串轉(zhuǎn)為對象。
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對象及function時會出現(xiàn)問題,同時也會忽略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默認調(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)   //第一個參數(shù) 必須為true

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

文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/99210.html

相關文章

  • 拷貝拷貝的區(qū)別

    摘要:淺拷貝與深拷貝一數(shù)據(jù)類型數(shù)據(jù)分為基本數(shù)據(jù)類型,和對象數(shù)據(jù)類型。淺拷貝是按位拷貝對象,它會創(chuàng)建一個新對象,這個對象有著原始對象屬性值的一份精確拷貝。對于字符串數(shù)字及布爾值來說不是或者對象,會拷貝這些值到新的數(shù)組里。 淺拷貝與深拷貝 一、數(shù)據(jù)類型數(shù)據(jù)分為基本數(shù)據(jù)類型(String, Number, Boolean, Null, Undefined,Symbol)和對象數(shù)據(jù)類型。 基本數(shù)據(jù)類...

    jsyzchen 評論0 收藏0
  • 拷貝拷貝

    摘要:二淺拷貝與深拷貝深拷貝和淺拷貝是只針對和這樣的引用數(shù)據(jù)類型的。淺拷貝是按位拷貝對象,它會創(chuàng)建一個新對象,這個對象有著原始對象屬性值的一份精確拷貝。對于字符串數(shù)字及布爾值來說不是或者對象,會拷貝這些值到新的數(shù)組里。 一、數(shù)據(jù)類型 數(shù)據(jù)分為基本數(shù)據(jù)類型(String, Number, Boolean, Null, Undefined,Symbol)和對象數(shù)據(jù)類型。 基本數(shù)據(jù)類型的特點:直...

    hzc 評論0 收藏0
  • 拷貝拷貝

    摘要:二淺拷貝與深拷貝深拷貝和淺拷貝是只針對和這樣的引用數(shù)據(jù)類型的。淺拷貝是按位拷貝對象,它會創(chuàng)建一個新對象,這個對象有著原始對象屬性值的一份精確拷貝。對于字符串數(shù)字及布爾值來說不是或者對象,會拷貝這些值到新的數(shù)組里。 一、數(shù)據(jù)類型 數(shù)據(jù)分為基本數(shù)據(jù)類型(String, Number, Boolean, Null, Undefined,Symbol)和對象數(shù)據(jù)類型。 基本數(shù)據(jù)類型的特點:直...

    史占廣 評論0 收藏0
  • 重新梳理下js中的拷貝和淺拷貝

    摘要:參考鏈接淺拷貝最簡單的淺拷貝就賦值。所謂的淺拷貝就是,后面的對象和前面的對象在第一層數(shù)據(jù)結構中指向同一個堆地址。但是如果前面的數(shù)據(jù)不止有一層,如此時,使用和方式實現(xiàn)的都是淺拷貝。深拷貝管你怎么變,互不影響。 參考鏈接:http://www.cnblogs.com/st-les...https://blog.csdn.net/hj7jay/... 淺拷貝: 1.最簡單的淺拷貝就賦值。由于...

    kun_jian 評論0 收藏0
  • 對象的常用方法以及對象的拷貝

    摘要:淺拷貝是按位拷貝對象,它會創(chuàng)建一個新對象,這個對象有著原始對象屬性值的一份精確拷貝。兩個對象引用都引用了同一個對象。對于字符串數(shù)字及布爾值來說不是或者對象,會拷貝這些值到新的數(shù)組里。 1、對象的理解 對象是一個包含相關數(shù)據(jù)和方法的集合(通常由一些變量和函數(shù)組成,我們稱之為對象里面的屬性和方法) 1.1 對象可以看成是Object對象構造出來的 showImg(https://user...

    xfee 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<