JavaScript 是使用“對象化編程”的,或者叫“面向對象編程”的。所謂“對象化編程”,意思是把 JavaScript 能涉及的范圍劃分成大大小小的對象,對象下面還繼續劃分對象直至非常詳細為止,所有的編程都以對象為出發點,基於對象。小到一個變量,大到網頁文檔、窗口甚至屏幕,都是對象。這一章將“面向對象”講述 JavaScript 的運行情況。
對象的基本知識
對象是可以從 JavaScript“勢力范圍”中劃分出來的一小塊,可以是一段文字、一幅圖片、一個表單(Form)等等。每個對象有它自己的屬性、方法和事件。對象的屬性是反映該對象某些特定的性質的,例如:字符串的長度、圖像的長寬、文字框(Textbox)裡的文字等等;對象的方法能對該對象做一些事情,例如,表單的“提交”(Submit),窗口的“滾動”(Scrolling)等等;而對象的事件就能響應發生在對象上的事情,例如提交表單產生表單的“提交事件”,點擊連接產生的“點擊事件”。不是所有的對象都有以上三個性質,有些沒有事件,有些只有屬性。引用對象的任一“性質”用“<對象名>.<性質名>”這種方法。
基本對象
現在我們要復習以上學過的內容了——把一些數據類型用對象的角度重新學習一下。
Number “數字”對象。這個對象用得很少,作者就一次也沒有見過。不過屬於“Number”的對象,也就是“變量”就多了。
屬性String 字符串對象。聲明一個字符串對象最簡單、快捷、有效、常用的方法就是直接賦值。
MAX_VALUE 用法:Number.MAX_VALUE;返回“最大值”。
MIN_VALUE 用法:Number.MIN_VALUE;返回“最小值”。
NaN 用法:Number.NaN 或 NaN;返回“NaN”。“NaN”(不是數值)在很早就介紹過了。
NEGATIVE_INFINITY 用法:Number.NEGATIVE_INFINITY;返回:負無窮大,比“最小值”還小的值。
POSITIVE_INFINITY 用法:Number.POSITIVE_INFINITY;返回:正無窮大,比“最大值”還大的值。
方法
toString() 用法:<數值變量>.toString();返回:字符串形式的數值。如:若 a == 123;則 a.toString() == '123'。
屬性Array 數組對象。數組對象是一個對象的集合,裡邊的對象可以是不同類型的。數組的每一個成員對象都有一個“下標”,用來表示它在數組中的位置(既然是“位置”,就也是從零開始的啦)。
length 用法:<字符串對象>.length;返回該字符串的長度。
方法
charAt() 用法:<字符串對象>.charAt(<位置>);返回該字符串位於第<位置>位的單個字符。注意:字符串中的一個字符是第 0 位的,第二個才是第 1 位的,最後一個字符是第 length - 1 位的。
charCodeAt() 用法:<字符串對象>.charCodeAt(<位置>);返回該字符串位於第<位置>位的單個字符的 ASCII 碼。
fromCharCode() 用法:String.fromCharCode(a, b, c...);返回一個字符串,該字符串每個字符的 ASCII 碼由 a, b, c... 等來確定。
indexOf() 用法:<字符串對象>.indexOf(<另一個字符串對象>[, <起始位置>]);該方法從<字符串對象>中查找<另一個字符串對象>(如果給出<起始位置>就忽略之前的位置),如果找到了,就返回它的位置,沒有找到就返回“-1”。所有的“位置”都是從零開始的。
lastIndexOf() 用法:<字符串對象>.lastIndexOf(<另一個字符串對象>[, <起始位置>]);跟 indexOf() 相似,不過是從後邊開始找。
split() 用法:<字符串對象>.split(<分隔符字符>);返回一個數組,該數組是從<字符串對象>中分離開來的,<分隔符字符>決定了分離的地方,它本身不會包含在所返回的數組中。例如:'1&2&345&678'.split('&')返回數組:1,2,345,678。關於數組,我們等一下就討論。
substring() 用法:<字符串對象>.substring(<始>[, <終>]);返回原字符串的子字符串,該字符串是原字符串從<始>位置到<終>位置的前一位置的一段。<終> - <始> = 返回字符串的長度(length)。如果沒有指定<終>或指定得超過字符串長度,則子字符串從<始>位置一直取到原字符串尾。如果所指定的位置不能返回字符串,則返回空字符串。
substr() 用法:<字符串對象>.substr(<始>[, <長>]);返回原字符串的子字符串,該字符串是原字符串從<始>位置開始,長度為<長>的一段。如果沒有指定<長>或指定得超過字符串長度,則子字符串從<始>位置一直取到原字符串尾。如果所指定的位置不能返回字符串,則返回空字符串。
toLowerCase() 用法:<字符串對象>.toLowerCase();返回把原字符串所有大寫字母都變成小寫的字符串。
toUpperCase() 用法:<字符串對象>.toUpperCase();返回把原字符串所有小寫字母都變成大寫的字符串。
var <數組名> = new Array();這樣就定義了一個空數組。以後要添加數組元素,就用:
<數組名>[<下標>] = ...;注意這裡的方括號不是“可以省略”的意思,數組的下標表示方法就是用方括號括起來。
var <數組名> = new Array(<元素1>, <元素2>, <元素3>...);例如,var myArray = new Array(1, 4.5, 'Hi'); 定義了一個數組 myArray,裡邊的元素是:myArray[0] == 1; myArray[1] == 4.5; myArray[2] == 'Hi'。
var myArray = new Array(new Array(), new Array(), new Array(), ...);其實這是一個一維數組,裡邊的每一個元素又是一個數組。調用這個“二維數組”的元素時:myArray[2][3] = ...;
屬性Math “數學”對象,提供對數據的數學計算。下面所提到的屬性和方法,不再詳細說明“用法”,大家在使用的時候記住用“Math.<名>”這種格式。
length 用法:<數組對象>.length;返回:數組的長度,即數組裡有多少個元素。它等於數組裡最後一個元素的下標加一。所以,想添加一個元素,只需要:myArray[myArray.length] = ...。
方法
join() 用法:<數組對象>.join(<分隔符>);返回一個字符串,該字符串把數組中的各個元素串起來,用<分隔符>置於元素與元素之間。這個方法不影響數組原本的內容。
reverse() 用法:<數組對象>.reverse();使數組中的元素順序反過來。如果對數組[1, 2, 3]使用這個方法,它將使數組變成:[3, 2, 1]。
slice() 用法:<數組對象>.slice(<始>[, <終>]);返回一個數組,該數組是原數組的子集,始於<始>,終於<終>。如果不給出<終>,則子集一直取到原數組的結尾。
sort() 用法:<數組對象>.sort([<方法函數>]);使數組中的元素按照一定的順序排列。如果不指定<方法函數>,則按字母順序排列。在這種情況下,80 是比 9 排得前的。如果指定<方法函數>,則按<方法函數>所指定的排序方法排序。<方法函數>比較難講述,這裡只將一些有用的<方法函數>介紹給大家。
按升序排列數字:
function sortMethod(a, b) {按降序排列數字:把上面的“a - b”該成“b - a”。
return a - b;
}
myArray.sort(sortMethod);
有關函數,請看下面。
屬性Date 日期對象。這個對象可以儲存任意一個日期,從 0001 年到 9999 年,並且可以精確到毫秒數(1/1000 秒)。在內部,日期對象是一個整數,它是從 1970 年 1 月 1 日零時正開始計算到日期對象所指的日期的毫秒數。如果所指日期比 1970 年早,則它是一個負數。所有日期時間,如果不指定時區,都采用“UTC”(世界時)時區,它與“GMT”(格林威治時間)在數值上是一樣的。
E 返回常數 e (2.718281828...)。
LN2 返回 2 的自然對數 (ln 2)。
LN10 返回 10 的自然對數 (ln 10)。
LOG2E 返回以 2 為低的 e 的對數 (log2e)。
LOG10E 返回以 10 為低的 e 的對數 (log10e)。
PI 返回π(3.1415926535...)。
SQRT1_2 返回 1/2 的平方根。
SQRT2 返回 2 的平方根。
方法
abs(x) 返回 x 的絕對值。
acos(x) 返回 x 的反余弦值(余弦值等於 x 的角度),用弧度表示。
asin(x) 返回 x 的反正弦值。
atan(x) 返回 x 的反正切值。
atan2(x, y) 返回復平面內點(x, y)對應的復數的幅角,用弧度表示,其值在 -π 到 π 之間。
ceil(x) 返回大於等於 x 的最小整數。
cos(x) 返回 x 的余弦。
exp(x) 返回 e 的 x 次冪 (ex)。
floor(x) 返回小於等於 x 的最大整數。
log(x) 返回 x 的自然對數 (ln x)。
max(a, b) 返回 a, b 中較大的數。
min(a, b) 返回 a, b 中較小的數。
pow(n, m) 返回 n 的 m 次冪 (nm)。
random() 返回大於 0 小於 1 的一個隨機數。
round(x) 返回 x 四捨五入後的值。
sin(x) 返回 x 的正弦。
sqrt(x) 返回 x 的平方根。
tan(x) 返回 x 的正切。
var d = new Date;這個方法使 d 成為日期對象,並且已有初始值:當前時間。如果要自定初始值,可以用:
var d = new Date(99, 10, 1); //99 年 10 月 1 日等等方法。最好的方法就是用下面介紹的“方法”來嚴格的定義時間。
var d = new Date('Oct 1, 1999'); //99 年 10 月 1 日
方法
以下有很多“g/set[UTC]XXX”這樣的方法,它表示既有“getXXX”方法,又有“setXXX”方法。“get”是獲得某個數值,而“set”是設定某個數值。如果帶有“UTC”字母,則表示獲得/設定的數值是基於 UTC 時間的,沒有則表示基於本地時間或浏覽期默認時間的。
如無說明,方法的使用格式為:“<對象>.<方法>”,下同。
g/set[UTC]FullYear() 返回/設置年份,用四位數表示。如果使用“x.set[UTC]FullYear(99)”,則年份被設定為 0099 年。
g/set[UTC]Year()返回/設置年份,用兩位數表示。設定的時候浏覽器自動加上“19”開頭,故使用“x.set[UTC]Year(00)”把年份設定為 1900 年。
g/set[UTC]Month()返回/設置月份。
g/set[UTC]Date()返回/設置日期。
g/set[UTC]Day()返回/設置星期,0 表示星期天。
g/set[UTC]Hours()返回/設置小時數,24小時制。
g/set[UTC]Minutes()返回/設置分鐘數。
g/set[UTC]Seconds()返回/設置秒鐘數。
g/set[UTC]Milliseconds()返回/設置毫秒數。
g/setTime() 返回/設置時間,該時間就是日期對象的內部處理方法:從 1970 年 1 月 1 日零時正開始計算到日期對象所指的日期的毫秒數。如果要使某日期對象所指的時間推遲 1 小時,就用:“x.setTime(x.getTime() + 60 * 60 * 1000);”(一小時 60 分,一分 60 秒,一秒 1000 毫秒)。
getTimezoneOffset() 返回日期對象采用的時區與格林威治時間所差的分鐘數。在格林威治東方的市區,該值為負,例如:中國時區(GMT+0800)返回“-480”。
toString() 返回一個字符串,描述日期對象所指的日期。這個字符串的格式類似於:“Fri Jul 21 15:43:46 UTC+0800 2000”。
toLocaleString() 返回一個字符串,描述日期對象所指的日期,用本地時間表示格式。如:“2000-07-21 15:43:46”。
toGMTString() 返回一個字符串,描述日期對象所指的日期,用 GMT 格式。
toUTCString() 返回一個字符串,描述日期對象所指的日期,用 UTC 格式。
parse() 用法:Date.parse(<日期對象>);返回該日期對象的內部表達方式。
屬性
NaN 一早就說過了。
方法
eval() 把括號內的字符串當作標准語句或表達式來運行。
isFinite() 如果括號內的數字是“有限”的(介於 Number.MIN_VALUE 和 Number.MAX_VALUE 之間)就返回 true;否則返回 false。
isNaN() 如果括號內的值是“NaN”則返回 true 否則返回 false。
parseInt() 返回把括號內的內容轉換成整數之後的值。如果括號內是字符串,則字符串開頭的數字部分被轉換成整數,如果以字母開頭,則返回“NaN”。
parseFloat() 返回把括號內的字符串轉換成浮點數之後的值,字符串開頭的數字部分被轉換成浮點數,如果以字母開頭,則返回“NaN”。
toString() 用法:<對象>.toString();把對象轉換成字符串。如果在括號中指定一個數值,則轉換過程中所有數值轉換成特定進制。
escape() 返回括號中的字符串經過編碼後的新字符串。該編碼應用於 URL,也就是把空格寫成“%20”這種格式。“+”不被編碼,如果要“+”也被編碼,請用:escape('...', 1)。
unescape() 是 escape() 的反過程。解編括號中字符串成為一般字符串。
function 函數名([參數集]) {其中,用在 function 之後和函數結尾的大括號是不能省去的,就算整個函數只有一句。
...
[return[ <值>];]
...
}
function addAll(a, b, c) {這個例子建立了一個叫“addAll”的函數,它有 3 個參數:a, b, c,作用是返回三個數相加的結果。在函數外部,利用“var total = addAll(3, 4, 5);”接收函數的返回值。
return a + b + c;
}
var total = addAll(3, 4, 5);
屬性
arguments 一個數組,反映外部程序調用函數時指定的參數。用法:直接在函數內部調用“arguments”。