1. 程式人生 > >JavaScript程式設計用法——JavaScript語法

JavaScript程式設計用法——JavaScript語法

判斷符號===

JavaScript的判斷符號“=”既比較型別也比較數值,然而“”只比較值,在不同型別的比較中“==”會將數值轉換成同一型別進行比較。

原始碼

function js_var_cmp(){

	console.log("cmp 1 == '1' is " +(1 == '1'));
	console.log("cmp 1 === '1' is " +(1 === '1'));

	console.log("cmp 1 == true is " +(1 == true));
	console.log("cmp 1 === true is " +(1 === true));

	console.log("cmp NaN == NaN is " +(NaN == NaN));
	console.log("cmp NaN === NaN is " +(NaN === NaN));

	console.log("cmp null == undefined is " +(null == undefined));
	console.log("cmp null === undefined is " +(null === undefined));
}

執行結果

在這裡插入圖片描述

數值的特殊變數NaN在任何時候都與其他值不等,包括自己。

變數

變數定義

js為解釋性語言,變數型別不區分int、float甚至字串,類等型別。定義型別都可以通過關鍵字var定義,具體是確定初始化的是相應的型別,直譯器就會賦予該相應的型別。

原始碼

function js_var_test(){ 
	
	var strtest = "string ";
	var chartest = ' A ';
	var istest = 3;
	var fpai = 3.14159;
	var strout = chartest + 'top ' + strtest  + istest + " pai = " + fpai;

	document.write(fpai + "<br/>");	
	document.write(strout);
}

執行結果 在這裡插入圖片描述

""在document.write中是換行。

可以看到,字串定義用單引號’ '和雙引號" "都可以,但為保持程式碼的完整性,字串和字元的賦值遵循C/C++的用法。

獲取變數定義符號:typeof

呼叫該運算子,會將變數的資訊當做字串返回,用於判斷型別值。修飾可以新增括號也可以省略。 返回值型別:string,number,boolean,object,function,undefined

原始碼

function js_value_typeof(){ 
	
	var strtest = "string";
	var fpai = 3.14159;
	var istrue = true;
	var arraytest = ["zx",6.626E-34,'B',8];
	var stTest = {
		siindex: 1,
		strname: "ZX Test",
		sinum: 2.71828,
		
		functest: function stfunc(){ return true;}
	};
	var funcTest = function(){
		return "function";
	}

	console.log(typeof strtest);
	console.log(typeof(fpai));
	console.log(typeof istrue);
	console.log(typeof arraytest);
	console.log(typeof(stTest));
	console.log(typeof(funcTest));
	console.log(typeof(undfinevalue));
	console.log(typeof(NaN));
	console.log(typeof(null));
	console.log(typeof(undefined));}

執行結果

在這裡插入圖片描述

對於陣列、定義的混合物件以及null,都返回object字串。未定義的變數返回undefined。但NaN返回number字串。

陣列定義

陣列型別用var定義,初始化不用定義陣列長度,根據賦值的數量自動定義陣列長度,當然陣列長度可以改變。

原始碼

function js_var_array(){
	var isarray = [6,3.14,"String"];
	
	console.log("array length is " + isarray.length);
	for(var i = 0; i < isarray.length; ++i){
		console.log(isarray[i]);
	}
	
	isarray[2] = "ZX Test";
	console.log(isarray[2]);
}

執行結果 在這裡插入圖片描述

陣列長度:length

陣列長度在函式中可變,可以增長也可以截斷,增長未初始化的元素用undefined填充。但為保持程式碼的安全性與可控性,禁止在任何時候直接改變一個已經定義的陣列長度,與C/C++保持一致,防止陣列訪問越界。但可以通過push、pop等增減元素。

原始碼

