第一章:JavaScript函數基礎知識回顧

目錄

內部屬性

基本類型和引用類型

全局函數

案例練習

刪除確認提示框

動態創建元素

動態添加事件

防止按鈕連擊

綜合練習


這一章我們主要來回顧函數的一些基礎知識和鞏固一些簡單的案例。

內部屬性

  • arguments.length 檢測函數的參數(實參)個數
  • 在函數外部使用this,就指的是window對象
  • 全局變量可以看做window對象的屬性
<script type="text/javascript">
		function sum() {
			alert(arguments.length);
			var result=0;
			for(var i=0;i<arguments.length;i++){
			  	result+=arguments[i]
			}
			return result;
		}
		alert(sum(12,3,5,10,5,3))
</script>
    <script>
		//在函數外部使用this,this就指的是window對象
		alert(this)

		//全局變量可以看做window對象的屬性
		var x=1;
		alert(window.x)
		alert(this.x)
		
	</script>

基本類型和引用類型

  • 基本類型值有:undefined,NUll,Boolean,Number和String
    • 這些類型分別在內存中佔有固定的大小空間,例如:數值型在內存中佔有八個字節,布爾值只佔有一個字節......
      他們的值保存在棧空間,我們通過
      按值來訪問的。
  • 引用類型:對象、數組、函數
    • 引用類型內存中佔有的空間不固定,但是內存地址大小是固定的,因此存儲的實際上是數據的內存地址

所以,在變量複製時候,基本類型複製的是值本身,而引用類型複製的是地址。另外,函數的參數都是按值傳遞的。

全局函數

