小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

JavaScript教程

 sdxy 2021-07-19

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)行操作。
如果對某一段Html文你不需要用特殊意義的Tag括起來時(shí),可以用<div></div>或<span></span>來將Html文括起來進(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)先順序

優(yōu)先順序運(yùn)算符




數(shù)組([]) 括弧(( ))
増1減1(++ --) 負(fù)號(hào)(-) 取反(~) 非(!)
乗除余(* / %)
加減(+ -) 文字列連接(+)
位移(<< >> <<<)
比較(< <= >= >)
比較(== != === !==)
AND(&)
XOR(^)
OR(|)
與(&&)
或(||)
條件(? :)
賦值(=) 復(fù)合(+=等)
逗號(hào)(,)

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í)要特別注意:

◆ 數(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        空
undefined   未定義
NaN         非數(shù)值
Infinity    無窮大數(shù)值 

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的值為: -1
string.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))  【\(】【\)】【\[】【\]】【\{】【\}】
  【\"】【\'】【\^】【\$】【\\】【\/】
(略)

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多