function js_var_array_length(){
	
	var isarray = [6,3.14,"String"];	
	isarray[6] = "ZX Test";
	
	console.log("*********************************");
	console.log("array length is " + isarray.length);
	for(var i = 0; i < isarray.length; ++i){
		console.log(isarray[i]);
	}
	
	console.log("*********************************");
	isarray.length = 10;
	console.log("array length is " + isarray.length);
	for(var i = 0; i < isarray.length; ++i){
		console.log(isarray[i]);
	}	
	
	console.log("*********************************");
	isarray.length = 2;
	console.log("array length is " + isarray.length);
	for(var i = 0; i < isarray.length; ++i){
		console.log(isarray[i]);
	}	
}

執行結果 在這裡插入圖片描述

陣列搜尋:indexOf

陣列下標通過indexOf搜尋陣列,並返回該元素的陣列下標,若沒有搜尋到,則返回-1,。 原始碼

function js_var_array_indexOf(){
	
	var isarray = [6,3.14,"String"];
	
	console.log(isarray[2] + " index is " + isarray.indexOf(isarray[2]));
	
	console.log("Failed index is " + isarray.indexOf("ZX test"));
}

執行結果 在這裡插入圖片描述

陣列堆疊與出棧:push,pop

使用方法與C類似,對陣列進行棧型別操作,操作後會改變陣列長度。

原始碼

function js_var_array_push_pop(){
	
	var isarray = [6,3.14,"String"];

	console.log("*********************************");
	console.log("new array is " + isarray.push(1.41,"ZX Test"));
	console.log("array length is " + isarray.length);
	for(var i = 0; i < isarray.length; ++i){
		console.log(isarray[i]);
	}
	
	console.log("*********************************");
	var islength = isarray.length
	for(var i = 0; i < islength; ++i){
		console.log("new value = " + isarray.pop());
		
	}	
	
	console.log("array length is " + isarray.length);
}

執行結果 在這裡插入圖片描述

元素連線:join

將陣列的元素通過join的連線符連線在一起返回的是一個字串

原始碼

function js_var_array_sort_join(){
	
	var isarray = [12,5,46,28,34];
	
	console.log(isarray.join('-'));
}

執行結果 在這裡插入圖片描述

字串定義

JavaScript中的字元和字串可以用**單引號’ '、雙引號" "和反引號**定義,但保持編碼格式,按照C/C++的標準定義。和C/C++一樣,JavaScript的字串定義後是一個常量,不會被改變。

原始碼

function js_var_string(){
	
	var teststring = "test one\ntest two\ntest three\n";
	
	console.log(teststring);
	
	var newteststring = `new test one
	new test two
	new test three`;
	
	console.log(newteststring);
}

執行結果 在這裡插入圖片描述

字串換行可以通過\n進行,也可以通過反引號結合回車定義字串。但用反引號結合回車進行換行,換行後字串需要頂格,否則tab和空格會直接體現在輸出。

字串連線

通過“+”號進行字串和數字的混合拼接,也可以通過和Makefile語法那樣,通過${name}代替,但要通過反引號字串定義才有效。

原始碼

function js_var_string_join(){
	
	var strtest = "string ";
	var charname = ' A ';
	var isnum = 3;
	var fpai = 3.14159;
	
	var straddjoin = charname + "top " + strtest  + isnum + " pai = " + fpai;
	var strvarjoin = `${charname}top ${strtest}${isnum} pai = ${fpai}`;
	
	console.log(straddjoin + "\nlength is = " + straddjoin.length);
	console.log(strvarjoin + "\nlength is = " + straddjoin.length);
}

執行結果 在這裡插入圖片描述

大小寫轉換:toUpperCase、toLowerCase

toUpperCase:將字串轉換為大寫 toLowerCase:將字串轉換為小寫

原始碼

function js_var_string_Upper_Lower(){
	
	var teststring = "This is ZX Test";

	console.log(teststring.toUpperCase());
	console.log(teststring.toLowerCase());
}

執行結果 在這裡插入圖片描述

結構體定義

結構體定義與Linux驅動結構體賦值類似,結構體可以直接輸出。

原始碼

function js_var_struct(){
	
	var stTest = {
		siindex: 1,
		strname: "ZX Test",
		strclass: "One",
	};
	
	console.log(`index is ${stTest.siindex},name is ${stTest.strname},class is ${stTest.strclass}`);
	console.log(stTest);
}

