1. 程式人生 > >JavaScript知識提要

JavaScript知識提要

javascript筆記

一、js的簡介

1、js是什麼
	js是可以嵌入到html中,是 基於物件 和 事件驅動 的 指令碼語言
	特點:
		(1)互動性
		(2)安全性:js不能訪問本地磁碟
		(3)跨平臺:瀏覽器中都具備js解析器
2、js能做什麼
	(1)js能動態的修改(增刪)html和css的程式碼
	(2)能動態的校驗資料
	
3、js歷史及組成
	ECMAScript	BOM(瀏覽器物件模型)  DOM(文件物件模型)	
4、js被引入的方式
	(1)內嵌指令碼
		<input type="button" value="button" onclick="alert('xxx')" />			
	(2)內部指令碼
		<script type="text/javascript">
			alert("xxx");
		</script>
	(3)外部指令碼
		首先先建立一個js檔案
		其次在html中引入
			<script type="text/javascript" src="demo1.js"></script>
	
	js程式碼放在哪?
		放在哪都行 但是在不影響html功能的前提下 越晚載入越好

二、js基本語法

1、變數
	(1)
	var x = 5;
	x = 'javascript';
	var y = "hello";
	var b = true;
	(2)
	x = 5;

2、原始資料型別
	(1)number:數字型別
	(2)string:字串型別
	(3)boolean:布林型別
	(4)null:空型別
	(5)underfind:未定義
	
	注意:number、boolean、string是偽物件
	
	型別轉換:
		number\boolean轉成string
			toString();
		string\boolean轉成number
			parseInt()
			parseFloat()
			boolean不能轉
			string可以將數字字串轉換成number 如果“123a3sd5” 轉成123
		強制轉換
			Boolean() 	強轉成布林
				數字強轉成布林  非零就是true   零就是false
				字串強轉成布林  非“”(空字串)就是true   空字串“”就是false
			Number()	強轉成數字
				布林轉數字 true轉成1  false轉成0
				字串轉數字 不能強轉

3、引用資料型別
	java:	Object obj = new Object();
	js:		var obj = new Object();
			var num = new Number();	

4、運算子
	(1)賦值運算子
		var x = 5;
	(2)算數運算子
		+ - * / %
		+: 遇到字串變成連線
		-:先把字串轉成數字然後進行運算
		*: 先把字串轉成數字然後進行運算
		/: 先把字串轉成數字然後進行運算
	(3)邏輯運算子
		&&	||
	(4)比較運算子
		<	>	>=	<=	!=	==
		===:全等:型別與值都要相等
	(5)三元運算子
		3<2?"大於":"小於"
	(6)void運算子
		<a href="javascript:void(0);">xxxxxx</a>
	(7)型別運算子
		typeof:判斷資料型別 返回我的資料型別
		instanceof:判斷資料型別 是否是某種型別
		var obj = new Object();
		alert(typeof obj);//object
		alert(obj instanceof Object);//true


5、邏輯語句
	(1)if-else
		//條件:
		//數字非0 字串非空====true
			if(9){
				alert("true--");
			}else{
				alert("false--");
			}
	(2)switch
		var x = "java";
		switch(x){
			case "css":
				alert("css");
				break;
			case "js":
				alert("js");
				break;
			case "java":
				alert("java");
				break;
			default:
				alert("def");
		}
	
	(3)for
		 for(var i = 0;i<5;i++){
			alert(i);
		 }
	(4)for in
		var arr = [1,3,5,7,"js"];
		 for(index in arr){//index代表角標
			//alert(index);
			alert(arr[index]);
		 }

三、js內建物件

(1)Number
	建立方式:
		var myNum=new Number(value);
		var myNum=Number(value);
	屬性和方法:
		toString():轉成字串
		valueOf():返回一個 Number 物件的基本數字值
(2)Boolean
	建立方式:
		var bool = new Boolean(value);	
		var bool = Boolean(value);
	屬性和方法:
		toString():轉成字串
		valueOf():返回一個 Boolean 物件的基本值(boolean)			
