国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

jsyzchen / 2758人閱讀

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

前言

對于 數字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)和對象數據類型。 基本數據類...

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

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

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

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

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

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

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

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

    xfee 評論0 收藏0

發表評論

0條評論

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