一、javascripts歷史
1)1992年Nombas開發出C-minus-minus(C--)的嵌入式腳本語言(最初綁定在CEnvi軟件中).后將其改名ScriptEase.(客戶端執行的語言)
2)Netscape(網景)接收Nombas的理念,(Brendan Eich)在其Netscape Navigator 2.0產品中開發出一套livescript的腳本語言.Sun和Netscape共同完成.后改名叫Javascript
3)微軟隨后模仿在其IE3.0的產品中搭載了一個JavaScript的克隆版叫Jscript.
4)為了統一三家,ECMA(歐洲計算機制造協會)定義了ECMA-262規范.國際標准化組織及國際電工委員會(ISO/IEC)也采納 ECMAScript 作為標准(ISO/IEC-16262)。從此,Web 瀏覽器就開始努力(雖然有着不同的程度的成功和失敗)將 ECMAScript 作為 JavaScript 實現的基礎。EcmaScript是規范
二、ECMAScript
盡管 ECMAScript 是一個重要的標准,但它並不是 JavaScript 唯一的部分,當然,也不是唯一被標准化的部分。實際上,一個完整的 JavaScript 實現是由以下 3 個不同部分組成的:
- 核心(ECMAScript)
- 文檔對象模型(DOM) Document object model (整合js,css,html)
- 瀏覽器對象模型(BOM) Broswer object model(整合js和瀏覽器)
Javascript 在開發中絕大多數情況是基於對象的.也是面向對象的.
ECMAScript 描述了以下內容:語法,類型,語句,關鍵字,保留字,運算符,對象(封裝,繼承,多態)基於對象的語言,使用對象
三、js引入方式
3.1、直接編寫
<script> alert('hello') </script>
3.2、導入文件
<script src="hello.js"></script>
四、js基礎-變量
1)變量是弱類型的
2)聲明變量時不用聲明變量類型. 全都使用var關鍵字,如var a;
3)一行可以聲明多個變量.並且可以是不同類型
var name="aa", age=20, job="lecturer";
4)聲明變量時 可以不用var. 如果不用var 那么它是全局變量
5)變量命名,首字符只能是字母,下划線,$美元符 三選一,且區分大小寫,x與X是兩個變量
6)變量還應遵守以下命名規則
#Camel 標記法 首字母是小寫的,接下來的字母都以大寫字符開頭。例如: var myTestValue = 0, mySecondValue = "hi"; #Pascal 標記法 首字母是大寫的,接下來的字母都以大寫字符開頭。例如: Var MyTestValue = 0, MySecondValue = "hi"; #匈牙利類型標記法 在以 Pascal 標記法命名的變量前附加一個小寫字母(或小寫字母序列),說明該變量的類型。例如,i 表示整數,s 表示字符串 Var iMyTestValue = 0, sMySecondValue = "hi";
五、js基礎-基礎規范
1)每行結束可以不加分號. 沒有分號會以換行符作為每行的結束
2)注釋 支持多行注釋和單行注釋. /* */ //
3)使用{}來封裝代碼塊
六、js基礎-常量與標識符
常量:直接在程序中出現的數據值
標識符:
1)由不以數字開頭的字母、數字、下划線(_)、美元符號($)組成
2)常用於表示函數、變量等的名稱
3)例如:_abc,$abc,abc,abc123是標識符,而1abc不是
4)JavaScript語言中代表特定含義的詞稱為保留字,不允許程序再定義為標識符
七、js基礎-數據類型
7.1、數字類型(number)
1)最基本的數據類型
2)不區分整型數值和浮點型數值
3)所有數字都采用64位浮點格式存儲,相當於Java和C語言中的double格式
4)能表示的最大值是±1.7976931348623157 x 10308
5)能表示的最小值是±5 x 10 -324
整數:
- 在JavaScript中10進制的整數由數字的序列組成
- 精確表達的范圍是 -9007199254740992 (-253) 到 9007199254740992 (253)
- 超出范圍的整數,精確度將受影響
浮點數:
- 使用小數點記錄數據,如3.4,5.6
- 使用指數記錄數據,如4.3e23 = 4.3 x 1023
16進制和8 進制表達:
- 16進制數據前面加上0x,八進制前面加0
- 16進制數是由0-9,A-F等16個字符組成
- 8進制數由0-7等8個數字組成
- 16進制和8進制與2進制的換算
# 2進制: 1111 0011 1101 0100 <-----> 16進制:0xF3D4 <-----> 10進制:62420 # 2進制: 1 111 001 111 010 100 <-----> 8進制:0171724
7.2、字符串(string)
1)是由Unicode字符、數字、標點符號組成的序列
2)字符串常量首尾由單引號或雙引號括起,JavaScript中沒有字符類型
3)字符串中部分特殊字符必須加上右划線\ ;常用的轉義字符 \n:換行 \':單引號 \":雙引號 \\:右划線
字符串使用:
- 特殊字符的使用方法和效果
- Unicode的插入方法
<script> var str="\u4f60\u597d\n歡迎來到\"JavaScript世界\""; alert(str); </script>
7.3、布爾型(Boolean)
1)Boolean類型僅有兩個值:true和false,也代表1和0,實際運算中true=1,false=0
2)布爾值也可以看作on/off、yes/no、1/0對應true/false
3)Boolean值主要用於JavaScript的控制語句
7.4、undefined類型
1)Undefined 類型只有一個值,即 undefined。當聲明的變量未初始化時,該變量的默認值是 undefined
2)當函數無明確返回值時,返回的也是值 "undefined"
var x; console.log(x); //undefined function f() { document.write("<h1>hello!</h1>") } console.log(f()) //打印值,undefined console.log(typeof f()) //打印類型undefined
7.5、Null類型
1)null 則用於表示尚未存在的對象
2)如果函數或方法要返回的是對象,那么找不到該對象時,返回的通常是 null。
7.6、數據類型轉換
1)JavaScript屬於松散類型的程序語言
2)變量在聲明的時候並不需要指定數據類型
3)變量只有在賦值的時候才會確定數據類型
4)表達式中包含不同類型數據則在計算過程中會強制進行類別轉換
- 數字 + 字符串:數字轉換為字符串
- 數字 + 布爾值:true轉換為1,false轉換為0
- 字符串 + 布爾值:布爾值轉換為字符串true或false
console.log("hello"+2); //hello2 console.log("hello"+true); //hellotrue console.log(2+true); //3
7.7、強制類型轉換函數
1)函數parseInt: 強制轉換成整數 例如parseInt("6.12")=6 ; parseInt(“12a")=12 ; parseInt(“a12")=NaN ;parseInt(“1a2")=1
console.log(parseInt(6.9234454)); //6 console.log(parseInt("hello")); //NAN ==>not a number,屬於Number的一種 console.log(parseInt("123")); //123 console.log(parseInt("123abc"));//123 console.log(parseInt("abc1234"));//NAN
2)函數parseFloat: 強制轉換成浮點數 parseFloat("6.12")=6.12
3)函數eval: 將字符串強制轉換為表達式並返回結果 eval("1+1")=2 ; eval("1<2")=true
7.8、類型查詢函數(typeof)
函數typeof :查詢數值當前類型 (string / number / boolean / object )
console.log(typeof 123); //number console.log(typeof "hello"); //string console.log(typeof true); //boolean console.log(typeof null); //object console.log(typeof undefined); //undefined console.log(typeof [12,3,4]); //object console.log(typeof {"name":"123"}); //object
八、ECMAScript 運算符
8.1、算數運算符
1)加(+)、 減(-)、 乘(*) 、除(/) 、余數(% ) 加、減、乘、除、余數和數學中的運算方法一樣 例如:9/2=4.5,4*5=20,9%2=1
2)-除了可以表示減號還可以表示負號 例如:x=-y
3)+除了可以表示加法運算還可以用於字符串的連接 例如:"abc"+"def"="abcdef"
遞增(++) 、遞減(--):
//假如x=2,那么x++表達式執行后的值為3,x--表達式執行后的值為1 //i++相當於i=i+1,i--相當於i=i-1 //遞增和遞減運算符可以放在變量前也可以放在變量后:--i var i=1; console.log(i++); //1 先顯示后加減 console.log(++i); //3 先加減后顯示 console.log(i--); //3 console.log(--i); //1
NaN特點:
var n=NaN; console.log(n>5) ; //false console.log(n<5) ; //false console.log(n==5) ; //false console.log(n==NaN) ;//false ==>NAN只要參與比較,布爾值一定是false,除非!= console.log(n!=NaN) ; //true
8.2、邏輯運算符
等於 ( == ) 、不等於( != ) 、 大於( > ) 、 小於( < ) 大於等於(>=) 、小於等於(<=) 與 (&&) 、或(||) 、非(!) && 1 = 1 1 || 1 = 1 && 0 = 0 1 || 0 = 1 && 0 = 0 0 || 0 = 0 !0=1 !1=0
邏輯 AND 運算符(&&):
邏輯 AND 運算的運算數可以是任何類型的,不止是 Boolean 值。
如果某個運算數不是原始的 Boolean 型值,邏輯 AND 運算並不一定返回 Boolean 值:
- 如果某個運算數是 null,返回 null。
- 如果某個運算數是 NaN,返回 NaN。
- 如果某個運算數是 undefined,返回undefined。
邏輯 OR 運算符(||):
與邏輯 AND 運算符相似,如果某個運算數不是 Boolean 值,邏輯 OR 運算並不一定返回 Boolean 值
8.3、賦值運算符
JavaScript中=代表賦值,兩個等號==表示判斷是否相等
console.log(2==2); //true console.log("2"==2); //true console.log(2==="2") //false console.log(3>20); //false console.log(3>"20"); //false console.log("3">"28") //true
8.4、等性運算符
執行類型轉換的規則如下:
- 如果一個運算數是 Boolean 值,在檢查相等性之前,把它轉換成數字值。false 轉換成 0,true 為 1。
- 如果一個運算數是字符串,另一個是數字,在檢查相等性之前,要嘗試把字符串轉換成數字。
- 如果一個運算數是對象,另一個是字符串,在檢查相等性之前,要嘗試把對象轉換成字符串。
- 如果一個運算數是對象,另一個是數字,在檢查相等性之前,要嘗試把對象轉換成數字。
在比較時,該運算符還遵守下列規則:
- 值 null 和 undefined 相等。
- 在檢查相等性時,不能把 null 和 undefined 轉換成其他值。
- 如果某個運算數是 NaN,等號將返回 false,非等號將返回 true。
- 如果兩個運算數都是對象,那么比較的是它們的引用值。如果兩個運算數指向同一對象,那么等號返回 true,否則兩個運算數不等。
8.5、關系運算符
var bResult = "Blue" < "alpha"; alert(bResult); //輸出 true //字符串 "Blue" 小於 "alpha",因為字母 B 的字符代碼是 66,字母 a 的字符代碼是 97
比較數字和字符串:
var bResult = "25" < "3"; alert(bResult); //輸出 "true" //比較的是字符串 "25" 和 "3"。兩個運算數都是字符串,所以比較的是它們的字符代碼("2" 的字符代碼是 50,"3" 的字符代碼是 51) var bResult = "25" < 3; alert(bResult); //輸出 "false" //字符串 "25" 將被轉換成數字 25,然后與數字 3 進行比較
總結:
1)比較運算符兩側如果一個是數字類型,一個是其他類型,會將其類型轉換成數字類型.
2)比較運算符兩側如果都是字符串類型,比較的是最高位的asc碼,如果最高位相等,繼續取第二位比較.
8.6、Boolean運算符
var temp=new Object();// false;[];0; null; undefined;object(new Object();) if(temp){ console.log("AA") }else { console.log("BB") }
九、控制語句
9.1、if控制語句
if-else基本格式 if (表達式){ 語句1; ...... }else{ 語句2; ..... } if語句嵌套格式 if (表達式1) { 語句1; }else if (表達式2){ 語句2; }else if (表達式3){ 語句3; } else{ 語句4; }
9.2、switch語句
switch基本格式 switch (表達式) { case 值1:語句1;break; case 值2:語句2;break; case 值3:語句3;break; default:語句4; }
實例:
switch(x){ case 1:y="星期一"; break; case 2:y="星期二"; break; case 3:y="星期三"; break; case 4:y="星期四"; break; case 5:y="星期五"; break; case 6:y="星期六"; break; case 7:y="星期日"; break; default: y="未定義"; }
if與switch區別:
1)switch用來根據一個整型值進行多路分支,並且編譯器可以對多路分支進行優化 2)switch-case只將表達式計算一次,然后將表達式的值與每個case的值比較,進而選擇執行哪一個case的語句塊 3)if..else 的判斷條件范圍較廣,每條語句基本上獨立的,每次判斷時都要條件加載 一次。 所以在多路分支時用switch比if..else if .. else結構要效率高。
9.3、for循環
//for循環基本格式 for (初始化;條件;增量){ 語句1; ... }
示例:
for (var i=1;i<=7;i++){ document.write("<H"+i+">hello</H "+i+"> "); document.write("<br>"); } //---------------------------------------------- var arr=[1,"hello",true]//var dic={"1":"111"} for (var i in arr){ console.log(i) console.log(arr[i]) }
示例2:
var eles_P=document.getElementsByTagName("p"); console.log(eles_P); // for (var i in eles_P){ //不推薦使用 // console.log(i) // } for (var i=0;i<eles_P.length;i++){ console.log(i); console.log(eles_P[i]); }
9.4、while循環
//while循環基本格式 while (條件){ 語句1; ... } //循環輸出H1到H7的字體大小 var i=1; while (i<=7) { document.write("<H"+i+">hello</H "+i+"> "); document.write("<br>"); i++; } // while 循環 var x=0; var i=1; while (i<=100){ x+=i; i++; } console.log(x) // for 循環實現 var sum=0; for (var i=0;i<101;i++){ sum+=i; } console.log(sum)
十、異常處理
try { //這段代碼從上往下運行,其中任何一個語句拋出異常該代碼塊就結束運行 } catch (e) { // 如果try代碼塊中拋出了異常,catch代碼塊中的代碼就會被執行。 //e是一個局部變量,用來指向Error對象或者其他拋出的對象 } finally { //無論try中代碼是否有異常拋出(甚至是try代碼塊中有return語句),finally代碼塊中始終會被執行。 } //主動拋出異常 throw Error('xxxx')
十一、ECMA對象
object對象:ECMAScript 中的所有對象都由這個對象繼承而來;Object 對象中的所有屬性和方法都會出現在其他對象中
ToString() : 返回對象的原始字符串表示。 ValueOf() : 返回最適合該對象的原始值。對於許多對象,該方法返回的值都與 ToString() 的返回值相同。
11種內置對象:Array ,String , Date, Math, Boolean, Number Function, Global, Error, RegExp , Object
<script language="javascript"> var aa=Number.MAX_VALUE; //利用數字對象獲取可表示最大數 var bb=new String("hello JavaScript"); //創建字符串對象 var cc=new Date(); //創建日期對象 var dd=new Array("星期一","星期二","星期三","星期四"); //數組對象 </script>
十二、String對象
12.1、創建string對象
//創建字符串對象兩種方式 var str1="hello"; var str2=new String("hello2"); console.log(typeof str1); //string console.log(typeof str2); //object
12.2、string對象屬性
//字符串的屬性length var str1="hello"; console.log(str1.length); //5
12.3、string對象方法
12.3.1、格式編排方法
//編排方法 var str1="hello"; console.log(str1.italics()); //<i>hello</i> console.log(str1.bold()); //<b>hello</b> console.log(str1.anchor()); //<a name="undefined">hello</a>
12.3.2、大小寫轉換
var str1="AbcdEfgh"; var str2=str1.toLowerCase(); var str3=str1.toUpperCase(); alert(str2); //結果為"abcdefgh" alert(str3); //結果為"ABCDEFGH"
12.3.3、獲取指定字符
x.charAt(index) x.charCodeAt(index) //x代表字符串對象 //index代表字符位置 //index從0開始編號 //charAt返回index位置的字符 //charCodeAt返回index位置的Unicode編碼 //---------------------- var str1="welcome to the world of JS!"; var str2=str1.charAt(24); var str3=str1.charCodeAt(2); alert(str2); //J alert(str3); //108
12.3.4、查詢字符串
//x.indexOf(findstr,index) //x.lastIndexOf(findstr) var str1="welcome to the world of JS!"; var str2=str1.indexOf("l"); var str3=str1.lastIndexOf("l"); alert(str2); //結果為2 alert(str3); //結果為18 //-------------------------------------- //x.match(regexp) //x.search(regexp) //x代表字符串對象 //regexp代表正則表達式或字符串 //match返回匹配字符串的數組,如果沒有匹配則返回null //search返回匹配字符串的首字符位置索引 var str1="welcome to the world of JS!"; var str2=str1.match("world"); var str3=str1.search("world"); alert(str2[0]); //結果為"world" alert(str3); //結果為15
12.3.5、子字符串處理
1)截取子字符串
//x.substr(start, length) //x.substring(start, end) 顧頭不顧尾 var str1="abcdefgh"; var str2=str1.substr(2,4); var str3=str1.substring(2,4); alert(str2); //結果為"cdef" alert(str3); //結果為"cd" //-------------------------------- //x.slice(start, end) 切片 var str1="abcdefgh"; var str2=str1.slice(2,4); var str3=str1.slice(4); //4-結尾 var str4=str1.slice(2,-1); //取不到最后 var str5=str1.slice(-3,-1); alert(str2); //結果為"cd" alert(str3); //結果為"efgh" alert(str4); //結果為"cdefg" alert(str5); //結果為"fg"
2)分割字符串
var str1="一,二,三,四,五,六,日"; var strArray=str1.split(","); alert(strArray[1]); //結果為"二"
3)替換子字符串
//x.replace(findstr,tostr) var str1="abcdefgh"; var str2=str1.replace("cd","aaa"); alert(str2); //結果為"abaaaefgh"
4)連接字符串
//y=x.concat(addstr) var str1="abcd"; var str2=str1.concat("efgh"); alert(str2); //結果為"abcdefgh"
十三、 Array對象
13.1、數組創建
//創建方式1: var a=[1,2,3]; //創建方式2: new Array(); // 創建數組時允許指定元素個數也可以不指定元素個數。 new Array(size); //如果1個參數且為數字,即代表size,not content //初始化數組對象: var cnweek=new Array(7); cnweek[0]="星期日"; cnweek[1]="星期一"; ... cnweek[6]="星期六"; new Array(element0, element1, ..., elementn)//也可以直接在建立對象時初始化數組元素,元素類型允許不同 var test=new Array(100,"a",true); //++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //創建二維數組 var cnweek=new Array(7); for (var i=0;i<=6;i++){ cnweek[i]=new Array(2); } cnweek[0][0]="星期日"; cnweek[0][1]="Sunday"; cnweek[1][0]="星期一"; cnweek[1][1]="Monday"; ... cnweek[6][0]="星期六"; cnweek[6][1]="Saturday";
13.2、數組屬性
獲取數組元素的個數:length
var cnweek=new Array(7); cnweek[0]="星期日"; cnweek[1]="星期一"; cnweek[2]="星期二"; cnweek[3]="星期三"; cnweek[4]="星期四"; cnweek[5]="星期五"; cnweek[6]="星期六"; for (var i=0;i<cnweek.length;i++){ document.write(cnweek[i]+" | "); }
13.3、數組方法
13.3.1、連接數組-join方法
//x.join(bystr) var arr1=[1, 2, 3, 4, 5, 6, 7]; var str1=arr1.join("-"); alert(str1); //結果為"1-2-3-4-5-6-7"
13.3.2、連接數組-concat方法
//x.concat(value,...) var a = [1,2,3]; var a = new Array(1,2,3); var b=a.concat(4,5) ; alert(a.toString()); //返回結果為1,2,3 alert(b.toString()); //返回結果為1,2,3,4,5
13.3.3、數組排序-reverse sort
//x.reverse() //x.sort() var arr1=[32, 12, 111, 444]; //var arr1=["a","d","f","c"]; arr1.reverse(); //顛倒數組元素 alert(arr1.toString()); //結果為444,111,12,32 arr1.sort(); //排序數組元素,但按照高位排序 alert(arr1.toString()); //結果為111,12,32,444 //------------------------------------------- //若按照數字大小排序 function intSort(a,b){ if (a>b){ return 1; } else if(a<b){ return -1; } else { return 0 } } //或者 function IntSort(a,b){ return a-b; } arr.sort(intSort);
13.3.4、數組切片-slice
//x.slice(start, end) var arr1=['a','b','c','d','e','f','g','h']; var arr2=arr1.slice(2,4); var arr3=arr1.slice(4); var arr4=arr1.slice(2,-1); alert(arr2.toString()); //結果為"c,d" alert(arr3.toString()); //結果為"e,f,g,h" alert(arr4.toString()); //結果為"c,d,e,f,g"
13.3.5、刪除子數組
//x. splice(start, deleteCount, value, ...) //x代表數組對象 //splice的主要用途是對數組指定位置進行刪除和插入 //start表示開始位置索引 //deleteCount刪除數組元素的個數 //value表示在刪除位置插入的數組元素 //value參數可以省略 var a = [1,2,3,4,5,6,7,8]; a.splice(1,2); //a變為 [1,4,5,6,7,8] alert(a.toString()); a.splice(1,1); //a變為[1,5,6,7,8] alert(a.toString()); a.splice(1,0,2,3); //a變為[1,2,3,5,6,7,8] alert(a.toString());
13.3.6、數組的進出棧操作(1)
//push pop這兩個方法模擬的是一個棧操作 //x.push(value, ...) 壓棧 //x.pop() 彈棧 //x代表數組對象 //value可以為字符串、數字、數組等任何值 //push是將value值添加到數組x的結尾 //pop是將數組x的最后一個元素刪除 var arr1=[1,2,3]; arr1.push(4,5); alert(arr1); //結果為"1,2,3,4,5" arr1.push([6,7]); alert(arr1) //結果為"1,2,3,4,5,6,7" arr1.pop(); //將[6,7]作為整體刪除 alert(arr1); //結果為"1,2,3,4,5"
13.3.7、數組的進出棧操作(2)
// unshift shift //x.unshift(value,...) //x.shift() //x代表數組對象 //value可以為字符串、數字、數組等任何值 //unshift是將value值插入到數組x的開始 //shift是將數組x的第一個元素刪除 var arr1=[1,2,3]; arr1.unshift(4,5); alert(arr1); //結果為"4,5,1,2,3" arr1. unshift([6,7]); alert(arr1); //結果為"6,7,4,5,1,2,3" arr1.shift(); //將[6,7]作為整體刪除 alert(arr1); //結果為"4,5,1,2,3"
13.4、總結js的數組特性
1)js中的數組可以裝任意類型,沒有任何限制.
2)js中的數組,長度是隨着下標變化的.用到多長就有多長
var arr5 = ['abc',123,1.14,true,null,undefined,new String('1213'),new Function('a','b','alert(a+b)')]; alert(arr5.length);//8 arr5[10] = "hahaha"; //直接跳過下標9,定義下標10的值 alert(arr5.length); //11 alert(arr5[9]);// undefined
十四、Function 對象
14.1、函數定義
function 函數名 (參數){ 函數體; return 返回值; }
功能說明:
- 可以使用變量、常量或表達式作為函數調用的參數
- 函數由關鍵字function定義
- 函數名的定義規則與標識符一致,大小寫是敏感的
- 返回值必須使用return
用 Function 類直接創建函數的語法如下:
function 函數名 (參數){ 函數體; return 返回值; } //another way: var 函數名 = new Function("參數1","參數n","function_body");
示例:
alert(1); function func1(){ alert('hello AA!'); return 8 } ret=func1(); alert(ret) //---------------- var func1=new Function("name","alert(\"hello\"+name);") func1("yuan")
注意:js的函數加載執行與python不同,它是整體加載完才會執行,所以執行函數放在函數聲明上面或下面都可以:
<script> //f(); --->OK function f(){ console.log("hello") } f() //----->OK </script>
14.2、函數屬性
ECMAScript 定義的屬性 length 聲明了函數期望的參數個數
alert(func1.length) //返回參數個數
14.3、函數調用
function func1(a,b){ alert(a+b); } func1(1,2); //3 func1(1,2,3);//3 func1(1); //NaN func1(); //NaN //只要函數名寫對即可,參數怎么填都不報錯. //------------------------------ function a(a,b){ alert(a+b); } var a=1; var b=2; a(a,b) //報錯a is not a function
14.4、函數內置對象arguments
function add(a,b){ console.log(a+b);//3 console.log(arguments.length);//2 console.log(arguments);//[1,2] } add(1,2) //arguments的用處1 function ADD() { var sum=0; for (var i=0;i<arguments.length;i++){ sum+=arguments[i] } return sum } console.log(ADD(1,2,89)) //不需要關心參數個數 //arguments的用處2 function f(a,b,c){ if (arguments.length!=3){ throw new Error("function f called with "+arguments.length+" arguments,but it just need 3 arguments") } else { alert("success!") }
14.5、匿名函數
// 匿名函數 var func = function(arg){ return "tony"; } // 匿名函數的應用 (function(){ alert("tony"); } )() (function(arg){ console.log(arg); })('123')
14.6、函數的作用域
js的作用域和py相似,if while等控制語句並沒有自己作用域;而函數是有自己的作用域的
if(1==1){ var s=12; } console.log(s);//12 // ---------------------- function f(){ var temp=666; } f(); console.log(temp); //Uncaught ReferenceError: temp is not defined
嵌套函數的作用域:
var city = 'beijing'; function func(){ var city = 'shanghai'; function inner(){ var city = 'shenzhen'; console.log(city); } inner(); } func(); //shenzhen //---------------------------------- var city = 'beijing'; function Bar(){ console.log(city); } function func(){ var city = 'shanghai'; return Bar; } var ret = func(); #ret = Bar ret(); //beijing
閉包:
var city = 'beijing'; function func(){ var city = "shanghai"; function inner(){ // var city = "langfang"; console.log(city); } return inner; } var ret = func(); //ret = inner ret(); //相當於執行inner() ==>shanghai
示例:
var city = 'beijing'; function func(){ var city = "shanghai"; function inner(){ // var city = "langfang"; console.log(city); } return inner; //閉包 } var ret = func(); //ret=inner ret(); //ret() ==>inner() //shanghai //------------------------------------ var city = 'beijing'; function Bar(){ console.log(city); } function func(){ var city = 'shanghai'; return Bar; } var ret = func(); //ret=Bar ret(); //ret() ==>Bar() //beijing
十五、Date對象
15.1、創建date對象
//方法1:不指定參數 var nowd1=new Date(); alert(nowd1.toLocaleString( )); //2019/9/20 上午9:23:35 //方法2:參數為日期字符串 var nowd2=new Date("2004/3/20 11:12"); alert(nowd2.toLocaleString( )); //2004/3/20 上午11:12:00 var nowd3=new Date("04/03/20 11:12"); alert(nowd3.toLocaleString( )); //2020/4/3 上午11:12:00 //方法3:參數為毫秒數 var nowd3=new Date(5000); alert(nowd3.toLocaleString( )); //1970/1/1 上午8:00:05 alert(nowd3.toUTCString()); //Thu, 01 Jan 1970 00:00:05 GMT //方法4:參數為年月日小時分鍾秒毫秒 var nowd4=new Date(2004,2,20,11,12,0,300); alert(nowd4.toLocaleString( )); //2004/3/20 上午11:12:00 //毫秒並不直接顯示
15.2、Date對象方法—獲取日期和時間
//獲取日期和時間 getDate() //獲取日 getDay () //獲取星期 getMonth () //獲取月(0-11) getFullYear () //獲取完整年份 getYear () //獲取年 getHours () //獲取小時 getMinutes () //獲取分鍾 getSeconds () //獲取秒 getMilliseconds () //獲取毫秒 getTime () //返回累計毫秒數(從1970/1/1午夜) //============================================================== function getCurrentDate(){ //1. 創建Date對象 var date = new Date(); //沒有填入任何參數那么就是當前時間 //2. 獲得當前年份 var year = date.getFullYear(); //3. 獲得當前月份 js中月份是從0到11. var month = date.getMonth()+1; //4. 獲得當前日 var day = date.getDate(); //5. 獲得當前小時 var hour = date.getHours(); //6. 獲得當前分鍾 var min = date.getMinutes(); //7. 獲得當前秒 var sec = date.getSeconds(); //8. 獲得當前星期 var week = date.getDay(); //沒有getWeek // 2014年06月18日 15:40:30 星期三 return year+"年"+changeNum(month)+"月"+day+"日 "+hour+":"+min+":"+sec+" "+parseWeek(week); } alert(getCurrentDate()); //解決 自動補齊成兩位數字的方法 function changeNum(num){ if(num < 10){ return "0"+num; }else{ return num; } } //將數字 0~6 轉換成 星期日到星期六 function parseWeek(week){ var arr = ["星期日","星期一","星期二","星期三","星期四","星期五","星期六"]; // 0 1 2 3 ............. return arr[week]; }
15.3、Date對象方法—設置日期和時間
//設置日期和時間 //setDate(day_of_month) 設置日 //setMonth (month) 設置月 //setFullYear (year) 設置年 //setHours (hour) 設置小時 //setMinutes (minute) 設置分鍾 //setSeconds (second) 設置秒 //setMillliseconds (ms) 設置毫秒(0-999) //setTime (allms) 設置累計毫秒(從1970/1/1午夜) var x=new Date(); x.setFullYear (1997); //設置年1997 x.setMonth(7); //設置月7 x.setDate(1); //設置日1 x.setHours(5); //設置小時5 x.setMinutes(12); //設置分鍾12 x.setSeconds(54); //設置秒54 x.setMilliseconds(230); //設置毫秒230 document.write(x.toLocaleString( )+"<br>"); //返回1997年8月1日5點12分54秒 x.setTime(870409430000); //設置累計毫秒數 document.write(x.toLocaleString( )+"<br>"); //返回1997年8月1日12點23分50秒
15.4、Date對象方法—日期和時間的轉換
//日期和時間的轉換: getTimezoneOffset(): //8個時區×15度×4分/度=480; //返回本地時間與GMT的時間差,以分鍾為單位 toUTCString() //返回國際標准時間字符串 toLocalString() //返回本地格式時間字符串 Date.parse(x) //返回累計毫秒數(從1970/1/1午夜到本地時間) Date.UTC(x) //返回累計毫秒數(從1970/1/1午夜到國際時間)
十六、RegExp對象
十七、Math對象
//Math對象 //Math是內置對象 , 與Global的不同之處是, 在調用時 需要打出 "Math."前綴. //屬性學習: alert(Math.PI); //方法學習: alert(Math.random()); // 獲得隨機數 0~1 不包括1. alert(Math.round(1.5)); // 四舍五入 //練習:獲取1-100的隨機整數,包括1和100 var num=Math.random(); num=num*10; num=Math.round(num); alert(num) //============max min========================= alert(Math.max(1,2)); // 2 alert(Math.min(1,2));// 1 */ //-------------pow-------------------------------- alert(Math.pow(2,4));// pow 計算參數1 的參數2 次方. abs(x) 返回數的絕對值。 exp(x) 返回 e 的指數。 floor(x)對數進行下舍入。 log(x) 返回數的自然對數(底為e)。 max(x,y) 返回 x 和 y 中的最高值。 min(x,y) 返回 x 和 y 中的最低值。 pow(x,y) 返回 x 的 y 次冪。 random() 返回 0 ~ 1 之間的隨機數。 round(x) 把數四舍五入為最接近的整數。 sin(x) 返回數的正弦。 sqrt(x) 返回數的平方根。 tan(x) 返回角的正切。
十七、BOM對象
1)BOM(瀏覽器對象模型),可以對瀏覽器窗口進行訪問和操作。使用 BOM,開發者可以移動窗口、改變狀態欄中的文本以及執行其他與頁面內容不直接相關的動作。
2)使 JavaScript 有能力與瀏覽器“對話”。
十八、window對象
所有瀏覽器都支持 window 對象。
概念上講.一個html文檔對應一個window對象(窗口).
功能上講: 控制瀏覽器窗口的.
使用上講: window對象不需要創建對象,直接使用即可.
18.1、Window 對象方法
alert() //顯示帶有一段消息和一個確認按鈕的警告框。 confirm() //顯示帶有一段消息以及確認按鈕和取消按鈕的對話框。 prompt() //顯示可提示用戶輸入的對話框。 open() //打開一個新的瀏覽器窗口或查找一個已命名的窗口。 close() //關閉瀏覽器窗口。 setInterval() //按照指定的周期(以毫秒計)來調用函數或計算表達式。 clearInterval() //取消由 setInterval() 設置的 timeout。 setTimeout() //在指定的毫秒數后調用函數或計算表達式。 clearTimeout() //取消由 setTimeout() 方法設置的 timeout。 scrollTo() //把內容滾動到指定的坐標。
18.2、方法使用
//----------alert confirm prompt---------------------------- alert('aaa'); var result = confirm("您確定要刪除嗎?"); alert(result); //prompt 參數1 : 提示信息. 參數2:輸入框的默認值. 返回值是用戶輸入的內容. var result = prompt("請輸入一個數字!","haha"); alert(result); //open方法 打開和一個新的窗口 並 進入指定網址.參數1 : 網址. //調用方式1 open("http://www.baidu.com"); //參數1 什么都不填 就是打開一個新窗口. 參數2.填入新窗口的名字(一般可以不填). 參數3: 新打開窗口的參數.open('','','width=200,resizable=no,height=100'); // 新打開一個寬為200 高為100的窗口 //close方法 將當前文檔窗口關閉. close(); //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ var num = Math.round(Math.random()*100); function acceptInput(){ //2.讓用戶輸入(prompt) 並接受 用戶輸入結果 var userNum = prompt("請輸入一個0~100之間的數字!","0"); //3.將用戶輸入的值與 隨機數進行比較 if(isNaN(+userNum)){ //用戶輸入的無效(重復2,3步驟) alert("請輸入有效數字!"); acceptInput(); } else if(userNum > num){ //大了==> 提示用戶大了,讓用戶重新輸入(重復2,3步驟) alert("您輸入的大了!"); acceptInput(); }else if(userNum < num){ //小了==> 提示用戶小了,讓用戶重新輸入(重復2,3步驟) alert("您輸入的小了!"); acceptInput(); }else{ //答對了==>提示用戶答對了 , 詢問用戶是否繼續游戲(confirm). var result = confirm("恭喜您!答對了,是否繼續游戲?"); if(result){ //是 ==> 重復123步驟. num = Math.round(Math.random()*100); acceptInput(); }else{ //否==> 關閉窗口(close方法). close(); } }
setInterval clearInterval:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> #id1{ width: 200px; height: 50px; } </style> </head> <body> <input type="text" id="id1" onclick="begin()"> //綁定開始事件,點擊輸入框,打印時間 <button onclick="end()">停止</button> //綁定停止事件 <script> function showTime() { var current_time=new Date().toLocaleString(); var ele=document.getElementById("id1") ele.value=current_time } var clock1; function begin() { if(clock1==undefined){ showTime(); clock1=setInterval(showTime,1000) } } function end() { clearInterval(clock1); clock1=undefined } </script> </body> </html>
十九、History 對象
19.1、History 對象屬性
History 對象包含用戶(在瀏覽器窗口中)訪問過的 URL。
History 對象是 window 對象的一部分,可通過 window.history 屬性對其進行訪問
length 返回瀏覽器歷史列表中的 URL 數量。
19.2、History 對象方法
back() //加載 history 列表中的前一個 URL。 forward() //加載 history 列表中的下一個 URL。 go() //加載 history 列表中的某個具體頁面。 <a href="rrr.html">click</a> <button onclick=" history.forward()">>>></button> <button onclick="history.back()">back</button> <button onclick="history.go()">back</button>
二十、Location 對象
Location 對象包含有關當前 URL 的信息。
Location 對象是 Window 對象的一個部分,可通過 window.location 屬性來訪問。
20.1、Location 對象方法
location.assign(URL) location.reload() location.replace(newURL)//注意與assign的區別