(3)String
	建立方式:
		var str = new String(s);
		var str = String(s);
	屬性和方法:
		length:字串的長度
		charAt():返回索引字元
		charCodeAt:返回索引字元unicode
		indexOf():返回字元的索引
		lastIndexOf();逆向返回字元的索引
		split();將字串按照特殊字元切割成陣列
		substr():從起始索引號提取字串中指定數目的字元
		substring():提取字串中兩個指定的索引號之間的字元
		toUpperCase();轉大寫
	示例:
(4)Array
	建立方式:
		var arr = new Array();//空陣列
		var arr = new Array(size);//建立一個指定長度的資料
		var arr = new Array(element0, element1, ..., elementn);//建立陣列直接例項化元素
		var arr = [];//空陣列
		var arr = [1,2,5,"java"];//建立陣列直接例項化元素
	屬性和方法:
		length:陣列長度
		join():把陣列的所有元素放入一個字串。元素通過指定的分隔符進行分隔一個
		pop():刪除並返回最後元素
		push():向陣列的末尾新增一個或更多元素,並返回新的長度
		reverse();反轉陣列
		sort();排序
(5)Date
	建立方式:	
		var myDate = new Date();
		var myDate = new Date(毫秒值);//代表從1970-1-1到現在的一個毫秒值
	屬性和方法
		getFullYear():年
		getMonth():月 0-11
		getDate():日 1-31
		getDay():星期 0-6
		getTime():返回1970年1月1日午夜到指定日期(字串)的毫秒數
		toLocalString();獲得本地時間格式的字串
		
(6)Math
	建立方式:	
		Math 物件並不像 Date 和 String 那樣是物件的類,因此沒有建構函式 Math(),像 Math.sin() 這樣的函式只是函式,
		不是某個物件的方法。您無需建立它,通過把 Math 作為物件使用就可以呼叫其所有屬性和方法。
	屬性和方法
		PI:圓周率
		abs():絕對值
		ceil():對數進行上舍入
		floor():對數進行下舍入
		pow(x,y):返回 x 的 y 次冪
		random():0-1之間的隨機數
		round():四捨五入
(7)RegExp
	建立方式:	
		var reg = new RegExp(pattern);
		var reg = /^正則規則$/;
	規則的寫法:
		[0-9] 
		[A-Z]
		[a-z]
		[A-z]
		\d 代表資料
		\D	非數字
		\w	查詢單詞字元
		\W	查詢非單詞字元
		\s	查詢空白字元
		\S	查詢非空白字元
		n+	出現至少一次
		n*	出現0次或多次
		n?	出現0次或1次
		{5} 出現5
		{2,8} 2到8次
	方法:	
		test(str):檢索字串中指定的值。返回 true 或 false
	需求:
		校驗郵箱:
		var email = 
[email protected]
var reg = /^[A-z]+[A-z0-9_-]*\@[A-z0-9]+\.[A-z]+$/; reg.test(email);

四、js的函式

1、js函式定義的方式
	(1)普通方式
		語法:function 函式名(引數列表){函式體}
		示例:
			function method(){
				alert("xxx");
			}
			method();
	(2)匿名函式
		語法:function(引數列表){函式體}
		示例:
			var method = function(){
				alert("yyy");
			};
			method();
	(3)物件函式
		語法:new Function(引數1,引數2,...,函式體);
		注意:引數名稱必須使用字串形式、最後一個預設是函式體且函式體需要字串形式
		示例:
			var fn = new Function("a","b","alert(a+b)");
			fn(2,5);
2、函式的引數
	(1)形參沒有var去修飾
	(2)形參和實參個數不一定相等
	(3)arguments物件 是個陣列 會將傳遞的實參進行封裝
	function fn(a,b,c){
		//var sum = a+b+c;
		//alert(sum);
		//arguments是個陣列 會將傳遞的實參進行封裝
		for(var i=0;i<arguments.length;i++){
			alert(arguments[i]);
		}
	}
	fn(1,2,4,8);
	
