JavaScript簡單數據類型和複雜數據類型詳解

一,簡單類型又叫做基本數據類型或者值類型,複雜類型又叫做引用類型。

1.值類型:簡單數據類型/基本數據類型,在存儲時變量中存儲的是值本身,因此叫做值類型string,number,boolean,undefined,null

2.引用類型:複雜數據類型,在存儲時變量中存儲的僅僅是地址(引用),因此叫做引用數據類型通過new關鍵字創建的對象(系統對象、自定義對象),如Object、Array、Date等

二,堆棧空間分配區別:

1、棧(操作系統):由操作系統自動分配釋放存放函數的參數值、局部變量的值等。其操作方式類似於數據結構中的棧。簡單數據類型存放到棧裏面
2、堆(操作系統):存儲複雜類型(對象),一般由程序員分配釋放,若程序員不釋放,由垃圾回收機制回收。複雜數據類型存放到堆裏面

注意:JavaScript中沒有堆棧的概念,通過堆棧的方式,可以讓大家更容易理解代碼的一些執行方式,便於將來學習其他語言。(只是隱含堆和棧的功能)

三,簡單類型的內存分配

      一.值類型(簡單數據類型):string,number,boolean,undefined,null
      二.值類型變量的數據直接存放在變量(棧空間)中
在這裏插入圖片描述

四,複雜類型的內存分配

      一.引用類型(複雜數據類型):通過new關鍵字創建的對象(系統對象、自定義對象),如Object、Array、Date等
      二.引用類型變量(棧空間)裏存放的是地址,真正的對象實例存放在堆空間中
在這裏插入圖片描述
下圖是兩個的詳細辨析
在這裏插入圖片描述

五,簡單類型傳參

函數的形參也可以看做是一個變量,當我們把一個值類型變量作爲參數傳給函數的形參時,其實是把變量在棧空間裏的值複製了一份給形參,那麼在方法內部對形參做任何修改,都不會影響到的外部變量。

下面我們放兩個例子

// 第一個
var num = 10;
num = 20;
console.log(num);

-----------------------
// 第二個
function fn(a){
	a++; 
	console.log(a); 
}
varx = 10; 
fn(x); 
console.log(x);

在這裏插入圖片描述

六,複雜類型傳參

函數的形參也可以看做是一個變量,當我們把引用類型變量傳給形參時,其實是把變量在棧空間裏保存的堆地址複製給了形參,形參和實參其實保存的是同一個堆地址,所以操作的是同一個對象。

function Person(name){
	this.name = name;
}
function f1(x){ // x=p 
	console.log(x.name); // 2.這個輸出什麼?
	x.name = "張學友";
	console.log(x.name); // 3.這個輸出什麼?
}
var p=new Person("劉德華"); 
console.log(p.name); // 1,這個輸出什麼?
f1(p);
console.1og(p.name); // 4.這個輸出什麼?

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章