全局函數和屬性可用於所有內建的 JavaScript 對象。全局函數又叫頂層函數或系統函數。

  • parseInt() 函數可解析一個字符串,並返回一個整數。
  • parseFloat() 函數可解析一個字符串,並返回一個浮點數。
  • isNaN() 函數用於檢查其參數是否是非數字值。
  • String() 函數把對象的值轉換爲字符串。
  • Number() 把對象的值轉換爲數字。
  • eval() 函數可計算某個字符串,並執行其中的的 JavaScript 代碼。(該方法只接受字符串作爲參數,要計算的字符串中必須含有要計算的 JavaScript 表達式或要執行的語句。
  • escape() 對字符串進行編碼。
    • 返回值:已編碼的 string 的副本。其中某些字符被替換成了十六進制的轉義序列。
    • 該方法不會對 ASCII 字母和數字進行編碼,也不會對下面這些 ASCII 標點符號進行編碼: * @ - _ + . / 。其他所有的字符都會被轉義序列替換。
  • unescape() 對由 escape() 編碼的字符串進行解碼。
  • encodeURI() 把字符串編碼爲 URI。(URI :Uniform Resource Identifier,統一資源標識符
  • decodeURI() 解碼某個編碼的 URI。
  • decodeURIComponent() 解碼一個編碼的 URI 組件。
  • encodeURIComponent() 把字符串編碼爲 URI 組件。

三種編碼方式的區別:

  1. escape不編碼字符有69個:*,+,-,.,/,@,_,0-9,a-z,A-Z(主要是爲了防止特殊字符造成計算錯誤時候應用
  2. encodeURI不編碼字符有82個:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z(防止特殊字符串造成URI的傳遞錯誤,一般用於頁面跳轉的時候。
  3. encodeURIComponent不編碼字符有71個:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z(防止URI參數中特殊字符串造成參數讀取錯誤,一般用來傳遞參數。

isFinite() 檢查某個值是否爲無窮大的數:如果 number 是有限數字(或可轉換爲有限數字),那麼返回 true。否則,如果 number 是 NaN(非數字),或者是正、負無窮大的數,則返回 false。

  • Infinity無窮大(系統定義常量)
  • -Infinity無窮小(系統定義常量)

案例練習

刪除確認提示框

防止用戶小心單擊了“刪除”按鈕,在用戶單擊“刪除”按鈕後,給出一個提示,讓用戶確認此次操作是否正確。

    <input id="Button1" type="button" value="刪除" οnclick="del()"><br>
	<script>
	        //var r=confirm("確實要刪除嗎?")
		    function del(){
			    if(confirm("確實要刪除嗎?")){
				    alert("已經刪除!");
			    }else{
				    alert("已經取消了刪除操作");
			     }
		  }
	</script>

動態創建元素

通過JS的DOM對象,實現元素的動態創建。

  • createElement() 通過指定名稱創建一個元素,是DOM對象創建元素的方法,創建完元素後,指定元素的類型、值和方法,最後使用“appendChild”方法,將元素添加到body中。
  • appendChild() 方法向節點添加最後一個子節點。
  • 及時解除不再使用的變量引用,即將其賦值爲 null。
    <input id="Button1" type="button" value="刪除" οnclick="del()"><br>
	<input id="Button2" type="button" value=" 測試" οnclick="addInput()"> <br>
	<script type="text/javascript">
		var i=0;
		function addInput(){
			//使用DOM的創建元素方法
			var o=document.createElement("input"); 
			o.type = "button" ; 
			o.value = "按鈕" + i++ ;
			o.addEventListener("click",addInput);   
			document.body.appendChild(o);
			o = null;//及時解除不再使用的變量引用,即將其賦值爲 null;  
		}
		addInput() 
	</script>

動態添加事件

前一個案例是如何在網頁中動態添加元素,有時候我們需要添加事件。有時候需要動態的爲元素添加事件。重點是如何爲元素綁定事件。綁定元素時需要知道此元素的唯一標識(ID或Name)。

<input id="Button1" type="button" value="Button1">
<input id="Button2" type="button" value="動態添加事件" οnclick="addClick(Button1)">
<script type="text/javascript">
     //添加事件的參數,參數爲元素的標識
	function addClick(obj){
		obj.οnclick=function(){
			alert('動態添加事件成功 ');
		}
	}
</script>

防止按鈕連擊

當頁面提交的數據特別多時,頁面會反應比較遲鈍,此時如果用戶等不及而連續單擊按鈕,就會導致數據重複提交。所以這個案例就是爲了防止數據重複提交。重點是如何判斷頁面的狀態。

readyState 屬性返回當前文檔的狀態,該屬性返回以下值:

  • uninitialized - 還未開始載入
  • loading - 載入中
  • interactive - 已加載,文檔與用戶可以開始交互
  • complete - 載入完成
<input type=button value="提交" onClick="check()">
<script type="text/javascript">
	function check(){
		if (window.document.readyState == 'complete'){
			alert("加載完畢,可以繼續"); 
			return true;
		}else{
			alert("正在處理,請等待!");
			return false; 
		}
	}
</script>

綜合練習

現在我們開始一個綜合性的練習,除了們JS知識外,還用到了HTML的表格,表單等相關知識。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<style type="text/css">
			table{
				margin: 20px auto;
				border: 2px solid orange;
			}
			select,input{
				width: 200px;
				height: 40px;
				font-size: 18px;
			}
			[type=radio]{
				width: 30px;
				height: 30px;
			}
			[type=submit],[type=reset]{
				width: 100px;
				border-radius: 25px;
				font-size: 20px;
				outline: none;
			}
			td{
				height: 40px;
				line-height: 40px;
				padding: 5px;
				width: 200px;
				background: rgba(100,50,10,0.3);
				text-align: left;
				font-size: 24px;
			}
			.right{
				text-align: right;
				width: 150px;
			}
			input:focus{
				background: rgba(0,150,25,0.3);
			}
		</style>
	</head>
	<body>
		<table>
			<tr>
				<td class="right" >用戶名:</td>
				<td><input type="text" id="st1"></td>
			</tr>
			<tr>
				<td class="right">聯繫電話:</td>
				<td><input type="text" id="st2"></td>
			</tr>
			<tr>
				<td class="right">密碼:</td>
				<td><input type="text" id="st3"></td>
			</tr>
			<tr>
				<td class="right">確認密碼:</td>
				<td><input type="text" id="st4" οnblur="check()"></td>
			</tr>
			<tr>
				<td class="right">性別:</td>
				<td>
					<input type="radio" name="sex" id="sex1">男
					<input type="radio" name="sex" id="sex2">女
				</td>
			</tr>
			<tr>
				<td class="right">學歷:</td>
				<td>
					<select id="select">
						<option value="高中">高中</option>
						<option value="大專">大專</option>
						<option value="本科">本科</option>
						<option value="本科以上">本科以上</option>
					</select>
				</td>
			</tr>
			<tr>
				<td colspan="2" style="text-align: center;">
					<input type="submit" value="提交" οnclick="test()">
					<input type="reset" value="重置">
				</td>
			</tr>
		</table>
		<script type="text/javascript">
			function $(x){//自定義通過id獲取元素的函數
				return document.getElementById(x);
			}
			function check(){
				if($('st3').value==$('st4').value){
					return true;
				}else{
					alert('密碼不正確!');
				}
			}
			function test(){
				var str='';
				str+="\n用戶名:";
				str+=$('st1').value;
				str+="\n聯繫電話:"
				str+=$('st2').value;
				str+='\n性別:';
				str+=$('sex1').checked?'男':'女'
				str+='\n 學歷:';
				str+=$('select').value;
				alert('用戶信息:\n'+str);
			}
		</script>
	</body>
</html>

 

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