JS資料型別 深淺拷貝

2021-09-24 03:49:24 字數 3326 閱讀 1428

1.基本資料型別有numberstringbooleannullundefinedsymbol(es6新增的),也稱原始資料型別

2.js有原始值型別引用值型別

var str =

"hello"

;str[0]

="z"

;//無法修改

3.js記憶體分為堆記憶體和棧記憶體,棧記憶體儲存的都是有固定大小、空間的內容。堆記憶體中儲存的都是不固定的內容。

4.二者區別

var a =10;

var b = a;

//將a的值賦給b

b =20

;console.

log(a)

;// 10

console.

log(b)

;// 20

基本資料型別賦值過程:

來自博主:cc_ccc

var obj =

newobject()

;obj.name =

"孫悟空"

;var obj2 = obj;

obj2.name =

"豬八戒"

;console.

log(obj.name)

;//豬八戒

console.

log(obj2.name)

;//豬八戒

引用資料型別賦值過程:

來自博主:cc_ccc

5.如果兩個物件一模一樣,但也還是兩個物件

6.null不是引用資料型別,是基本資料型別。

1.深拷貝: 修改新變數的值不會影響原有變數的值,預設情況下基本資料型別都是深拷貝

let num1 =

123;

let num2 = num1;

num2 =

666;

// 修改新變數的值

console.

log(num1)

;//123

console.

log(num2);/

666

2.淺拷貝:修改新變數的值會影響原有的變數的值,預設情況下引用型別都是淺拷貝。

class

person

let p1 =

newperson()

;let p2 = p1;

p2.name =

"wdhj"

;//修改p2的值影響了p1的值

console.

log(p2.name)

;//wdhj

console.

log(p1.name)

;//wdhj

當引用資料型別中儲存的都是基本資料型別時1.方法一(不好)

class

person

let p1 =

newperson()

;let p2 =

newperson()

;//因為p1裡面的屬性都是基本資料型別,所以可以取出p1的name賦值給p2

p2.name = p1.name;

p2.age = p1.age;

p2.name =

"mhf"

; p2.age =20;

console.

log(p1.name)

;//mss

console.

log(p2.name)

;//mhf

2.方法二(不好)

class

person

let p1 =

newperson()

;let p2 =

newperson()

;for

(let key in p1)

p2.name =

"mhf"

; console.

log(p1.name)

;//mss

console.

log(p2.name)

;//mhf

3.方法三(重點)

class

person

let p1 =

newperson()

;let p2 =

newperson()

; object.

assign

(p2,p1)

; p2.name =

"mhf"

; console.

log(p1.name)

;//mss

console.

log(p2.name)

;//mhf

以上三種方法並不能實現真正意義上的深拷貝,因為物件中儲存的都是基本資料型別

當引用資料型別中儲存的都是引用資料型別時

class

person

; scores =[1

,2,3

];}let p1 =

newperson()

;let p2 =

newperson()

;deepcopy

(p2,p1)

;//呼叫deepcopy函式

p2.cat.age =

666;

//修改p2中cat的age屬性

console.

log(p1.cat.age)

;//3

//p2的修改並沒有導致p1的變化

console.

log(p2.cat.age)

;//666

function

deepcopy

(target,source)

else

}}

js的資料型別判斷和深 淺拷貝的理解

18.12.26 js的資料型別分為基本資料型別和引用資料型別。基本資料型別包括五個number,string,boolean,undefined,null。引用資料型別就有很多如array,object,function等等。判斷資料型別有以下三個方法 一,typeof 使用var a var b...

JS深 淺拷貝

在js中,資料型別分為基本資料型別和引用資料型別兩種。對於基本資料型別來說,它的值直接儲存在棧記憶體中,而對於引用型別來說,它在棧記憶體中只是儲存了乙個指向對記憶體的引用,而真正的資料儲存在堆記憶體中。object array 這兩個就是引用型別,當我門直接去拷貝的話 copyobj obj 拷貝的...

js 深淺拷貝

深拷貝就是複製內部內容 淺拷貝就是複製記憶體位址 var obj 淺拷貝 引用傳遞 淺拷貝就是賦值,將鑰匙複製乙份 var o obj 深拷貝 內部內容複製乙份 將房子複製乙份 方法一 var str json stringify obj var obj3 json parse str 方法二 va...