執行結果 在這裡插入圖片描述

結構體操作

JavaScript的結構體支援動態操作,即可以在程式碼中改變結構體的結構組成。但和陣列操作一樣,為保持程式碼的安全性與可控性,禁止在任何時候直接改變一個已經定義的結構體結構。

原始碼

function js_var_struct_operation(){
	
	var stTest = {
		siindex: 1,
		strname: "ZX Test",
		strclass: "One",
	};
	
	stTest.num = 12.34;		//新增一項屬性
	delete stTest.strclass;		//刪除一項屬性
	
	console.log(stTest);
}

執行結果 在這裡插入圖片描述

日期

JavaScript通過函式獲取當前時間。

在JavaScript獲取的月份從0開始算起,因此月份要加1才顯示正確。

原始碼

	var Times = new Date();

	//獲取當前日期
	console.log(Times);	
	//顯示年月日
	console.log(Times.getFullYear() + "-" + (Times.getMonth() + 1) + "-" + Times.getDate());
	//獲取星期,星期日為 0
	console.log(Times.getDay());		
	//顯示時分秒
	console.log(Times.getHours() + ":" + Times.getMinutes() + ":" + Times.getSeconds());
	//1970年1月1日到當前的秒數
	console.log("seconds is " + Times.getTime());	
	console.log(Times.toUTCString());

執行結果 在這裡插入圖片描述

在網頁上建立一個時鐘顯示

原始碼

<html>
	<head>
		<title> ZX test title </title>
		<p id = "ShowTime"></p>
		<script>

			function js_nowtime(){
				var Times = new Date();
				function showzero(value){
					if(10 < value)
						return value;
					else
						return '0' + value;
				}
				
				var showdate = Times.getFullYear() + "-";
				showdate += (Times.getMonth() + 1) + "-";
				showdate += Times.getDate() + "   ";
				
				var showtimes = showzero(Times.getHours()) + ":"; 
				showtimes += showzero(Times.getMinutes()) + ":"; 
				showtimes += showzero(Times.getSeconds());
				
				//將時間顯示到標籤ShowTime上
				document.getElementById('ShowTime').innerHTML = showdate + showtimes;
			}
			
				function js_showtime(){
				js_nowtime();
				setTimeout('js_nowtime()',1000);
			} 

		</script>
	</head>
	<body onload = "js_showtime()" >
	</body>
</html>

執行結果 在這裡插入圖片描述

容器

Set容器

類似C++的vector容器,但裡面的元素不能重複,初始化或新增重複的元素會被合併。

原始碼

function js_var_STL_set(){
	
	var testarray = ['D',3,56,'D',"Test"];
	var tsetset1 = new Set(testarray);
	var tsetset2 = new Set([1,4,7,7,4]);

	console.log(tsetset1);
	console.log(tsetset2);
}

執行結果 在這裡插入圖片描述

新增重複元素或新增新元素,返回值都為set容器本身。刪除元素或刪除未知元素,刪除成功返回true,刪除失敗返回false。

原始碼

function js_var_STL_set_operation(){
	
	var testarray = ['D',3,56,"Test",2.71828];

	var tsetset = new Set(testarray);

	console.log(tsetset.add("ZX Test"));
	console.log(tsetset.add('D'));	//不會新增重複元素

	console.log(tsetset.delete(56));
	console.log(tsetset.delete(4));	

	console.log(tsetset);
}

執行結果 在這裡插入圖片描述

Map容器

用法和C++的map類似,通過key值來尋找內容。 初始化map容器可以用一個二維陣列初始化,也可以一項項新增初始化。map容器的key值不能有重複元素,否則新的值會直接代替舊的值。

原始碼

function js_var_STL_map(){
	
	var arraymap1 = ['D',"D value"];
	var arraymap2 = [3,6];
	var arraymap3 = [3,9];	//重複的key
	var arraymap4 = [56,3.14];
	var arraymap5 = ["string","Test"];

	var tsetmap1 = new Map([arraymap1,arraymap2,arraymap3,arraymap4,arraymap5]);
	var tsetmap2 = new Map([[1,4],["ZX","String Test"]]);

	console.log(tsetmap1);
	console.log(tsetmap2);
}

