JavaScript概述:
- 是一種網(wǎng)頁編程技術(shù)淫茵,用來向HTML頁面添加動態(tài)交互效果;
- 是一種基于對象和事件驅(qū)動的解釋性腳本語言,具有與Java和C語言類似的語法碉克;
- 可直接嵌入HTML頁面顶考,由瀏覽器解釋執(zhí)行赁还,不進行預(yù)編譯。
發(fā)展史 - 正式名稱是“ECMSCript”,由ECMA組織發(fā)展和維護驹沿;
- CMA-262是正式的JavaScript(Netscape)和JScript(Microsoft)艘策。
- 網(wǎng)景公司在Netscape2.0首先推出了JavaScript。微軟公司從IE3.0開始提供對客戶端JavaScript的支持渊季,并另取名為JScript朋蔫。
特點 - 可以使用任何文本編輯工具編寫,只需要瀏覽器就可以執(zhí)行程序却汉。
- 解釋執(zhí)行:事先不解釋驯妄,逐行執(zhí)行。
- 基于對象:內(nèi)置大量現(xiàn)成對象合砂。
- 適宜:客戶端數(shù)據(jù)計算富玷、客戶端表單合法性驗證、瀏覽器事件的觸發(fā)既穆、網(wǎng)頁特殊顯示效果制作赎懦。
定義方式 - 直接定義在事件中。如:
<input type="button" value="第一個按鈕" onclick="alert('hello world');"/>
在<head>標(biāo)簽中嵌入<script language=“javaScript” type=“text/javscript”></script>標(biāo)簽幻工,在其中放置javaScript代碼励两;
- 將代碼寫在單獨的.js文件中,在html頁面的<head>里使用<script>引入囊颅。如:
<head> <script language="javascript" src="myScript.js"></script> </head>
錯誤查看
- 解釋性代碼当悔,若代碼錯誤傅瞻,則頁面無任何效果。
- 使用瀏覽器里的開發(fā)者工具盲憎;
注釋:單行使用// ; 多行使用:/**/
JavaScript基礎(chǔ)語法:
編寫:
- 由Unicode字符集編寫嗅骄。
- 語句:表達式、關(guān)鍵字饼疙、運算符組成溺森;大小寫敏感;使用分號結(jié)束窑眯。
常量屏积、標(biāo)識符和關(guān)鍵字
1)常量:直接在程序中出現(xiàn)的數(shù)據(jù)值(字面量),用完就丟棄了磅甩。如alert(“hello");
2)標(biāo)識符:由不以數(shù)字開頭的字母炊林、數(shù)字、下劃線卷要、$組成渣聚。常用于表示函數(shù)、變量等的名稱僧叉。不能和保留關(guān)鍵字重復(fù)奕枝,如break、if等彪标。
3)關(guān)鍵字:只有系統(tǒng)才能用的標(biāo)識符。
變量
1)聲明:使用關(guān)鍵字var聲明變量掷豺,如var x,y;
【注意:以var關(guān)鍵字聲明捞烟,聲明的時候不確定類型,變量的類型以賦值為準(zhǔn)当船。如:var x,y,z; x=10; y="mary"; z=true;】
2)變量初始化:使用等號賦值题画。
【注意:沒有初始化的變量則自動取值為undefined,如:var count = 0;】
3)變量命名同標(biāo)識符的規(guī)則德频,大小寫敏感苍息。
數(shù)據(jù)類型
1)基本類型:number數(shù)字、string字符串壹置、boolean布爾
2)特殊類型:null空竞思、undefined未定義
3)復(fù)雜類型:array數(shù)組、object對象
number數(shù)字:
—> 不區(qū)分整型數(shù)值和浮點型數(shù)值:所有數(shù)字都采用64位浮點格式存儲钞护,類似于double格式盖喷。
—> 整數(shù):16進制數(shù)前面加上0x,8進制前面加0难咕。
—> 浮點數(shù):使用小數(shù)點記錄數(shù)據(jù)课梳,如3.4距辆,5.6;使用指數(shù)記錄數(shù)據(jù)暮刃,如4.3e23=4.3X10^23
string字符串:
—> 表示文本:由Unicode字符跨算、數(shù)字、標(biāo)點符號組成的序列椭懊。
—> 首尾由單引號或雙引號括起來诸蚕。
—> 特殊字符需要轉(zhuǎn)義,用轉(zhuǎn)義符\灾搏,如:\n挫望,\,\’狂窑,\“
【注意:可用在正則表達式媳板,只允許錄入漢字[^\u4e00-\u9fa5$],每個漢字都有轉(zhuǎn)義符泉哈◎刃遥】
boolean布爾
—>僅有兩個值:true和false;實際運算中true=1丛晦,false=0
數(shù)據(jù)類型的轉(zhuǎn)換
1)轉(zhuǎn)換方式
—> 隱式轉(zhuǎn)換:使用隱式自動轉(zhuǎn)換規(guī)則直接轉(zhuǎn)換
—> 顯式轉(zhuǎn)換:利用系統(tǒng)提供的函數(shù)
【注意:不建議使用隱式轉(zhuǎn)換】
隱式轉(zhuǎn)換
1)JavaScript屬于松散類型的程序語言
—> 變量在聲明時不需要指定數(shù)據(jù)類型奕纫。
—> 變量由賦值操作確定數(shù)據(jù)類型。
2)不同類型數(shù)據(jù)在計算過程中會自動進行轉(zhuǎn)換
—> ①數(shù)字+字符串:數(shù)字轉(zhuǎn)換為字符串
—> ②數(shù)字+布爾值:true轉(zhuǎn)換為1烫沙,false轉(zhuǎn)換為0
—> ③字符串+布爾值:布爾值轉(zhuǎn)換為字符串true或false
—> ④布爾值+布爾值:布爾值轉(zhuǎn)換為數(shù)值1或0
顯式轉(zhuǎn)換
toString:轉(zhuǎn)成字符串匹层,所有數(shù)據(jù)類型均可轉(zhuǎn)換為string類型。
parseInt:強制轉(zhuǎn)換成整數(shù)锌蓄,如果不能轉(zhuǎn)換升筏,則返回NaN。(去尾法)
parseFloat:牽制轉(zhuǎn)換成浮點數(shù)瘸爽,如果不能轉(zhuǎn)換您访,則返回NaN。
typeof:查詢數(shù)值當(dāng)前類型剪决,返回string/number/boolean/object灵汪。
NaN:not a number,非常特殊柑潦,它不是數(shù)字享言,所以任何數(shù)跟它都不相等,甚至NaN本身也不等于NaN
isNaN(str):is not a number渗鬼,判斷文本是否為數(shù)值担锤,false為數(shù)值,true為非數(shù)值
null:null在程序中代表“無值”或者“無對象”乍钻「匮可以通過給一個變量賦值null來清除變量的內(nèi)容铭腕。
undefined:聲明了變量但從未賦值或這對象屬性不存在。
- 算術(shù)運算:+ - * / %
- 關(guān)系運算:> < <= >= == != ===(嚴(yán)格相等多糠,值與類型都相等) !==(非嚴(yán)格相等)
- 邏輯運算:累舷! && ||
- 條件運算:? :
- 流程控制:switch-case for while
JavaScript常用內(nèi)置對象
*概念:
1)JavaScript是一種基于對象的語言,對象是JavaScript中最重要的元素夹孔。
2)JavaScript包含多種對象:內(nèi)置對象被盈、自定義對象、瀏覽器對象搭伤、HTML DOM對象只怎、ActiveX對象
- 使用:
1)對象由屬性和方法封裝而成。
2)屬性的引用:使用點“.”運算符怜俐、通過下標(biāo)的方式引用身堡。
3)對象的方法的引用:ObjectName.methods()。 - 常用內(nèi)置對象
1)簡單數(shù)據(jù)對象:String拍鲤、Number贴谎、Boolean
2)組合對象:Array、Date季稳、Math
3)復(fù)雜對象:Function擅这、RegExp
String
1)創(chuàng)建:var str1 = "hello world”; var str2 = new String("hello world”);
2)屬性:length;如:str1.length;
3)方法:
—> toLowerCase():轉(zhuǎn)為小寫景鼠;
—> charAt(index)/charCodeAt(index):獲取index處的字符/Unicode編碼
—> indexOf(str) / lastIndexOf(str):查詢位置,沒有則返回-1
—> substring(start,end):截取
—> substr(start,length):截取
—> replace(oldStr,newStr):替換
—> split(bystr):分割
正則相關(guān):
—> replace(regexp,newstr):根據(jù)正則替換
—> match(regexp):返回匹配字符串的數(shù)組
—> search(regexp):返回匹配的首個字符串的索引值
匹配模式:JavaScript中使用正則表達式:使用兩個斜杠仲翎, / 表達式 / 匹配模式
① g:global,全局匹配铛漓;② m:multilin溯香,多行匹配;③ i:忽略大小寫匹配票渠。
如:var array=str1.match(/\d/g); //即全局匹配數(shù)字
- Array
一列有多個數(shù)據(jù)逐哈》移可以有不同類型的數(shù)據(jù)问顷。JavaScript只有數(shù)組沒有集合竹椒;
1)創(chuàng)建:
① var arr = [“mary”,10,true];//用中括號食寡!不是大括號人乓;常用键耕;聲明的同時并賦值句伶。
② var arr = new Array(“mary",10,true);//聲明的同時并賦值稳懒。
③ var arr = new Array();或var arr = new Array(7);//可有長度也可沒有長度儡羔。即便寫了長度程癌,也能把第8個數(shù)據(jù)存入嘴瓤!先聲明后賦值扫外。
2)屬性:length莉钙;
3)二維數(shù)組:通過指定數(shù)組中的元素為數(shù)組的方式可以創(chuàng)建二維甚至多維數(shù)組。week[0][1] = “Monday”筛谚;
4)方法:
—> join(str):以bystr作為連接數(shù)組中元素的分隔字符磁玉,返回拼接后的數(shù)組。
//也可直接使用新的下標(biāo)賦值驾讲,如:var arr = new Array(4);arr[5]=5;
—>** toString():輸出數(shù)組的內(nèi)容(以逗號隔開)蚊伞。
—> concat(value,…):value作為數(shù)組元素連接到數(shù)組的末尾(數(shù)組連接),返回連接后的一個新數(shù)組吮铭。原數(shù)組內(nèi)容不變时迫。
—> slice(start,end):截取從start開始到end結(jié)束(不包含end)的數(shù)組元素。end省略代表從start開始到數(shù)組結(jié)尾谓晌。
—> reverse():數(shù)組反轉(zhuǎn)掠拳,改變原數(shù)組元素的順序。
—> pop(): 刪除并返回最后一個元素
—> shift():刪除并返回第一個元素
—>unshift():向數(shù)組開頭添加一個或更多元素扎谎,并返回新的長度
—> push():向數(shù)組末尾添加一個或更多元素碳想,并返回新的長度
—> splice():刪除元素,并向數(shù)據(jù)添加新元素
—>toSource()**:返回該對象的源代碼毁靶。
—> valueOf():返回數(shù)組對象原始值胧奔。
—> sort():數(shù)組排序,默認按照字符串的編碼順序進行排序预吆。
—> sort(sortfunc):sortfunc用來確定元素順序的函數(shù)名龙填。函數(shù)的形式如:
function(a,b) { return a-b; }
Math
用于執(zhí)行數(shù)字相關(guān)。
1)沒有構(gòu)造函數(shù)Math()拐叉。
2)不需要創(chuàng)建岩遗,直接把Math作為對象使用就可以調(diào)用其所有屬性和方法。如:不需要創(chuàng)建var data=Math.PI; 直接使用Math.PI;像Java中的靜態(tài)類一樣凤瘦。
3)常用屬性:都是數(shù)學(xué)常數(shù)宿礁,如:Math.E(自然數(shù))、Math.PI(圓周率)蔬芥、Math.LN2(ln2)梆靖、Math.LN10(ln10)等
4)常用方法:
①三角函數(shù):Math.sin(x)、Math.cos(x)笔诵、Math.tan(x)等
②反三角函數(shù):Math.asin(x)返吻、Math.acos(x)等
③計算函數(shù):Math.sqrt(x)、Math.log(x)乎婿、Math.exp(x)等
④數(shù)值比較函數(shù):Math.abs(x)测僵、Math.max(x,y,…)、Math.random()谢翎、Math.round(x)等
【注意:①Math.random():是一個 >=0 且 <1 的正小數(shù)捍靠;②Math.floor(x):地板沐旨,小于等于x,并且與它最接近的整數(shù)榨婆。注意:將負數(shù)舍入為更小的負數(shù)希俩,而不是向0進行舍入。③Math.ceil(x):天花板纲辽,返回大于等于x颜武,并且與它最接近的整數(shù)。注意:不會將負數(shù)舍入為更小的負數(shù)拖吼,而是向0舍入鳞上。】
Number
是對原始數(shù)值的包裝對象吊档。
1)創(chuàng)建:
① var myNum=new Number(value);
② var myNun=Number(value);
2)方法:
—>toString:數(shù)值轉(zhuǎn)換為字符串
—>toFixed(n):數(shù)值轉(zhuǎn)換為字符串篙议,并保留小數(shù)點后n位數(shù),多了就截斷怠硼,四舍五入鬼贱。少了就用0補足,常用作數(shù)值的格式化香璃。
RegExp
正則表達式對象这难。JavaScript中,正則表達式的應(yīng)用分為兩類:
① 和String對象的三個方法結(jié)合使用葡秒,實現(xiàn)對string的操作姻乓,如:replace/match/search
② 調(diào)用正則表達式對象的常用test方法測試,RegExpObject.test(string):如果字符串string中含有與RegExpObject匹配的文本眯牧,則返回true蹋岩,否則返回false;
1)創(chuàng)建:
① var reg1=/^\d{3,6}$/;
② var reg2=new RegExp("^\d{3,6}$");
Date
用于處理日期和時間
1)創(chuàng)建:
① var now = new Date();//當(dāng)前日期和時間
② var now = new Date("2013/01/01 12:12:12”)/(“Oct 1, 2013”)/(2013,1,1);
2)方法:
—> 讀取相關(guān):getDay()(星期)学少、getDate()剪个、getMonth()、getFullYear()…
—> 修改相關(guān):setDay()版确、setDate()扣囊、setMonth()、setHours() ……
—> 轉(zhuǎn)換字符串:得到某種格式的字符串顯式阀坏,常用于頁面顯式如暖,如:toString()笆檀、toDateString()忌堂、toLocaleTimeString()
Function
函數(shù)。是一組可以隨時隨地運行的語句酗洒。Function對象可以表示開發(fā)者定義的任何函數(shù)士修。函數(shù)實際上是功能完整的對象枷遂。
1)定義::function 函數(shù)名(參數(shù)){ 函數(shù)體; return; }
【注意:由關(guān)鍵字function定義;函數(shù)名的定義規(guī)則與標(biāo)識符一致棋嘲,大小寫敏感酒唉;可以使用變量、常量或表達式作為函數(shù)調(diào)用的參數(shù)沸移;返回值必須使用return痪伦。】
2)調(diào)用:函數(shù)可以通過其名字加上括號中的參數(shù)進行調(diào)用雹锣。如果有多個參數(shù)网沾,則參數(shù)之間用逗號隔開。
3)創(chuàng)建:
① 使用function關(guān)鍵字明文的聲明一個方法(最常用蕊爵,用于功能相關(guān)的方法)
② 使用Function對象創(chuàng)建函數(shù)辉哥,語法:
var functionName=new Function(arg1,...argN,functionBody);//最后一個參數(shù)是方法體,前面的其它參數(shù)是方法的參數(shù)攒射。
<input type="button" value="使用Function對象創(chuàng)建函數(shù)" onclick="testFunction();" />
function testFunction(){
var f = new Function("a","b","alert(a+b);");
f(10,20);
}
【注意:需求:有些方法不需要顯式的存在醋旦,只是為其他方法里所使用(類似于java中的內(nèi)部類);缺陷:方法體不能復(fù)雜会放∷瞧耄】
③ 創(chuàng)建匿名函數(shù),語法:
var func=function(arg1,...argN){ func_body; return value; }
4)全局函數(shù) :可用于所有內(nèi)建的JavaScript對象咧最。常用的全局函數(shù)有:
—> encodeURI(str):把字符串作為URI進行編碼(大寫i)箩张。
—> decodeURI(str):對encodeURI()函數(shù)編碼過的URI進行解碼。
—> parseInt/parseFloat:
—> isNaN(str):判斷文本是否為數(shù)值
—> eval(str):用于計算某個字符串窗市,以得到結(jié)果先慷;或者用于執(zhí)行其中的JavaScript代碼∽刹欤【注意:eval(str)只接受原始字符串作為參數(shù)论熙,如果參數(shù)中沒有合法的表達式和語句,則拋出異常摄狱;如eval(“2+3”)脓诡。】
Arguments
- 是一種特殊對象媒役,在函數(shù)代碼中祝谚,代表當(dāng)前方法被傳入的所有的參數(shù),形成一個數(shù)組酣衷。
2)在函數(shù)代碼中交惯,可以使用arguments訪問所有參數(shù)。
①arguments.length:函數(shù)的參數(shù)個數(shù); ②arguments.[i]:第i個參數(shù)
3)JavaScript中席爽,沒有傳統(tǒng)意義上的重載(方法名相同意荤,但是參數(shù)不同),即:如果方法名相同只锻,則以最后一次定義的為準(zhǔn)玖像。如果想在JavaScript中實現(xiàn)類似于重載的效果,就需要使用arguments對象齐饮。即在同名方法體中判斷參數(shù)的個數(shù)來確定方法體捐寥。如
function(){ if(argumtents.length==1){…} else{…} }