1.基本資料型別有number,string,boolean,null,undefined,symbol(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...