3、返回值
	(1)在定義函式的時候不必表明是否具有返回值
	(2)返回值僅僅通過return關鍵字就可以了 return後的程式碼不執行
	function fn(a,b){
		return a+b;
		//alert("xxxx");
	}
	alert(fn(2,3));

4、js的全域性函式
	(1)編碼和解碼
		encodeURI()   decodeURI()
		encodeURIComponet()	  decodeURIComponent()
		escape()	unescape()
		三者區別:
			進行編碼的符號範圍不同吧,實際開發中常使用第一種
	(2)強制轉換
		Number()
		String()
		Boolean()
	(3)轉成數字
		parseInt()
		parseFloat()
	(4)eval()方法	
		將字串當作指令碼進行解析執行
		//var str = "var a=2;var b=3;alert(a+b)";
		//eval(str);
		function print(str){
			eval(str);
		}
		print("自定義邏輯");

五、js的事件

事件
事件源
響應行為
1、js的常用事件
	onclick:點選事件
	onchange:域內容被改變的事件
		需求:實現二級聯動
		<select id="city">
			<option value="bj">北京</option>
			<option value="tj">天津</option>
			<option value="sh">上海</option>
		</select>
		<select id="area">
			<option>海淀</option>
			<option>朝陽</option>
			<option>東城</option>
		</select>
		<script type="text/javascript">
			var select = document.getElementById("city");
			select.onchange = function(){
				var optionVal = select.value;
				switch(optionVal){
					case 'bj':
						var area = document.getElementById("area");
						area.innerHTML = "<option>海淀</option><option>朝陽</option><option>東城</option>";
						break;
					case 'tj':
						var area = document.getElementById("area");
						area.innerHTML = "<option>南開</option><option>西青</option><option>河西</option>";
						break;
					case 'sh':
						var area = document.getElementById("area");
						area.innerHTML = "<option>浦東</option><option>楊浦</option>";
						break;
					default:
						alert("error");
				}
			};				
			
		</script>
	onfoucus:獲得焦點的事件
	onblur:失去焦點的事件
		需求:	當輸入框獲得焦點的時候,提示輸入的內容格式
				當輸入框失去焦點的時候,提示輸入有誤
		<label for="txt">name</label>
		<input id="txt" type="text" /><span id="action"></span>
		<script type="text/javascript">
			var txt = document.getElementById("txt");
			txt.onfocus = function(){
				//友好提示
				var span = document.getElementById("action");
				span.innerHTML = "使用者名稱格式最小8位";
				span.style.color = "green";
			};
			txt.onblur = function(){
				//錯誤提示
				var span = document.getElementById("action");
				span.innerHTML = "對不起 格式不正確";
				span.style.color = "red";
			};
		</script>
		
	onmouseover:滑鼠懸浮的事件
	onmouseout:滑鼠離開的事件
		需求:div元素 滑鼠移入變為綠色 移出恢復原色
		#d1{background-color: red;width:200px;height: 200px;}
		<div id="d1"></div>
		<script type="text/javascript">
			var div = document.getElementById("d1");
			div.onmouseover = function(){
				this.style.backgroundColor = "green";
			};
			div.onmouseout = function(){
				this.style.backgroundColor = "red";
			};
		</script>
	

	onload:載入完畢的事件
		等到頁面載入完畢在執行onload事件所指向的函式
		<span id="span"></span>
		<script type="text/javascript">
			window.onload = function(){
				var span = document.getElementById("span");
				alert(span);
				span.innerHTML = "hello js";
			};
		</script>
		
