国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

JS中實現淺拷貝和深拷貝的代碼詳解

2024-05-06 15:38:22
字體:
來源:轉載
供稿:網友

(一)JS中基本類型和引用類型

JavaScript的變量中包含兩種類型的值:基本類型值 和 引用類型值,在內存中的表現形式在于:前者是存儲在棧中的一些簡單的數據段,后者則是保存在堆內存中的一個對象。

基本類型值

在JavaScript中基本數據類型有 String , Number , Undefined , Null , Boolean ,在ES6中,又定義了一種新的基本數據類型 Symbol ,所以一共有6種。

基本類型是按值訪問的,從一個變量復制基本類型的值到另一個變量后,這兩個變量的值是完全獨立的,即使一個變量改變了也不會影響到第二個變量。

var str1 = '撩課';var str2 = str1;str2 = 'itlike';console.log(str2); //'itlike'console.log(str1); //'撩課'

引用類型值

引用類型值是引用類型的實例,它是保存在堆內存中的一個對象,引用類型是一種數據結構,最常用的是Object,Array,Function類型,此外還有Date,RegExp,Error等。

在ES6中提供了Set,Map2種新的數據結構。

(二)JS中如何復制引用類型的

基本類型和引用類型賦值的差異化
舉個例子:在下面代碼中,只修改了obj1中的name屬性,卻同時改變了ob1和obj2中的name屬性。

var obj1 = {'name': '撩課'};var obj2 = obj1;obj2.name = '小撩';console.log(obj1); // {'name': '撩課'}console.log(obj2); // {'name': '撩課'}

當變量復制引用類型值的時候,同樣和基本類型值一樣會將變量的值復制到新變量上,不同的是對于變量的值,它是一個指針,指向存儲在堆內存中的對象。

因為,在JS中,堆內存中的對象無法直接訪問,必須要訪問這個對象在堆內存中的地址,然后再按照這個地址去獲得這個對象中的值。

(三)淺拷貝

在JS中,如果屬性是基本類型,拷貝的就是基本類型的值;如果屬性是引用類型,拷貝的就是內存地址;所以如果其中一個對象改變了這個地址,就會影響到另一個對象。

下面是JavaScript提供的淺拷貝方法:

Object.assign

ES6中拷貝對象的方法,接受的第一個參數是拷貝的目標,剩下的參數是拷貝的源對象;

語法:Object.assign(target, ...sources)

var p = {  'name': '張三',};var copyP = {};Object.assign(copyP, p);console.log(copyP);console.log(p);

Object.assign是一個淺拷貝,它只是在根屬性(對象的第一層級)創建了一個新的對象,但是如果屬性的值是對象的話,只會拷貝一份相同的內存地址。

擴展運算符

利用擴展運算符可以在構造字面量對象時,進行克隆或者屬性拷貝。語法如下:

var cloneObj = { ...obj };var obj = {'name': '撩課', 'college': ['H5','JAVA','Python']}var obj2 = {...obj};obj.name='小撩';//{'name': '小撩', 'college': ['H5','JAVA','Python']}console.log(obj);//{'name': '撩課', 'college': ['H5','JAVA','Python']}console.log(obj2); obj.college.push('Go');//{'name': '小撩', 'college': ['H5','JAVA','Python','Go']}console.log(obj); //{'name': '小撩', 'college': ['H5','JAVA','Python','Go']}console.log(obj2);            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 抚顺县| 弥渡县| 碌曲县| 皮山县| 江口县| 大埔县| 宜兰县| 博野县| 温州市| 临澧县| 昔阳县| 锡林郭勒盟| 义马市| 太保市| 大渡口区| 攀枝花市| 陆丰市| 天气| 呈贡县| 南安市| 邯郸县| 滨海县| 思南县| 子长县| 云和县| 开平市| 张掖市| 永年县| 定边县| 莱阳市| 齐河县| 富阳市| 屏边| 白沙| 军事| 郸城县| 广东省| 麟游县| 娄烦县| 滦平县| 湟源县|