js基礎篇(5)對象和函數

1.對象(Object)

- 對象是JS中的引用數據類型
	- 對象是一種複合數據類型,在對象中可以保存多個不同數據類型的屬性
	- 使用typeof檢查一個對象時,會返回object
	- 創建對象
		- 方式一:
			- var obj = new Object();
		- 方式二:
			- var obj = {};
			
	- 向對象中添加屬性
		- 語法:
			對象.屬性名 = 屬性值;
			對象["屬性名"] = 屬性值;
			
			- 對象的屬性名沒有任何要求,不需要遵守標識符的規範,
				但是在開發中,儘量按照標識符的要求去寫。
			- 屬性值也可以任意的數據類型。

	- 讀取對象中的屬性
		- 語法:
			對象.屬性名
			對象["屬性名"]
		- 如果讀取一個對象中沒有的屬性,它不會報錯,而是返回一個undefined
		
	- 刪除對象中的屬性
		- 語法:
			delete 對象.屬性名
			delete 對象["屬性名"]
			
	- 使用in檢查對象中是否含有指定屬性
		- 語法:"屬性名" in 對象
			- 如果在對象中含有該屬性,則返回true
				如果沒有則返回false
				
	- 使用對象字面量,在創建對象時直接向對象中添加屬性
		語法:
			var obj = {
							屬性名:屬性值,
							屬性名:屬性值,
							屬性名:屬性值,
							屬性名:屬性值
					}
					

eg:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<script type="text/javascript">
			
			/*
			 * 創建一個對象
			 */
			var obj = new Object();
			
			//向對象中添加屬性
			obj.name = "孫悟空";
			obj.age = 18;
			
			//對象的屬性值可以是任何的數據類型,也可以是個函數
			obj.sayName = function(){
				console.log(obj.name);
			};
			
			function fun(){
				console.log(obj.name);
			};
			
			//console.log(obj.sayName);
			//調方法
			obj.sayName();
			//調函數
			//fun();
			
			/*
			 * 函數也可以稱爲對象的屬性,
			 * 	如果一個函數作爲一個對象的屬性保存,
			 * 	那麼我們稱這個函數時這個對象的方法
			 * 	調用這個函數就說調用對象的方法(method)
			 * 
			 * 但是它只是名稱上的區別沒有其他的區別
			 * 
			 */
			
			var obj2 = {
				
				name:"豬八戒",
				age:18,
				sayName:function(){
					console.log(obj2.name);
				}
				
			};
			
			obj2.sayName();
			
			
			
		</script>
	</head>
	<body>
	</body>
</html>

	- 基本數據類型和引用數據類型
		- 基本數據類型
			String Number Boolean Null Undefined
		- 引用數據類型
			Object
		- 基本數據類型的數據,變量是直接保存的它的值。
			變量與變量之間是互相獨立的,修改一個變量不會影響其他的變量。
		- 引用數據類型的數據,變量是保存的對象的引用(內存地址)。
			如果多個變量指向的是同一個對象,此時修改一個變量的屬性,會影響其他的變量。
		- 比較兩個變量時,對於基本數據類型,比較的就是值,
			對於引用數據類型比較的是地址,地址相同才相同
			

2.函數(Function)

- 函數也是一個對象,也具有普通對象的功能 - 函數中可以封裝一些代碼,在需要的時候可以去調用函數來執行這些代碼 - 使用typeof檢查一個函數時會返回function - 創建函數 - 函數聲明 function 函數名([形參1,形參2...形參N]){ 語句... } - 函數表達式 var 函數名 = function([形參1,形參2...形參N]){ 語句... }; eg: - 調用函數 - 語法:函數對象([實參1,實參2...實參N]); fun() sum() alert() Number() parseInt() - 當我們調用函數時,函數中封裝的代碼會按照編寫的順序執行 - 形參和實參 - 形參:形式參數 - 定義函數時,可以在()中定義一個或多個形參,形參之間使用,隔開 定義形參就相當於在函數內聲明瞭對應的變量但是並不賦值, 形參會在調用時才賦值。 - 實參:實際參數 - 調用函數時,可以在()傳遞實參,傳遞的實參會賦值給對應的形參, 調用函數時JS解析器不會檢查實參的類型和個數,可以傳遞任意數據類型的值。 如果實參的數量大於形參,多餘實參將不會賦值, 如果實參的數量小於形參,則沒有對應實參的形參將會賦值undefined

eg:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<script type="text/javascript">
			
			/*
			 * 函數作用域	
			 * 	- 調用函數時創建函數作用域,函數執行完畢以後,函數作用域銷燬
			 * 	- 每調用一次函數就會創建一個新的函數作用域,他們之間是互相獨立的
			 * 	- 在函數作用域中可以訪問到全局作用域的變量
			 * 		在全局作用域中無法訪問到函數作用域的變量
			 * 	- 當在函數作用域操作一個變量時,它會先在自身作用域中尋找,如果有就直接使用
			 * 		如果沒有則向上一級作用域中尋找,直到找到全局作用域,
			 * 		如果全局作用域中依然沒有找到,則會報錯ReferenceError
			 * 	- 在函數中要訪問全局變量可以使用window對象
			 */
			
			//創建一個變量
			var a = 10;
			
			function fun(){
				
				var a = "我是fun函數中的變量a";
				var b = 20;
				
				//console.log("a = "+a);
				
				function fun2(){
					console.log("a = "+window.a);
				}
				
				fun2();
				
			}
			
			//fun();
			//console.log("b = "+b);
			
			/*
			 * 在函數作用域也有聲明提前的特性,
			 * 	使用var關鍵字聲明的變量,會在函數中所有的代碼執行之前被聲明
			 * 	函數聲明也會在函數中所有的代碼執行之前執行
			 */
			
			function fun3(){
				
				fun4();
				
				//console.log(a);
				
				var a = 35;
				
				function fun4(){
					alert("I'm fun4");
				}
				
			}
			
			//fun3();
			
			
			var c = 33;
			
			/*
			 * 在函數中,不適用var聲明的變量都會成爲全局變量
			 */
			function fun5(){
				//console.log("c = "+c);
				//c = 10;
				
				//d沒有使用var關鍵字,則會設置爲全局變量
				d = 100;
			}
			
			fun5();
			
			//在全局輸出c
			//console.log("d = "+d);
			
			var e = 23;
			
			/*
			 * 定義形參就相當於在函數作用域中聲明瞭變量
			 */
			function fun6(e){
				alert(e);
			}
			
			fun6();
			
			
			
		</script>
	</head>
	<body>
	</body>
</html>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章