2、事件的繫結方式
	(1)將事件和響應行為都內嵌到html標籤中
		<input type="button" value="button"  onclick="alert('xxx')"/>
	(2)將事件內嵌到html中而響應行為用函式進行封裝
		<input type="button" value="button" onclick="fn()" />
		<script type="text/javascript">
			function fn(){
				alert("yyy");
			}
		</script>
	(3)將事件和響應行為 與html標籤完全分離
		<input id="btn" type="button" value="button"/>
		<script type="text/javascript">
			var btn = document.getElementById("btn");
			btn.onclick = function(){
				alert("zzz");
			};
		</script>
	
	****this關鍵字
		this經過事件的函式進行傳遞的是html標籤物件
		<input id="btn" name="mybtn" type="button" value="button123" onclick="fn(this)"/>
		<script type="text/javascript">
			function fn(obj){
				alert(obj.name);
			}
		</script>

3、阻止事件的預設行為
	IE:window.event.returnValue = false;
	W3c: 傳遞過來的事件物件.preventDefault();
	//ie:window.event.returnValue = false;
	//W3c:傳遞過來的事件物件.preventDefault();
	//W3c標準
	if(e&&e.preventDefault){
		alert("w3c");
		e.preventDefault();
	//IE標籤
	}else{
		alert("ie");
		window.event.returnValue = false;
	}
	
	
	//通過事件返回false也可以阻止事件的預設行為
	<a href="demo11.html" onclick="return false">點選我吧</a>

4、阻止事件的傳播
	IE:window.event.cancelBubble = true;
	W3c: 傳遞過來的事件物件.stopPropagation();
	if(e&&e.stopPropagation){
		alert("w3c");
		e.stopPropagation();
	//IE標籤
	}else{
		alert("ie");
		window.event.cancelBubble = true;
	}	

六、js的bom

(1)window物件
	彈框的方法:
		提示框:alert("提示資訊");
		確認框:confirm("確認資訊");
			有返回值:如果點選確認返回true  如果點選取消 返回false
			var res = confirm("您確認要刪除嗎?");
			alert(res);
		輸入框:prompt("提示資訊");
			有返回值:如果點選確認返回輸入框的文字 點選取消返回null
			var res =  prompt("請輸入密碼?");
			alert(res);
	open方法:
		window.open("url地址");			
		open("../jsCore/demo10.html");
		
	定時器:
		setTimeout(函式,毫秒值);
			setTimeout(
				function(){
					alert("xx");
				},
				3000
			);
		clearTimeout(定時器的名稱);
			var timer;
			var fn = function(){
				alert("x");
				timer = setTimeout(fn,2000);
			};
			var closer = function(){
				clearTimeout(timer);
			};
			fn();
		setInterval(函式,毫秒值);
		clearInterval(定時器的名稱)
			var timer = setInterval(
			function(){
				alert("nihao");
			},
			2000
		);
		var closer = function(){
			clearInterval(timer);
		};
		
	需求:註冊後5秒鐘跳轉首頁
	恭喜您註冊成功,<span id="second" style="color: red;">5</span>秒後跳轉到首頁,如果不跳轉請<a href="../jsCore/demo10.html">點選這裡</a>
	<script type="text/javascript">
		var time = 5;
		var timer;
		timer = setInterval(
			function(){
				var second = document.getElementById("second");
				if(time>=1){
					second.innerHTML = time;
					time--;
				}else{
					clearInterval(timer);
					location.href="../jsCore/demo10.html";
				}
			},
			1000
		);
	</script>
	
(2)location	
	location.href="url地址";
(3)history
	back();
	forward();
	go();
	<a href="demo7.html">後一頁</a>
	<input type="button" value="上一頁" onclick="history.back()">
	<input type="button" value="下一頁" onclick="history.forward()">
	
	<input type="button" value="上一頁" onclick="history.go(-1)">
	<input type="button" value="下一頁" onclick="history.go(1)">

七、js的dom

1、理解一下文件物件模型
	html檔案載入到記憶體之後會形成一顆dom樹,根據這些節點物件可以進行指令碼程式碼的動態修改
	在dom樹當中 一切皆為節點物件
2、dom方法和屬性
	筆記見程式碼