01章 JavaScript入門JavaScript具有相當(dāng)強(qiáng)大的頁面處理能力,是衡量一個(gè)程序員水平高低的重要標(biāo)志。 學(xué)習(xí)JavaScript首先要了解JavaScript的“對象(object)、 類(class)、對象標(biāo)識(shí)(id)、對象名稱(name)” 等重要概念之間的區(qū)別,熟練掌握基本語法。學(xué)習(xí)JavaScript之前必須首先學(xué)會(huì)HTML和CSS。 僅僅從網(wǎng)上搜索下載一些技巧便認(rèn)為自己掌握了JavaScript的人決非是標(biāo)準(zhǔn)的程序員,只會(huì)通過一些工具而不懂概念語法之人, 決不是一位好程序員,甚至根本夠不上程序員的資格。 不同的瀏覽器所支持的JavaScript的語法和功能也略有不同,不同的JavaScript版本之間也同樣有功能區(qū)別, 甚至瀏覽器的不同版本之間也會(huì)有升級的問題。因此這兒只以IE6.0為基準(zhǔn)來介紹。 JavaScript的寫法 <script type="text/javascript"> <!--JavaScript語句<noscript>不支持JavaScript的注釋。</noscript> //--> </script> <!--...//-->是HTML的注釋,JavaScript的注釋和Java相同,單行注釋//,多行注釋用/*...*/。大小文字也是有區(qū)別的。 JavaScript的版本選擇 <script language="javascript1.2"> <!--JavaScript語句// --> </script> 這是HTML4.1以前的寫法,現(xiàn)在一般不用language屬性,而用type屬性 JavaScript保存到外部文件 <script type="text/javascript" src="../test.js"></script> src屬性后的內(nèi)容是帶路徑的文件名,后綴一般用.js。如果保存在多個(gè)文件中,可重復(fù)使用這一語句。 JavaScript對事件操作的聲明 <meta http-equiv="Content-Script-Type" content="text/javascript"> 如果要用onClick等事件時(shí),必須用meta元素的http-equiv來聲明其屬性值為:Content-Script-Type。 JavaScript嵌在HTML中的寫法 <input type="button" value="Click Me!!" onclick="window.alert('Hello!!');">
<a href="javascript:alert('Hello!!');">Click Me</a>如果要用onClick等事件時(shí),必須用meta元素的http-equiv來聲明其屬性值為:Content-Script-Type。 JavaScript執(zhí)行時(shí)序 <html> <head> <script type="text/javascript">alert(documet.title);</script><title>My test</title><script type="text/javascript">alert(documet.title);</script> </head> <body> <script type="text/javascript">alert(document.myFrm.test.value);</script> <form name_myFrm><input name="test" value="My Test"></form> <script type="text/javascript">alert(document.myFrm.test.value);//--> </script> </body> </html> 上例中粉紅色是錯(cuò)的,蘭色才是正確的。當(dāng)Html文中的對象還沒有出現(xiàn)時(shí)就被使用,這顯然不正確。 02章 概念的理解學(xué)習(xí)JavaScript首先要了解JavaScript的“對象(object)、 類(class)、對象標(biāo)識(shí)(id)、對象名稱(name)、動(dòng)態(tài)頁面(DynamicPage)” 等重要概念之間的區(qū)別,熟練掌握基本語法。學(xué)習(xí)JavaScript之前必須首先學(xué)會(huì)HTML和CSS。 對象 對象主要包括Html中各Tag對象和JavaScript中用于運(yùn)算控制的諸如String對象、Date對象等。Html文中的一段文字本身不是對象,但用Tag如<B>...</B>將文字括起來,這就變成了對象,也就可以對其進(jìn)行操作。 對象標(biāo)識(shí) 每個(gè)對象內(nèi)部都可指定一個(gè)標(biāo)識(shí)符,JavaScript便可用來對其進(jìn)行控制。 <span id="code01">Sample1</span> <p id="code01">Sample2</p> <font id="code03" color="red">Sample2</font> <input id="code04" type="button" onClick="func1();"> 對象名稱 與服務(wù)器處有數(shù)據(jù)交換的對象基本都有name屬性,如:<img>、<a>、<input>、<form>等。HTTP在傳送數(shù)據(jù)時(shí)將name一道打包在requst或response里面。而ID是純客戶端的東西,服務(wù)器端無法根據(jù)ID來取得數(shù)據(jù)。 <a name="n01" href="test.html">Sample1</a> <input name="n02" type="text" value="test"> class class是CSS的內(nèi)容,是用來控制對象的位置、尺寸、段落、字體、顏色等。學(xué)習(xí)JavaScript重點(diǎn)就是要控制這些內(nèi)容。 .title {
font-size: medium;
margin: 0;
padding: 0.3em;
color: #ffffff;
background-color: #000000;
}動(dòng)態(tài)頁面 動(dòng)態(tài)頁面是指用JavaScript對Html文(即頁面)的對象的CSS屬性值進(jìn)行控制,從而達(dá)到頁面能動(dòng)態(tài)地變化的效果。 方法和屬性 屬性和方法相當(dāng)于謎題和函數(shù),變量和函數(shù)是對整個(gè)程序而言,方法和屬性是對對象而言。屬性和方法被引用時(shí),前面要加對象。當(dāng)所處的位置正是該對象內(nèi)時(shí),對象吸以省略。 window.alert("Hello"); // 對話框navigator.appName // 瀏覽器的名稱03章 運(yùn)算符JavaScript的運(yùn)算符與Java基本相同,因?yàn)槭荢cript,在數(shù)據(jù)類型的限制方面要松散的多。 賦值、加減乘除、余除 “=、+、-、*、/、%”分別代表“賦值、加減乘除、余除” xx = 3 + 2; // xx的值為 5xx = 3 - 2; // xx的值為: 1xx = 3 * 2; // xx的值為: 6xx = 3 / 2; // xx的值為: 1.5xx = 3 % 2; // xx的值為: 1 增1減1 “++a、a++、--a、a--”分別代表“前增1、后增1、前減1、后減1” a = 5; b = a++; // a的值為: 6、b的值為: 5a = 5; b = ++a; // a的值為: 6、b的值為: 6a = 5; b = a--; // a的值為: 4、b的值為: 5a = 5; b = --a; // a的值為: 4、b的值為: 4 字符串運(yùn)算 作為運(yùn)算符只有“+”來連接2個(gè)字符串,至于查找、截取等功能要用字符串類的各種方法實(shí)現(xiàn)。注意:字符串與其它類型相加時(shí),其它類型將被自動(dòng)轉(zhuǎn)換為字符串類型,再相加。 xx = "abcd" + "xyz" //xx的值為: "abcdxyz"xx = "1234" + 56 //xx的值為: "123456"var dd = new Date(1999, 11, 31); xx = "今天是=" + dd //xx的值為: "今天是=Fri Dec 31 00:00:00 UTC+0900 1999" 邏輯運(yùn)算符 “&&、||、!”分別表示“與、或、非” if ((1 <= mon) && (mon <= 12)) {
alert("xx is between 1 and 12.");
}
if ((xx == "ABC") || (xx == "abc")) {
alert("xx is ABC.");
}
if (!(xx == 5)) {
alert("xx is not five.");
}位運(yùn)算符 “&、|、^、~”分別表示“與、或、異或、取反” xx = 0x87654321 & 0xffff0000; // xx的值為 0x87650000xx = 0x87654321 | 0xffff0000; // xx的值為 0xffff4321xx = 0xffff0000 ^ 0xff00ff00; // xx的值為 0x00ffff00xx = ~0xffff0000; // xx的值為 0x0000ffff “<<、>>、>>>”分別表示“左移、右移、補(bǔ)0右移” xx = 0x12345678 << 8; // xx的值為 0x34567800xx = 0x12345678 >> 8; // xx的值為 0x00123456xx = 0x87654321 >> 8; // xx的值為 0xff876543xx = 0x87654321 >>> 8; // xx的值為 0x00876543 比較運(yùn)算符 相等(==)、不等(--)、大于(>)、小于(<)、大于等于(>=)、小于等于(<=) if (xx == 5) {
alert("xx is five.");
}
if (yy != "ABC") {
alert("yy is not ABC.");
}
if (xx == null) {
alert("xx is Null.");
}
if (yy != null) {
alert("yy is not Null.");
}
if (xx < 123) {
alert("xx is smaller than 123");
}當(dāng)類型不一致時(shí),將被自動(dòng)轉(zhuǎn)換為字符串類型。如果不需要自動(dòng)轉(zhuǎn)換,可以用“===和!==”來代替“==”和“!=”。 if ( 123 == 123 ) { ... } // true(真)if ("123" == "123") { ... } // true(真)if ("123" == 123 ) { ... } // true(真)if ( 123 == "123") { ... } // true(真)if ( 123 === 123 ) { ... } // true(真)if ("123" === "123") { ... } // true(真)if ("123" === 123 ) { ... } // false(假)if ( 123 === "123") { ... } // false(假)復(fù)合運(yùn)算符 加減乘除并賦值(+=、-=、*=、/=、%=、&=、|=、^=、<<=、>>=、>>>=) xx += 5; // xx = xx + 5;xx -= 5; // xx = xx - 5;xx *= 5; // xx = xx * 5;xx /= 5; // xx = xx / 5;xx %= 5; // xx = xx % 5;xx &= 0xff; // xx = xx & 0xff;xx |= 0xff; // xx = xx | 0xff;xx ^= 0xff; // xx = xx ^ 0xff;xx <<= 8; // xx = xx << 8;xx >>= 8; // xx = xx >> 8;xx >>>= 8; // xx = xx >>> 8; 條件運(yùn)算符 “exp1 ? exp2 : exp3”這和Ifelse語句相同功能但用法不同,這是運(yùn)算符。 yy = (xx >= 5) ? "big" : "small"; //若xx>5,則yy的值為: "big"; 若xx<=5,則yy的值為: "small" 逗號(hào)分隔符 主要用于函數(shù)的參數(shù)之間分隔,for循環(huán)語句中也用來分隔語句。 for (i = 0, j = 0; i < 10; i++) {
......
}null時(shí)注意 當(dāng)對象為null時(shí),該對象的方法和屬性都不能使用,要特別注意。 運(yùn)算符的優(yōu)先順序
04章 基本語法JavaScript的流程控制語法基本與Java類似。當(dāng)控制語句部分只有一句時(shí),{}可以省略。 條件分支(if...else...) if (條件) {
......
} else if (條件) {
......
} else {
......
}if (n < 10) {
alert("SMALL");
}if (n < 10) {
alert("SMALL");
} else {
alert("BIG");
}if (n < 10) {
alert("SMALL");
} else if (n > 20) {
alert("BIG");
} else {
alert("NORMAL");
}條件分支(switch) switch (表達(dá)式) {
case 表達(dá)式的值1:
...
break;
case 表達(dá)式的值2:
...
break;
default:
...
break;
}switch (xx) {
case 1:
alert("ONE");
break;
case 2:
alert("TWO");
break;
case 3:
case 4:
alert("THREEorFOUR");
break;
default:
alert("OTHER");
break;
}循環(huán)(while) while (條件) {
......
}n = 0;
while (n < 10) {
document.write(n);
n++;
}循環(huán)(do) do {
......
} while (條件)n = 0;
do {
document.write(n);
n++;
} while (n < 10);循環(huán)(for) for (初始條件; 終止條件; 條件改變語句) {
......
}for (i = 0; i < 10; i++) {
document.write(i);
}for (variable in array) { //數(shù)組的情況下,也可這樣使用
......
}xx = new Array(3);
xx[0] = "A";
xx[1] = "B";
xx[2] = "C";
for (i in xx) {
document.write(xx[i]);
}中斷(break) break; //跳到循環(huán)結(jié)束之后break label; //跳到循環(huán)外的某個(gè)標(biāo)簽處 for (i = 0; i < 10; i++) {
if (i == 5) {
break;
}
document.write(i);
}abc:
for (i = 0; i < 10; i++) {
for (j = 0; j < 10; j++) {
xx = i * 10 + j;
if (xx > 20) {
break abc;
}
document.write(xx + "<br>");
}
}繼續(xù)下一輪循環(huán)(continue) continue; //跳到循環(huán)內(nèi)的開始處continue label; //跳到某個(gè)標(biāo)簽處(循環(huán)內(nèi)外都可以) for (i = 0; i < 10; i++) {
if (i == 5) {
continue;
}
document.write(i);
}abc:
for (i = 0; i < 10; i++) {
for (j = 0; j < 10; j++) {
xx = i * 10 + j;
if (xx > 20) {
continue abc;
}
document.write(xx + "<br>");
}
}對象操作(with) with (對象) {
......
}with (document) {
write(bgColor); write(fgColor);
}05章 數(shù)據(jù)類型雖然JavaScript沒有明確地區(qū)分類型,我們?nèi)砸闱宄韵聨c(diǎn):數(shù)值型和字符串型是最常見的基本類型、字符串同時(shí)作為對象處理的。日期型也是作為對象來處理的。布爾型一向簡單,而數(shù)組需要重點(diǎn)掌握。 數(shù)值型 JJavaScript的數(shù)值型包括10進(jìn)制、8進(jìn)制、16進(jìn)制、實(shí)數(shù)、小數(shù)、整數(shù)等都可以使用。O開頭的整數(shù)是8進(jìn)制,0x開頭的整數(shù)是16進(jìn)制。 12345 // 10進(jìn)制的12345 1.23 // 實(shí)數(shù)的 1.23 1.23e4 // 1.23 × 10的4次方 1.23E4 // 1.23 × 10的4次方 012 // 8進(jìn)制的12(10進(jìn)制的10) 0x1b // 16進(jìn)制的1B(10進(jìn)制的27) 字符串型 字符串的內(nèi)容很多,專門作為一章來學(xué)習(xí)。這兒簡單一提。 str = "這是字符串"; 布爾型 布爾型只有2個(gè)值:true和false。 True、TRUE、False、FALSE等都是錯(cuò)誤的寫法。 ◆ 數(shù)值的0和-0,特殊變量的null、false、NaN、undefined、空字符串("")都作為false處理 ◆ 其它都作為true處理 xx = (3 = 4); //xx的值為: false xx = (100 > 50); //xx的值為: true 日期型 日期型的內(nèi)容也較多,專門作為一章來學(xué)習(xí)。這兒簡單一提。 dd = new Date(1999, 11, 31, 23, 59, 59, 999); 數(shù)組型 嚴(yán)格地說數(shù)組不能算基本數(shù)據(jù)類型,數(shù)組在任何語言中都是必須掌握的。 xx = new Array(3);
xx[0] = "Sun";
xx[1] = "Mon";
xx[6] = "Sat";
yy = new Array("Sun", "Mon", "Thu");對象類 用java的思想來說,一切都是類。事實(shí)上數(shù)值型和布爾型也都封裝了相應(yīng)的類,即Number和Boolean。因過于簡單,不用也罷。 xx = new Number(123); //等價(jià)于: xx = 123;
xx = new Number("123"); //等價(jià)于: xx = palseInt("123");
xx.toString(); //轉(zhuǎn)換成字符串,事實(shí)上,在使用時(shí)JavaScript會(huì)自動(dòng)轉(zhuǎn)換。
xx.toString(16); //轉(zhuǎn)換成16進(jìn)制的字符串: 7B
yy = new Boolean(true); //等價(jià)于: yy = true;另外,Number類中封裝了一些可以直接使用的常數(shù)。 Number.NaN //不正確的數(shù)值 Number.MAX_VALUE //JavaScript可用的最大數(shù) Number.MIN_VALUE //JavaScript可用的最小數(shù) Number.POSITIVE_INFINITY //JavaScript正數(shù)無窮大 Number.NEGATIVE_INFINITY //JavaScript負(fù)數(shù)無窮小 常量 null 空 JavaScript將所有整數(shù)和小數(shù)都轉(zhuǎn)換為浮點(diǎn)小數(shù),當(dāng)用不正確的類型數(shù)據(jù)進(jìn)行數(shù)學(xué)運(yùn)算時(shí)就轉(zhuǎn)換成NaN 正數(shù)大到JavaScript無法表示時(shí),便轉(zhuǎn)換成Positive Infinity 負(fù)數(shù)小到JavaScript無法表示時(shí),便轉(zhuǎn)換成Negative Infinity avaScript是區(qū)分正0和負(fù)0的。 null不屬于任何一種數(shù)據(jù)類型,表示“沒有值”。你可以將null賦給某一變量, 這等于刪除這個(gè)變量的值,但卻保留這個(gè)變量的定義。。 當(dāng)null參于運(yùn)算時(shí)便產(chǎn)生undefined結(jié)果。 06章 字符串類型字符串類型在在在論何語言都是很重要的,JavaScript中的字符串替換功能要用到正則表達(dá)式,必須熟練掌握。 新建字符串 幾乎所有類型都自動(dòng)轉(zhuǎn)換為字符串。字符串既可以用String類來生成,也可以用各種類型的對象的toString()方法來轉(zhuǎn)換。 xx = "abc";
xx = new String("abd"); //String類yy = 123;
xx = yy.toString(); //Integer類的toString()方法yy = new Date(2004,11,25);
xx = yy.toString(); //Date類的toString()方法xx = "abc" + 123 + "xyz"; //123自動(dòng)轉(zhuǎn)換為字符串轉(zhuǎn)意字符 以下的轉(zhuǎn)意字符要注意。例:在對話框中輸出2行文字:alert('你好!\n歡迎光臨。'); \n - 換行 \r - 回車 \f - フォームフィード \b - 退格字符 \t - Tab字符 \' - 單引號(hào)(') \" - 雙引號(hào)(") \\ - 反斜杠(\) \nnn - 8進(jìn)制(例 "A" 寫成: "\101") \xnn - 16進(jìn)制(例 "A" 寫成: \x41") \unnnn - Unicode字符(例 "あ" 寫成: "\u3042") 字符串的長度 string.length //取字符串的長度,漢字和英數(shù)字都作為1個(gè)Unicode字符。 xx = "abc五筆字型".length; //xx的值為: 7xx = "abc\n五筆字型".length; //xx的值為: 8 取字符串的部分內(nèi)容 string.charAt(n) //取第n個(gè)字符 xx = "abcd".charAt(2) //xx的值為: "c"xx = "靜坐常思自己過".charAt(2) //xx的值為: "常" string.substring(from,to) //取從from到to的字符串(不包含第to個(gè)字符)string.substring(from) //取從from開始到最后的字符串 //注:負(fù)數(shù)當(dāng)作0處理,超過長度時(shí),超過部分忽略不計(jì)。 dd = "靜坐常思自己過".substring(2) //xx的值為: "常思自己過"dd = "靜坐常思自己過".substring(0,2) //xx的值為: "靜坐"dd = "靜坐常思自己過".substring(-5,2) //xx的值為: "靜坐"dd = "靜坐常思自己過".substring(0,-2) //xx的值為: ""dd = "靜坐常思自己過".substring(2,20) //xx的值為: "常思自己過"dd = "靜坐常思自己過".substring(2,-7) //xx的值為: "靜坐" string.substr(from, len) //取從from的len個(gè)字符串 //注:from是負(fù)數(shù)時(shí),則從右向左取數(shù)。len為負(fù)數(shù)時(shí)作0處理。 dd = "靜坐常思自己過".substr(2) //xx的值為: "常思自己過"dd = "靜坐常思自己過".substr(1,3) //xx的值為: "坐常思"dd = "靜坐常思自己過".substr(-2) //xx的值為: "己過"dd = "靜坐常思自己過".substr(1,12) //xx的值為: "坐常思自己過"dd = "靜坐常思自己過".substr(1,-2) //xx的值為: "" string.slice(from [, to]) //注:當(dāng)from為0或正數(shù)時(shí),與substring完全相同。from為0或負(fù)數(shù)時(shí),則從右向左取數(shù)。 dd = "靜坐常思自己過".substring(2) //xx的值為: "常思自己過"dd = "靜坐常思自己過".substring(-1,3) //xx的值為: "自己" 字符串的分割與連接 string.split(sep [,limit]) //將字符串按sep分割limit次。 //注:sep不指定時(shí),返回整個(gè)字符串,limit為負(fù)數(shù)時(shí),等同不指定。 xx = "aa:bb:cc:dd:ee:ff".split(":"); //結(jié)果: xx[0] = "aa"; xx[1] = "bb"; xx[2] = "cc";
// xx[3] = "dd"; xx[4] = "ee"; xx[5] = "ff";xx = "aa:bb:cc:dd:ee:ff".split(":", 2); //結(jié)果: xx[0] = "aa"; xx[1] = "bb";xx = "aa:bb:cc:dd:ee:ff".split(":", -2); //結(jié)果: xx = "", 等同于split(":",0)。string.concat(string2) //連接字符串,與+功能相同。 xx = "謙受益".concat("滿招損"); //等價(jià)于: xx = "謙受益"+"滿招損";字符串的查找 string.indexOf(key[,from]) //從from個(gè)字符開始查找字符串按key。 //注:若找不到,則返回-1。找到則返回所在的位置。 xx = "abcdefABCDEF".indexOf("CD"); //xx的值為: 8xx = "abcdefABCDEF".indexOf("cd",2); //xx的值為: 2xx = "abcdefABCDEF".indexOf("cd",3); //xx的值為: -1string.lastIndexOf(key[,from]) //從from個(gè)字符開始向左查找字符串按key。 //注:若找不到,則返回-1。找到則返回所在的位置。 xx = "abcdefabcdef".lastIndexOf("cd"); //xx的值為: 8xx = "abcdefabcdef".lastIndexOf("cd",7); //xx的值為: 2xx = "abcdefabcdef".lastIndexOf("cd",0); //xx的值為: -1字符串的替換 string.replace(regexp,newString) //string的內(nèi)容中與regexp正則表達(dá)式相符的部分替換成newString。 //注:必須具備正則表達(dá)式的知識(shí)。 xx = "abcdefABCDEF".replace("def","xyz"); //xx的值為: "abcxyzABCDEF"string.toUpperCase() //英文大寫string.toLowerCase() //英文小寫 xx = "abcdefABCDEF".toUpperCase(); //xx的值為: ABCDEFABCDEFxx = "abcdefABCDEF".toLowerCase(); //xx的值為: abcdefabcdef 正則表達(dá)式的使用 string.match(regexp) //返回與正則表達(dá)式匹配的字符串 xx = "abcdefABCDEF".match(/def/i); //xx的值為: "def"xx = "abcdefABCDEF".match(/xyz/i); //xx的值為: null string.match(regexp) //返回與正則表達(dá)式匹配的字符串的位置,找不到返回-1 xx = "abcdefABCDEF".match(/def/i); //xx的值為: 3xx = "abcdefABCDEF".match(/xyz/i); //xx的值為: -1 字符串與字符的變換 string.charCodeAt(n) //取第n個(gè)字符 xx = "abcdefABCDEF".charCodeAt(2); //xx的值為: "c"xx = "abcdefABCDEF".charCodeAt(-1); //xx的值為: NaNxx = "abcdefABCDEF".charCodeAt(20); //xx的值為: NaN String.fromCharCode(num1, ... , numN) //將N個(gè)字符轉(zhuǎn)換為字符串 xx = String.fromCharCode(0x41, 0x42, 0x43); //xx的值為: "ABC"xx = String.fromCharCode("A", "B", 0x43); //JavaScript出錯(cuò)字符串與其它類型的變換 ParseInt(string) //字符串轉(zhuǎn)換為整型ParseFloat(string) //字符串轉(zhuǎn)換為浮點(diǎn)型Eval(string) //取第n個(gè)字符 xx = "abcdefABCDEF".charCodeAt(2); //xx的值為: "c"xx = "abcdefABCDEF".charCodeAt(-1); //xx的值為: NaNxx = "abcdefABCDEF".charCodeAt(20); //xx的值為: NaN String.fromCharCode(num1, ... , numN) //將N個(gè)字符轉(zhuǎn)換為字符串 xx = String.fromCharCode(0x41, 0x42, 0x43); //xx的值為: "ABC"xx = String.fromCharCode("A", "B", 0x43); //JavaScript出錯(cuò)字符串轉(zhuǎn)換成帶Tag修飾 string.bold() //<b>string</b>string.italics() //<i>string</i>string.fixed() //<tt>string</tt>string.big() //<big>string</big>string.small() //<small>string</small>string.blink() //<blink>string</blink>string.strike() //<strike>string</strike>string.sup() //<sup>string</sup>string.sub() //<sub>string</sub>string.fontcolor(color) //<font color=color>string</font>string.fontsize(size) //<font size=size>string</font>string.anchor(name) //<a name=name>string</a>string.link(name) //<a href=name>string</a> xx = "abcdefABCDEF".fixed(); //xx的值為: "<fix>abcdefABCDEF</fix>" 07章 日期類型同樣,日期類型也是非常重要的數(shù)據(jù)類型,必須熟練掌握。 新建日期 date = new Date(...); //...部分是:“年、月、日、時(shí)、分、秒”的組合,數(shù)字和字符串皆可。 //注:月份是0~11,而不是1~12。 //全部缺省,則表示當(dāng)前年月日時(shí)分秒 //只有年份,則表示1970年01月01日 09:00:00 //只有年月,則日用01表示,時(shí)分秒則用00:00:00表示 //只有年月日,則時(shí)分秒則用00:00:00表示 dd = new Date(0,0); //dd的結(jié)果: Mon Jan 1 00:00:00 UTC+0900 1900dd = new Date(99,12); //dd的結(jié)果: Thu Jan 1 09:00:02 UTC+0900 1970 (年份無效)dd = new Date("2004",10); //dd的結(jié)果: Mon Nov 1 00:00:00 UTC+0900 2004dd = new Date(2004,10,21);//dd的結(jié)果: Sun Nov 21 00:00:00 UTC+0900 2004注:年份為0~99時(shí),則年份自動(dòng)加上1900,變成:1900~1999 dd = new Date(0,0); //dd的結(jié)果: Sun Nov 21 21:16:38 UTC+0900 2004dd = new Date(99,11); //dd的結(jié)果: Wed Dec 1 00:00:00 UTC+0900 1999dd = new Date(99,0); //dd的結(jié)果: Fri Jan 1 00:00:00 UTC+0900 100dd = new Date(9999,11); //dd的結(jié)果: Wed Dec 1 00:00:00 UTC+0900 9999 注:時(shí)刻省略時(shí),則用0代替,微秒也可以表示。 dd = new Date(2004,0,1,23); //dd的結(jié)果: Thu Jan 1 23:00:00 UTC+0900 2004dd = new Date(2004,0,1,23,59); //dd的結(jié)果: Thu Jan 1 23:59:00 UTC+0900 2004dd = new Date(2004,0,1,23,59,59); //dd的結(jié)果: Thu Jan 1 23:59:59 UTC+0900 2004dd = new Date(2004,0,1,23,59,59,999);//dd的結(jié)果: Thu Jan 1 23:59:59 UTC+0900 2004 字符串的日期格式 dd = new Date("1999/12/31 23:59:59"); //1999年11月31日 星期5 23:59:59dd = new Date("Dec 31, 1999 23:59:59"); //同上dd = new Date("December 31, 1999 23:59:59"); //同上dd = new Date("1999-12-31 23:59:59"); //不正確,這與Windows控制面板中的設(shè)置有關(guān)日期信息的取得和設(shè)置 date.getFullYear() //取得日期的年(YYYY)date.setFullYear(year) //date.getYear() //取得日期的年:1900~1999年,則返回YY,其它返回YYYYdate.setYear(year) //date.getMonth() //取得日期的月(MM)date.setMonth(mon) //date.getDate() //取得日期的日(DD)date.setDate(date) //date.getDay() //取得日期的星期(WEEK)date.getHours() //取得日期的時(shí)(HH)date.setHours(hour) //date.getMinutes() //取得日期的分(MI)date.setMinutes(min) //date.getSeconds() //取得日期的秒(SS)date.setSeconds(sec) //date.getMilliseconds() //取得日期的微秒(MS)date.setMilliseconds(msec) // dd = new Date(1985,4,19,23,59,30,999); yyyy = date.getFullYear() 了 //結(jié)果為: 1985yy = date.getYear() //結(jié)果為: 85mm = date.getMonth() //結(jié)果為: 4 (五月)dd = date.getDate() //結(jié)果為: 19ww = date.getDay() //結(jié)果為: 0 (星期日)hh = date.getHours() //結(jié)果為: 23mi = date.getMinutes() //結(jié)果為: 59ss = date.getSeconds() //結(jié)果為: 30ms = date.getMilliseconds() //結(jié)果為: 999dd.setFullYear(2004); //結(jié)果為: Wed May 19 23:59:30 UTC+0900 2004 國際標(biāo)準(zhǔn)時(shí)的取得和設(shè)置 date.getUTCFullYear() //取得日期的年(YYYY)date.setUTCFullYear(year) date.getUTCYear() //取得日期的年:1900~1999年,則返回YY,其它返回YYYYdate.setUTCYear(year) date.getUTCMonth() //取得日期的月(MM)date.setUTCMonth(mon) date.getUTCDate() //取得日期的日(DD)date.setUTCDate(date) date.getUTCDay() //取得日期的星期(WEEK)date.getUTCHours() //取得日期的時(shí)(HH)date.setUTCHours(hour) date.getUTCMinutes() //取得日期的分(MI)date.setUTCMinutes(min) date.getUTCSeconds() //取得日期的秒(SS)date.setUTCSeconds(sec) date.getUTCMilliseconds() //取得日期的微秒(MS)date.setUTCMilliseconds(msec) dd = new Date(1985,4,1,1,59,30,999); d1 = dd.getMonth()+"月"+dd.getDate()+"日 星期"+dd.getDay() //4月1日 星期3t1 = dd.getHours()+":"+dd.getMinutes()+":"+dd.getSeconds() //1:59:30d2 = dd.getUTCMonth()+"月"+dd.getUTCDate()+"日 星期"+dd.getUTCDay() //3月30日 星期2t2 = dd.getUTCHours()+":"+dd.getUTCMinutes()+":"+dd.getUTCSeconds() //16:59:30 國際時(shí)差 date.getTimezoneOffset() 返回日期對象采用的時(shí)區(qū)與格林威治時(shí)間所差的分鐘數(shù)。在格林威治東方的市區(qū),該值為負(fù),例如:中國時(shí)區(qū)(GMT+0800)返回“-480”。 注:Date 日期對象。這個(gè)對象可以儲(chǔ)存任意一個(gè)日期,從 0001 年到 9999 年,并且可以精確到毫秒數(shù)(1/1000 秒)。 在內(nèi)部,日期對象是一個(gè)整數(shù),它是從 1970 年 1 月 1 日零時(shí)正開始計(jì)算到日期對象所指的日期的毫秒數(shù)。 如果所指日期比 1970 年早,則它是一個(gè)負(fù)數(shù)。所有日期時(shí)間,如果不指定時(shí)區(qū),都采用“UTC”(世界時(shí))時(shí)區(qū), 它與“GMT”(格林威治時(shí)間)在數(shù)值上是一樣的。 (GMT-12:00) 國際換日線以西, 瓜加林島(GMT-11:00) 中途島, 薩摩亞(GMT-10:00) 夏威夷(GMT-9:00) 阿拉斯加(GMT-8:00) 太平洋時(shí)區(qū) (美 & 加)(GMT-7:00) 山區(qū)時(shí)間 (美 & 加)(GMT-6:00) 中央時(shí)間 (美 & 加), 墨西哥(GMT-5:00) 東部時(shí)間 (美 & 加), 波哥大, 利馬, 基多(GMT-4:00) 大西洋 時(shí)區(qū) (加), 卡拉卡斯(委內(nèi)瑞拉), 拉巴斯(玻利維亞)(GMT-3:30) 紐芬蘭(GMT-3:00) 巴西利亞, 布宜諾艾利斯, 佐治敦(GMT-2:00) 大西洋中部(GMT-1:00) 亞速爾群島, 維德角群島(GMT) 格林威治中央標(biāo)準(zhǔn)時(shí)間, 倫敦, 都柏林, 里斯本, 卡薩布蘭卡, 蒙羅維亞(GMT+1:00) 中西非, 柏林, 羅馬, 斯德哥爾摩, 布魯賽爾, 馬德里, 巴黎(GMT+2:00) 布加勒斯特, 哈拉雷, 皮托里, 耶路撒冷, 開羅, 南非(GMT+3:00) 巴格達(dá), 科威特, 利雅德, 莫斯科, 聖彼得堡(GMT+3:30) 德黑蘭(GMT+4:00) 巴庫, 第比利斯, 葉里溫, 阿布達(dá)比(GMT+4:30) 喀布爾(GMT+5:00) 伊卡特林堡, 伊斯蘭馬巴德, 克洛其, 塔什干(GMT+5:30) 辰內(nèi), 加爾各答, 孟拜, 新德里(GMT+6:00) 阿馬提, 達(dá)卡, 可倫坡(GMT+7:00) 曼谷, 河內(nèi), 雅加達(dá)(GMT+8:00) 北京,臺(tái)灣,香港,新加坡,伯斯,烏蘭巴突(GMT+9:00) 東京, 漢城, 大阪, 札幌, 亞庫次克(GMT+9:30) 愛德藍(lán), 達(dá)爾文(GMT+10:00) 布里斯本, 坎培拉, 墨爾本, 雪梨, 海參威(GMT+11:00) 馬加丹, 所羅門群島, 新加勒多尼亞(GMT+12:00) 奧克蘭(紐西蘭),威靈頓(紐西蘭首都),斐濟(jì),堪察加半島,馬紹爾群島現(xiàn)在當(dāng)?shù)貢r(shí)間: 2021.06.19 星期一 1:26:07 日期與字符串的轉(zhuǎn)換 date.toString() //轉(zhuǎn)換為字符串,這與自動(dòng)轉(zhuǎn)換結(jié)果相同 date.toLocaleString() //轉(zhuǎn)換為當(dāng)?shù)馗袷降淖秩未? date.toGMTString() //轉(zhuǎn)換為GMT格式的字任串 date.toUTCString() //轉(zhuǎn)換為UTC格式的字任串 dd = new Date("1999/12/31 23:59:59");
xx = dd.toString() //xx的值為: "Fri Dec 31 23:59:59 UTC+0900 1999"xx = dd.toLocaleString() //xx的值為: "1999年12月31日 23:59:59"xx = dd.toGMTString() //xx的值為: "Fri, 31 Dec 1999 14:59:59 UTC"xx = dd.toUTCString() //xx的值為: "Fri, 31 Dec 1999 14:59:59 UTC"日期與數(shù)的轉(zhuǎn)換 為了說明方便,此處將“1970年1月1日0時(shí)0分0秒(UTC)開始的微秒數(shù)”稱為“絕對時(shí)間” date.getTime() //取得“絕對時(shí)間”date.setTime(time) //設(shè)置“絕對時(shí)間”date.UTC(year,mon,day,hour,min,sec) //取得指定日期的“絕對時(shí)間”date.parse(string) //轉(zhuǎn)換“絕對時(shí)間”成日期 dd = new Date("1970/1/1 00:00:59");
xx = dd.getTime() //xx的值為: -32341000xx = dd.setTime(24*3600) //xx的值為: "Fri Jan 2 09:00:00 UTC+0900 1970"08章 數(shù)組JavaScript中沒有多維數(shù)組,只有一維數(shù)組。因?yàn)閿?shù)組成員的類型是任意,所以,可以對每一個(gè)數(shù)組成員再賦給它一個(gè)數(shù)組的方式來解決。數(shù)組的基數(shù)從0開始。 新建數(shù)組 array = new Array() //定義一個(gè)數(shù)組。其元素個(gè)數(shù)為0array = new Array(n) //定義一個(gè)數(shù)組。其元素個(gè)數(shù)為narray = new Array(e1, e2, ...) //定義一個(gè)數(shù)組,對其每個(gè)元素賦上初值 //注:JavaScript中數(shù)組元素的個(gè)數(shù)可以任意增加 xx = new Array(); //xx的長度是0xx[0] = "January"; //xx的長度變?yōu)?xx[1] = "February"; //xx的長度變?yōu)?xx[11] = "December"; //xx的長度變?yōu)?2 也可以在新建數(shù)組時(shí)直接賦值 yy = new Array("January", "February", null, null, null, null, null, null, null, null, null, "December");//結(jié)果與上例相同//數(shù)組的序號(hào)也可以用字符串代替, 但排序可能有問題 xx = new Array(); xx["Jan"] = "January"; xx["Feb"] = "February"; xx["Dec"] = "December"; 數(shù)組的元素再定義成數(shù)組, 便可以產(chǎn)生多維數(shù)組或樹形數(shù)組 xx = new Array(3); //結(jié)果:for (i = 0; i < xx.length; i++) { //xx[0][0]=0 xx[1][0]=10 xx[2][0]=20
xx[i] = new Array(4); //xx[0][1]=1 xx[1][1]=11 xx[2][1]=21
for (j = 0; j < xx[i].length; j++) { //xx[0][2]=2 xx[1][2]=12 xx[2][2]=22
xx[i][j] = i * 10 + j; //xx[0][3]=3 xx[1][3]=13 xx[2][3]=23
} //} //--------------------------------------------------------------------------------------//以下是九九乘法表的例子xx = new Array(9);
for (i = 0; i < xx.length; i++) {
xx[i] = new Array(i+1);
for (j = 0; j < i+1; j++) {
xx[i][j] = (i+1) * (j+1);
}
}數(shù)組長度的取得 array.length yy = new Array("Sun", "Mon", "Thu");
len = yy.length; //len的值為: 3數(shù)組的連結(jié) array.concat(array2, ...) //兩個(gè)數(shù)組的連接 xx = new Array("Sun", "Mon", "Tue", "Wed");
yy = new Array("Thu", "Fri", "Sat");
zz = xx.concat(yy); //zz的值: "Sun", ...., "Sat"array.join([separator]) //用分隔符將數(shù)組個(gè)元素連接起來 xx = new Array("2004", "12", "07");
yy = xx.join("/"); // yy的值: "2004/12/07"數(shù)組的排序 array.sort(); //按升序排序array.reverse(); //按降序排序 xx = new Array(9,1,7,3); xx.sort(); //xx的結(jié)果是: 1,3,7,9xx.reverse(); //xx的結(jié)果是: 9,7,3,1 array.sort([func]); //這是一個(gè)讓人笑掉大牙的排序 function sortMethod(a, b) { //先定義一個(gè)函數(shù),函數(shù)名任意起名
return a - b; //參數(shù)必須2個(gè),參數(shù)名任意起名} //數(shù)組內(nèi)部比較時(shí)根據(jù)return值來決定//其它資料說:“正數(shù):升序 0:不排序 負(fù)數(shù):降序” --錯(cuò)誤的說法//“參數(shù)1-參數(shù)2:升序 0:不排序 參數(shù)2-參數(shù)1:降序” --正確的說法xx = new Array(9,1,7,3);
xx.sort(sortMethod); //xx的結(jié)果是: 1,3,7,9//將上面改成: return b-a; //xx的結(jié)果是: 9,7,3,1//將上面改成: return b-b; //xx的結(jié)果是: 9,1,7,3取數(shù)組的子集 array.slice(start [, end]) //start到end的子集,end沒有則到最后 xx = new Array("A", "B", "C", "D""E", "F", "G");
xx.slice(3); //xx的結(jié)果: "D", "E", "F", "G"xx.slice(1,3); //xx的結(jié)果: "B", "C", "D"序列化 array.toString() //所有的類幾乎都有toString方法。 xx = new Array("A", "B", "C", "D", "E", "F", "G");
xx.toString(); //xx的結(jié)果: "A, B, C, D, E, F, G"09章 數(shù)學(xué)函數(shù)JavaScript的數(shù)學(xué)函數(shù)全部封裝在Math類里面,雖然使用頻率不是太高,但卻是必不可少的。 常量 Math.PI //圓周率:3.14159265Math.E //自然對數(shù)的底:2.718Math.SQRT2 //2的平方根:1.414Math.SQRT1_2 //1/2的平方根:0.707Math.LN2 //2的自然對數(shù):0.693Math.LN10 //10的自然對數(shù):2.302Math.LOG2E //2為底e的對數(shù):1.442Math.LOG210E //10為底e的對數(shù):0.434 隨機(jī)數(shù) Math.random() //產(chǎn)生一個(gè)大于等于0小于1的隨機(jī)數(shù) xx = Math.floor(Math.random() * 12); //產(chǎn)生一個(gè)大于等于0小于12的隨機(jī)數(shù) 小數(shù)部分的舍入 Math.ceil() //小數(shù)部分不為0,則強(qiáng)行進(jìn)1Math.floor() //小數(shù)部分強(qiáng)行舍去,即取整Math.round() //小數(shù)部分四舍五入 xx = Math.ceil(3.0); //xx的值為3xx = Math.ceil(2.001); //xx的值為3xx = Math.floor(3.99); //xx的值為3xx = Math.round(2.5); //xx的值為3xx = Math.round(3.49); //xx的值為3 最大、最小、絕對值 Math.max(x,y); //取最大值Math.min(x,y); //取最小值Math.abs(x); //取絕對值 xx = Math.max(-20,3); //xx的值為3xx = Math min(23,3); //xx的值為3xx = Math.abc(-3); //xx的值為3 乘方、開平方、對數(shù) Math.pow(n, m); //n的m次乘方Math.exp(m); //e的m次乘方Math.sqrt(n); //n的平方根Math.log(n); //e為底n的對數(shù) //注: 開n次方的函數(shù)沒有,但可以根據(jù)對數(shù)求得。 xx = Math.pow(2,10); //xx的值為: 1024xx = Math.exp(3); //xx的值為: 20.085536923187668xx = Math.sqrt(10); //xx的值為: 3.1622776601683795xx = Math.log(10); //xx的值為: 2.302585092994046 三角函數(shù) Math.sin(m); //正弦: (-1~1)Math.cos(m); //余弦: (-1~1)Math.tan(m); //正切: (-∞~∞) //注: 度數(shù)采用的是弧度,180度應(yīng)轉(zhuǎn)化為π(即Math.PI),36度也就是36/180*Math.PI。 //沒有余切函數(shù),余切為正切的倒數(shù)。 xx = Math.sin(30/180*Math.PI); //xx的值為: 0.49999999999999994yy = Math.cos(30/180*Math.PI); //yy的值為: 0.8660254037844387zz = Math.tan(45/180*Math.PI); //zz的值為: 0.9999999999999999ww = eval(Math.pow(xx,2)) + eval(Math.pow(yy,2)); //zz的值為: 1 Math.asin(m); //反正弦: (-π/2~π/2)Math.acos(m); //反余弦: (0~π)Math.atan(m); //反正切: (-π/2~π/2) xx = Math.asin(0.5)*180/Math.PI; //xx的值為: 30.000000000000003yy = Math.acos(0.8660254037844387)*180/Math.PI; //yy的值為: 29.999999999999993zz = Math.atan(1)*180/Math.PI; //zz的值為: 45 Math.atan2(y,x); //根據(jù)(x,y)的坐標(biāo)求弧度: (-π~π) //注: 參數(shù)是反過來寫的。 xx = Math.atan2(1, 1.732) //xx的值為: 0.5236114777699694 //即: (1.732,1)坐標(biāo)的度數(shù)為: 30度 取最大最小值 Math.max(x,y); //取x和y的最大值Math.min(x,y); //取x和y的最小值 xx = Math.max(23, -100); //xx的值為: 23xx = Math.min(23, -100); //xx的值為: -100 10章 函數(shù)在JavaScript中函數(shù)的定義比其他語言自由的多,過程也是函數(shù)。函數(shù)可以給他一個(gè)返回值,也可以不給。參數(shù)即可以顯式定義,也可以不定義而在調(diào)用時(shí)直接傳遞。注意,JavaScript中函數(shù)變成了對象,這樣一來可以解決許多疑難雜癥,不過,使用時(shí)要當(dāng)心。 關(guān)于參數(shù)傳遞,即形式參數(shù)還是值參數(shù)。JavaScript和Java是完全相同,是值傳遞參數(shù),也就是說,在函數(shù)體中,不管參數(shù)如何被修改,都不影響調(diào)用處變量的值。 當(dāng)參數(shù)是對象時(shí),該對象的屬性值被修改時(shí),外面調(diào)用處的內(nèi)容也同時(shí)被修改。因?yàn)橹祩鬟f參數(shù)時(shí),所傳送的實(shí)際上是地址,也就是函數(shù)外面的對象地址被傳經(jīng)來了,所以函數(shù)里面和外面用的是同一對象。(初學(xué)者可以只記住現(xiàn)象。) 函數(shù)定義 //標(biāo)準(zhǔn)函數(shù)的寫法function funcName (arg1, arg2, ...) {
···
return retValue;
}xx = funcName(para1, para2, ...); //沒有返回值的函數(shù)寫法function funcName (arg1, arg2, ...) {
··· //return retValue;}funcName(para1, para2, ...);//如果硬要寫成以下格式,則xx的結(jié)果為: "undefined"。xx = funcName(para1, para2, ...); //xx的結(jié)果為: "undefined" //隱式使用參數(shù)的函數(shù)寫法function funcName () { //用法參考
for (i=0; i<funcName.arguments.length; i++) {
alert(funcName.arguments[i]);
}
···
}xx = funcName("aaa",123); //結(jié)果顯示2次對話框//作為對象的函數(shù)寫法//和上面的方法相同,這種寫法不常見funcName = function(arg1, arg2, ..., statements) {
···
}//一次性被使用的函數(shù)寫法//這是上面方法的引申,一般沒有參數(shù),函數(shù)名也不需要。例如:window.onbeforeunload = function() {
···
}參數(shù)傳遞 //下例傳遞3種類型的數(shù)據(jù)(注意:初學(xué)者不要深究)function testPara(objX1, objX2, strY, intZ) {
objX1.value = "對象1內(nèi)容已經(jīng)被修改"; objX2 = objX1;
//注意和上一句的區(qū)別
strY = "字符串沒有被修改";
intZ = 9876;
}<!--以下是HTML文中的例子--><input id="id1" value="原先的對象1內(nèi)容">
<input id="id2" value="原先的對象2內(nèi)容">
<script type="text/javascript">
<!--var objA1 = document.getElementById("id1");
var objA2 = document.getElementById("id2");
var strB = "原先的字符串";
var intC = 1234;testPara(objA1, objA2, strB, intC);
alert(objA1.value); //顯示: 對象1內(nèi)容已經(jīng)被修改alert(objA2.value); //顯示: 原先的對象2內(nèi)容alert(strB); //顯示: 原先的字符串a(chǎn)lert(intC); //顯示: 1234// -->
</script>參數(shù)的取得 func.arguments //結(jié)果是數(shù)組,數(shù)組長度就是參數(shù)個(gè)數(shù) 11章 對象JavaScript中的對象有2部分,一是HTML文中定義的對象,可以直接使用。一是用JavaScript語句新產(chǎn)生的對象。本章講述的是后一種的特例,即定義一個(gè)新的類以及類的屬性、方法。上一章講到函數(shù)也是對象,準(zhǔn)確地說應(yīng)該叫類,只不過權(quán)威資料上既然那么寫,大家便一直這么稱呼。 類的定義 類的構(gòu)造函數(shù)function MyClass() { //和普通的函數(shù)定義完全相同
··· //構(gòu)造函數(shù)的參數(shù)是任意的}類的屬性function MyClass(para1, para2, ...) { //類的所有屬性必須在構(gòu)造函數(shù)中
this.att1 = para1; //用this指定,并賦上初始值。
this.att2 = "." + para2; //不需要賦值的屬性可以賦null。}類的方法function methodOfMyClass() { //事先定義一個(gè)函數(shù)備用,
alert(this.att1 + this.att2); //然后在下面的構(gòu)造函數(shù)中指定。} //用到當(dāng)前類的屬性時(shí),this不可缺。function MyClass(para1, para2, ...) { //構(gòu)造函數(shù)中不指定一下,上面的函數(shù)就變成了普通函數(shù),而不是類的方法this.att1 = para1; //屬性1this.att2 = "." + para2; //屬性2this.method1 = methodOfMyClass; //構(gòu)造函數(shù)中指定前面定義的函數(shù)名} //這是回調(diào)函數(shù)的用法類的實(shí)例(被使用)function test(){
var obj = new MyClass("諸葛", "孔明");
obj.method1(); //結(jié)果顯示對話框:“諸葛.孔明”
alert(obj.att1); //結(jié)果顯示對話框:“諸葛”}生成一個(gè)對象實(shí)例 object = new Object(); //變量先賦于一個(gè)既存對象的實(shí)例。 var obj = new Date();
var myobj = new MyClass("1989","06");取類的構(gòu)造函數(shù)定義 object.constructor; //取類的定義程序,注意:這是屬性,不是方法 //例子1:JavaScript已經(jīng)定義好的類var now = new Date(); //xx的內(nèi)容: function Date() {xx = now.constructor; // [native code]
// }//例子2:自定義的類function myClass(){ //這3行內(nèi)容顯示在下面的對話框中
this.id = Math.random(); //} //var myobj = new MyClass();
alert(myobj.constructor); //對話框中顯示上面3行類屬性的增加 Object.prototype.newAttName; //對已經(jīng)定義的類增加新的屬性 Date.prototype.DC = "公元前"; xx = new Date(); alert(xx.DC); //顯示:"公元前"xx.DC = "公元后"; alert(xx.DC); //顯示:"公元后" 序列化 object.toString(); //類都有toString()方法,也可覆蓋它 function myToString() { //事先定義一個(gè)函數(shù),以備下面的類的方法用
return this.id + this.Name;
}
function myClass(){
this.id = "abc";
this.name = "xyz"
this.toString = myToString; //將上面定義的函數(shù)變成序列化的方法}
var myobj = new MyClass();
alert(myobj.toString()); //對話框中顯示: "abcxyz"求值 object.valueOf(); //根據(jù)類型求值 //注: Number型,返回?cái)?shù)值; String型,返回字符串; //日期型,返回getTime() var strX = "abcd"; var intX = 123; var dateX = new Date(); alert(strX.valueOf()); //對話框中顯示: "abcd"alert(intX.valueOf()); //對話框中顯示: 123alert(dateX.valueOf()); //對話框中顯示: 1102520463140 12章 正則表達(dá)式正則表達(dá)式由來已久,查找替換功能非常強(qiáng)大,但模板難記復(fù)雜。 JavaScript中String對象的match()、replace()這2個(gè)方法都要使用正則表達(dá)式的模板。 當(dāng)模板內(nèi)容與字符串不相匹配時(shí),match()返回null,replace()返回原字符串。 正則表達(dá)式的模板對象 //標(biāo)準(zhǔn)寫法regexp = new RegExp(pattern[, flag]); pattern: 模板的用法是關(guān)鍵,也是本章的主要內(nèi)容。 flag: "i"(ignore)、"g"(global)、"m"(multiline)的組合 i-忽略大小寫,g-反復(fù)檢索,m-多行檢索flag中沒有g(shù)時(shí),返回字符串,有g(shù)時(shí)返回字符串?dāng)?shù)組 var reg = new RegExp("飛雪","g");
var str = "風(fēng)雨送春歸飛雪迎春到,飛雪連天向天橫";
var xx = str.(str.match(reg)); //xx的結(jié)果: xx[0]="飛雪"alert(xx); // xx[1]="飛雪"//常用寫法regexp = new RegExp(/pattern /[flag]); //去掉引號(hào)逗號(hào)改用“/” ar reg = new RegExp(/飛雪/g); var str = "風(fēng)雨送春歸飛雪迎春到,飛雪連天向天橫"; var xx = str.(str.match(reg)); //xx的結(jié)果: xx[0]="飛雪"alert(xx); // xx[1]="飛雪" //省略寫法string.match(/pattern/flag);整個(gè)模板對象省略,讓JavaScript自動(dòng)生成 //var reg = new RegExp(/飛雪/g);var str = "風(fēng)雨送春歸飛雪迎春到,飛雪連天向天橫"; var xx = str.(str.match(/飛雪/g)); //xx的結(jié)果: xx[0]="飛雪"alert(xx); // xx[1]="飛雪" 模板的語法(即正規(guī)表現(xiàn)) //字符串相匹配(包括單個(gè)字符)【字符串】reg = new RegExp(/abc/ig); //匹配字符串"abc",多次,大小寫不計(jì) reg = new RegExp(/abc/ig); xx = "123ABCxyzbcaLMNAbC".match(reg); //xx為: ABC,AbC 注;bca不符合 //多個(gè)字符串中任意一個(gè)相匹配【|】reg = new RegExp(/abc|xyz/ig); //字符串a(chǎn)bc或xyz之間用|分割 注: 【|】不適用于下面的[...]內(nèi)容 reg = new RegExp(/abc|xyz/ig); xx = "123ABCxyzbcaLMNAbC".match(reg); //xx為: ABC,xyz,AbC //字符串中任意一個(gè)字符相匹配【[...],[.-.]】reg1 = new RegExp(/[abc]/ig); //匹配任意一個(gè)字符用[...]reg2 = new RegExp(/[m-p]/ig); //連續(xù)字符串可用減號(hào)[.-.]reg3 = new RegExp(/[0-9]/g); //判斷是否包含數(shù)字reg4 = new RegExp(/[a-z]/ig); //判斷是否包含英文字母 //注: 【-】只是用于[...]中 reg1 = new RegExp(/[abc]/ig); xx = "123ABCopqbcaLMNAbC".match(reg1); //xx為: A,B,C,b,c,a,A,b,Creg2 = new RegExp(/[m-p]/ig); yy = "123ABCopqbcaLMNAbC".match(reg2); //yy為: o,p,M,N //字符串中任意一個(gè)字符不包含匹配【[^...]】reg1 = new RegExp(/[^abc]/ig); //匹配任意一個(gè)字符都不被包含用^reg2 = new RegExp(/[^m-p]/ig); //不包含mnop的任一字符reg3 = new RegExp(/[^0-9]/g); //判斷是否不包含數(shù)字reg4 = new RegExp(/[^a-z]/ig); //判斷是否不包含英文字母 注: 【^】是在[...]的里面,不是后面所說的【^】在[...]外面 reg1 = new RegExp(/[^abc]/ig); xx = "123ABCopqbcaLMN".match(reg1); //xx為: 1,2,3,o,p,q,L,M,Nreg3 = new RegExp(/[^0-9]/g); yy = "123opqLMN".match(reg3); //yy為: o,p,q,L,M,N //多個(gè)重復(fù)字符相匹配【{m,n}】說明: {m,n}表示從m到n次重復(fù)字符相匹配,m,n為大于等于0的整數(shù)。{m}和{m,}都是正確的,{ ,n}語法不錯(cuò),但永遠(yuǎn)不能匹配reg1 = new RegExp(/abc{2}/ig); //等價(jià)于“/abcc/ig”reg2 = new RegExp(/abc{1,2}/ig); //等價(jià)于“/abc|abcc/ig”reg3 = new RegExp(/abc{0,2}/ig); //等價(jià)于“/ab|abc|abcc/ig”reg4 = new RegExp(/abc{0,}/ig); //匹配ab后面跟任意個(gè)creg5 = new RegExp(/abc{1,}/ig); //匹配ab后面跟一個(gè)以上的c
注: 【{m,n}】不適用于[...]中reg1 = new RegExp(/abc{2}/ig);
xx = "abcABCCabccc".match(reg1); //xx為: ABCC,abccreg3 = new RegExp(/abc{0,2}/ig);
yy = "abxABCCabccc".match(reg3); //yy為: ab,ABC,abcczz = "abA Ba bA b".match(/a {0,}b/ig); //匹配ab之間任意空格。zz為: ab,A B,a b,A bww = "aa1bb22cc321dd9876".match(/[0-9]{2}/g); //匹配2位數(shù)字。ww為:22,32,98,76//子表達(dá)式即字符串的一部分相匹配【(...)】說明: 對字符串的一部分進(jìn)行操作,可以用()括起來reg1 = new RegExp(/abc{2}/ig); //等價(jià)于“/abcc/ig”,c被重復(fù)了2遍reg2 = new RegExp(/a(bc){2}/ig); //等價(jià)于“/abcbc/ig”,bc被重復(fù)了2遍reg1 = new RegExp(/abc{2}/ig);
xx = "abcABCbccc".match(reg1); //xx為: nullreg2 = new RegExp(/a(bc){2}/ig);
yy = "abcABCbccc".match(reg2); //yy為: ABCbc通配符 //匹配單個(gè)任意字符(不包括\n)【.】 xx = "at act ant amount".match(/a.t/gi); //a與t之間有1個(gè)字符。xx=act,antxx = "at act ant amount".match(/a....t/gi); //a與t之間有4個(gè)字符。xx=amount //任意匹配字符或字符串【*】等價(jià)于{0,}
“*”星號(hào)前面至少必須有一個(gè)字符,任意匹配時(shí)可以用“.”代替字符
“*”星號(hào)前面不能用限定符{...}及其簡寫形式xx = "at act ant amount".match(/a*t/gi); //t前面任意個(gè)a。xx=at,t,t,txx = "at act ant amount".match(/a.*t/gi); //a與t之間任意個(gè)字符。xx=at,act,ant,amountxx = "at act ant amount".match(/*t/gi); //語法出錯(cuò)(*前面無字符)xx = "at act ant amount".match(/a{1}*/gi); //語法出錯(cuò)(*前面不能有限定符)(ie上雖不出錯(cuò),按字符個(gè)數(shù)匹配)
xx = "at act ant amount".match(/.*ou/gi); //ou前面任意個(gè)字符。xx=at act ant amouxx = "at act ant amount".match(/.*/gi); //與原字符串相同。xx=at act ant amount//子表達(dá)式的任意匹配【?】等價(jià)于{0,1}
“?”問號(hào)前面至少必須有一個(gè)字符,任意匹配時(shí)可以用“.”代替字符
“?”問號(hào)前面沒有用(...)將子表達(dá)式括起來,“?”相當(dāng)于“*”,而不是“.”
“?”問號(hào)的主要作用是對(...){.,.}操作xx = "at act,ant amount".match(/a?t/gi); //t前面有0個(gè)或1個(gè)a。xx=at,t,t,txx = "at act,ant amount".match(/?t/gi); //語法出錯(cuò)(*前面無字符)xx = "at act,ant amount".match(/a{1}?/gi); //對“a{1}”的結(jié)果匹配。xx=a,a,a,a//子表達(dá)式的1次以上匹配【+】等價(jià)于{1,}
“+”加號(hào)前面至少必須有一個(gè)字符,也可以用“.”代替字符
“+”加號(hào)前面沒有用(...)將子表達(dá)式括起來,“+”相當(dāng)于“?”或“*”,而不是“.”xx = "at act,ant amount".match(/a+t/gi); //t前面有1個(gè)以上的a。xx=atxx = "at act,ant amount".match(/+t/gi); //語法出錯(cuò)(*前面無字符)xx = "at act,ant amount".match(/a{1}+/gi); //對“a{1}”的結(jié)果匹配。xx=a,a,a,a//通酡符小結(jié)
“.”匹配的字符是任意的,與符號(hào)前面的字符沒有關(guān)系
“?”匹配的字符或字符串與其前面字符或子表達(dá)式有關(guān)
“.”匹配一個(gè)字符,而與“*”、“+”和“?”結(jié)合后,能匹配0個(gè)或多個(gè)
“?”前面沒有(...)子表達(dá)式時(shí),匹配的是前一個(gè)字符
“?”前面有(...)子表達(dá)式時(shí),匹配的是前一個(gè)子表達(dá)式
“?”前面有{m,n}限定符時(shí),匹配的個(gè)數(shù)就是{m,n}指定的個(gè)數(shù)xx = "at act,ant amount".match(/a.t/gi); //xx=act,antxx = "at act,ant amount".match(/a?t/gi); //xx=at,,a,,t,,a,,t,,a,,,,,t,xx = "at act,ant amount".match(/a*t/gi); //xx=at,t,t,txx = "atat fatt,gatAT amount".match(/at?/gi); //x=at,at,at,at,AT,axx = "atat fatt,gatAT amount".match(/(at)?/gi); //xx=at,at,,,at,,,,at,AT,,,,,,,,xx = "atat fatt,gatAT amount".match(/(at){2}?/gi);//xx=atat,atAT定位符 開始【^】和結(jié)束【$】位置 如果有\(zhòng)n或\r時(shí),要與multiLine配合使用 xx = "I am a student".match(/^s/i); //xx=nullxx = "I am a student".match(/^i/i); //xx=Ixx = "I am a \nstudent".match(/^s/i); //xx=nullxx = "I am a \nstudent".match(/^s/mi); //xx=sxx = "I am a student".match(/m$/i); //xx=nullxx = "I am a student".match(/m$/i); //xx=mxx = "I am a\n student".match(/a$/i); //xx=nullxx = "I am a\n student".match(/a$/mi); //xx=axx = "I am a student".match(/^s/i); //xx=nullxx = "I am a student".match(/^i/i); //xx=Ixx = "I am a \nstudent".match(/^s/i); //xx=nullxx = "I am a student".match(/^i.*t$/i); //xx=I am a student 轉(zhuǎn)義字符 \b 匹配一個(gè)【單詞邊界】(例:回車、換行、空格、逗號(hào))。 \B \b除外 xx = "I am a student".match(/stu\b/i); //xx=nullxx = "I am a student".match(/\bstu/i); //xx=stuxx = "I am a student".match(/ent\b/i); //xx=entxx = "I am a student".match(/ent\B/i); //xx=nullxx = "我是學(xué)生".match(/學(xué)生\B/i); //xx=nullxx = "我是(student)學(xué)生".match(/ent\B/i); //xx=entxx = "我是student學(xué)生".match(/ent\B/i); //xx=ent \cA 匹配一個(gè)【Ctrl+A】字符。 \d 匹配一個(gè)【數(shù)字】。等價(jià)于[0-9]。 \D \D除外 \f 匹配一個(gè)【換頁符】字符。等價(jià)于 \x0c 和 \cL。 \n 匹配一個(gè)【換行符】。等價(jià)于 \x0a 和 \cJ。 \r 匹配一個(gè)【回車符】。等價(jià)于 \x0a 和 \cJ。 \s 匹配一個(gè)【空白符】。包括空格、制表符、換頁符等。等價(jià)于[\f\n\r\t\v]。 \S \D除外 \t 匹配一個(gè)【制表符】。等價(jià)于 \x09 和 \cI。 \v 匹配一個(gè)【垂直制表符】。等價(jià)于\x0b 和 \cK。 \w 匹配一個(gè)【英文數(shù)字】。等價(jià)于[A-Za-z0-9]。 \W \w除外 \onnn 匹配一個(gè)【8進(jìn)制數(shù)字】。\xnnn 匹配一個(gè)【16進(jìn)制數(shù)字】。 (略) \其它字符(正則表達(dá)式使用的符號(hào)和單雙引號(hào)) 【\(】【\)】【\[】【\]】【\{】【\}】
【\"】【\'】【\^】【\$】【\\】【\/】(略) |
|
|