執行結果 在這裡插入圖片描述

新增重複元素或新增新元素,返回值都為map容器本身,若新增的key是重複的key,則新的value會替換舊的value。

has函式是判斷是否有該key值,成功返回true,失敗false get函式獲取該key值的value,成功返回具體的值,失敗返回undefined。

刪除元素或刪除未知元素,刪除成功返回true,刪除失敗返回false。

原始碼

function js_var_STL_map_operation(){
	
	var arraymap1 = ['D',"D value"];
	var arraymap2 = [3,6];
	var arraymap3 = [56,3.14];
	var arraymap4 = ["string","Test"];

	var tsetmap = new Map([arraymap1,arraymap2,arraymap3,arraymap4]);

	console.log(tsetmap.set(3,9));
	console.log(tsetmap.set('A',46));

	var haskey = 'A';
	console.log("Map has " + haskey + " is "+ tsetmap.has(haskey));
	console.log("Map has " + haskey + " value is "+ tsetmap.get(haskey));

	haskey = 'B';
	console.log("Map has " + haskey + " is "+ tsetmap.has(haskey));
	console.log("Map has " + haskey + " value is "+ tsetmap.get(haskey));

	haskey = "string";
	console.log("Map has " + haskey + " delete is "+ tsetmap.delete(haskey));

	haskey = "test";
	console.log("Map has " + haskey + " delete is "+ tsetmap.delete(haskey));

	console.log(tsetmap);
}

執行結果 在這裡插入圖片描述

解構賦值

定義

在ES6引入的解構賦值,能夠同時對多個變數進行賦值

原始碼

function js_value_init(){
	var [siIndex,strName,siNum,isValue] = [2, "ZX_Test",,1.41];

	console.log("Index = " + siIndex + 
				" Name = " + strName + 
				" Num = " + siNum + 
				" Value = " + isValue);
}

執行結果 在這裡插入圖片描述

賦值可以遺漏,遺漏的賦值變數為undefined。

同時也可以進行隨機指定賦值,但需要用{}而不是[]符號, 原始碼

var {siIndex = 9,strName,siNum,isValue} = {"isValue":1.41,strName:"ZX_Test"};

	console.log("Index = " + siIndex + 
				" Name = " + strName + 
				" Num = " + siNum + 
				" Value = " + isValue);	

執行結果 在這裡插入圖片描述

未賦值的變數會使用初始化值或undefined,變數可以直接引用也可以加""引用。

類賦值

類賦值需要用{}物件限制而不是[]資料進行限制。

原始碼

	var stTest = {
		siindex: 1,
		strname: "ZX Test",
		strclass: "One",
		value:{
			id: 123456,
			key:"CSKE57DH6WE32PM",
		},
	};

	var {siindex,value,strclass:sclass} = stTest;

	console.log("Index = " + siindex + 
				" class = " + sclass +
				" value = " + value);

	console.log(" id = " + value.id);
	console.log(" key = " + value.key);	

執行結果 在這裡插入圖片描述

類的賦值可以按順序同名賦值,也可以不按順序賦值。賦值後同名的變數就賦值為類中對應變數的值,若想賦值的名字不同,例如strclass:sclass,在:後面定義新的變數。對於類與類的賦值,列印引用時需要用.對應相應的變數。

異常處理

JavaScript異常處理關鍵字:try、catch、throw

try	:處理程式碼
throw	:丟擲異常
catch	:捕獲異常

因為JavaScript中變數不分型別,因此拋異常的catch只能有一個

原始碼

	try
	{
		run_function();
	}
	catch(err)
	{
		console.log("Error is " + err.message);
	}

	try
	{
		throw "string error";
	}
	catch(err)
	{
		console.log("Error is " + err);
	}	

執行結果 在這裡插入圖片描述