js學習筆記——8(簡單數據類型與複雜類型)

1.簡單數據類型與複雜數據類型
簡單數據類型又叫做基本數據類型或者值類型,複雜數據類型又叫做引用類型
a.值類型:簡單數據類型/基本數據類型,在存儲時變量中存儲的是值本身,因此叫做值類型;(string, number, boolean, undefined, null)

<script>
		//簡單數據類型  null  返回的是一個空對象 object
		var timer = null;
		console.log(typeof timer);
		//如果有一個變量我們以後打算存儲爲對象,暫時沒想好放啥,這個時候就給 null
</script>

b.引用類型:複雜數據類型,在存儲時變量中存儲的僅僅是地址(引用),因此叫做引用數據類型,通過new關鍵字創建對象(系統對象、自定義對象),如Object、Array、Date等。
2.堆和棧
a.棧(操作系統):由操作系統自動分配釋放存放函數的參數值、局部變量的值等。其操作方式類似於數據結構中的棧;簡單數據類型存放在到棧裏面
b.堆(操作系統):存儲複雜類型(對象),一般由程序員分配釋放,若程序員不釋放,由垃圾回收機制回收。複雜數據類型存放到堆裏面
注意:JavaScript中沒有堆棧的概念,通過堆棧的方式,更容易理解。
3.簡單類型傳參
函數的參數也可以看作是一個變量,當我們把一個值類型變量作爲參數傳給函數的形參時,其實是把變量在棧空間裏面的值複製了一份給形參,那麼在方法內部對形參做任何修改,都不會影響到外部變量。
4.複雜數據類型傳參
函數的形參也可以看作是一個變量,當我們把引用類型變量傳給形參時,其實是把變量在棧空間裏保存的堆地址複製給了形參,形參和實參其實保存的是同一個地址,所以操作的是同一個對象。

<script>
		//複雜數據類型傳參
		function Person(name) {
			this.name = name;
		}
		function f1(x) {
			console.log(x.name);  //2.這個輸出什麼?劉德華
			x.name = '張學友';
			console.log(x.name);  //3.這個輸出什麼?張學友
		}
		var p = new Person("劉德華");
		console.log(p.name);  //1.這個輸出什麼? 劉德華
		f1(p);
		console.log(p.name);  //4.這個輸出什麼?張學友
	</script>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章