所有編程語言都具有內部(或內置的)對象來創建 語言的基本功能。內部對象是 您編寫自定義代碼所用語言的基礎, 該代碼基於您的想象實現自定義功能。JavaScript 有許多 將其定義爲語言的內部對象。本文介紹了一些 最常用的對象,並簡要介紹了它們 有哪些功能以及如何使用這些功能。
Number
JavaScript Number
對象是 一個數值包裝器。您可以將其與 new
關鍵詞結合使用,並將其設置爲一個稍後要在 JavaScript 代碼中使用的變量:
var myNumber = new Number(numeric value);
或者,您可以通過將一個變量設置爲一個數值來創建一個 Number
對象。然後,該變量將 能夠訪問該對象可用的屬性和方法。
除了存儲數值, Number
對象包含各種屬性和 方法,用於操作或檢索關於數字的信息。 Number
對象可用的所有屬性 都是只讀常量,這意味着它們的值始終保持 不變,不能更改。有 4 個屬性包含在 Number
對象裏:
MAX_VALUE
MIN_VALUE
NEGATIVE_INFINITY
POSITIVE_INFINITY
MAX_VALUE
屬性返回 1.7976931348623157e+308
值,它是 JavaScript 能夠處理的最大數字:
document.write(Number.MAX_VALUE); // Result is: 1.7976931348623157e+308
另外,使用 MIN_VALUE
返回 5e-324
值,這是 JavaScript 中最小的數字:
document.write(Number.MIN_VALUE); // Result is: 5e-324
NEGATIVE_INFINITY
是 JavaScript 能夠處理的最大負數,表示爲 -Infinity
:
document.write(Number.NEGATIVE_INFINITY); // Result is: -Infinity
POSITIVE_INFINITY
屬性是大於 MAX_VALUE
的任意數,表示爲 Infinity
:
document.write(Number.POSITIVE_INFINITY); // Result is: Infinity
Number
對象還有一些方法,您可以 用這些方法對數值進行格式化或進行轉換。這些方法包括:
toExponential
toFixed
toPrecision
toString
valueOf
每種方法基本上執行如其名稱所暗示的操作。例如, toExponential
方法以指數形式返回 數字的字符串表示。每種 方法的獨特之處在於它接受的參數。 toExponential
方法有一個可選參數, 可用於設置要使用多少有效數字, toFixed
方法基於所傳遞的參數確定小數 精度,toPrecision
方法基於所傳遞的參數確定 要顯示的有效數字。
JavaScript 中的每個對象都包含一個 toString
和 valueOf
方法,因此這些方法 在前面的章節中不介紹。 toString
方法返回 數字的字符串表示(在本例中),但是在其他對象中,它返回 相應對象類型的字符串表示。valueOf
方法返回調用它的對象類型的原始值,在本例中爲Number
對象。
僅 Number
對象似乎並不十分 強大,但它是任何編程語言的一個重要組成部分, JavaScript 也不例外。JavaScript Number
對象爲任何 數學程序提供基礎,這基本上是所有 編程語言的基礎。
Boolean
Boolean
在嘗試 用 JavaScript 創建任何邏輯時是必要的。Boolean 是一個 代表 true 或 false 值的對象。 Boolean
對象有多個值,這些值 相當於 false 值(0
、 -0
、null
或 ""
[一個空字串]),未定義的 (NaN
),當然還有 false。所有其他布爾 值相當於 true 值。該對象可以 通過 new
關鍵詞進行實例化,但通常是 一個被設爲 true 或 false 值的變量:
var myBoolean = true;
Boolean
對象包括 toString
和 valueOf
方法,儘管您不太可能需要使用這些方法。 Boolean
最常用於在 條件語句中 true 或 false 值的簡單判斷。 布爾值和條件語句的組合提供了一種使用 JavaScript 創建邏輯的方式。此類條件語句的示例包括 if
、if...else
、 if...else...if
以及 switch
語句。當與 條件語句結合使用時,您可以基於 您編寫的條件使用布爾值確定結果。清單 1 顯示了 條件語句與布爾值相結合的一個簡單示例。
清單 1. 與布爾值相結合的條件語句
var myBoolean = true; if(myBoolean == true) { // If the condition evaluates to true } else { // If the condition evaluates to false }
不言而喻,Boolean
對象 是 JavaScript 一個極其重要的組成部分。如果沒有 Boolean 對象, 在條件語句內便無法進行判斷。
String
JavaScript String
對象是 文本值的包裝器。除了存儲文本, String
對象包含一個屬性和各種 方法來操作或收集有關文本的信息。與Boolean
對象類似, String
對象不需要進行實例化 便能夠使用。例如,您可以將一個變量設置爲一個字符串, 然後 String
對象的所有屬性或 方法都可用於該變量:
var myString = "My string";
String
對象只有一個 屬性,即 length
,它是 只讀的。length
屬性可用於只返回 字符串的長度:您不能在外部修改它。隨後的代碼 提供了使用 length
屬性確定一個字符串中的字符數的示例:
var myString = "My string"; document.write(myString.length); // Results in a numeric value of 9
該代碼的結果是 9
,因爲 兩個詞之間的空格也作爲一個字符計算。
在 String
對象中有相當多的方法可用於操作和收集有關文本的信息。 以下是可用的方法列表:
charAt
charCodeAt
concat
fromCharCode
indexOf
lastIndexOf
match
replace
search
slice
split
substr
substring
toLowerCase
toUpperCase
chartAt
方法可用於基於您作爲參數傳遞的索引檢索 特定字符。 下面的代碼說明了如何返回 字符串的第一個字符:
var myString = "My string"; document.write(myString.chartAt(0); // Results in M
如果您需要相反的結果,有幾個方法 可返回字符串中的指定字符或字符集,而不 使用索引返回字符。這些方法包括 indexOf
和lastIndexOf
,這兩個方法都包含兩個 參數:searchString
和 start
。 searchString
參數是起始索引, start
參數告訴方法 從哪裏開始搜索。這兩個方法之間的區別在於, indexOf
返回第一個索引, lastIndexOf
返回最後一個索引。
charCodeAt
方法類似於 charAt
:惟一的區別在於它返回 Unicode 字符。另一種與 Unicode 相關的方法(包括在 String
對象中)是fromCharCode
,它將 Unicode 轉換爲 字符。
如果您想要組合字符串,可以使用加號 (+
) 將這些字符串加起來,或者您可以 更適當地使用 concat
方法。該 方法接受無限數量的字符串參數,連接它們,並 將綜合結果作爲新字符串返回。清單 2 展示瞭如何使用 concat
實例將多個字符串合併成一個。
清單 2. 使用 concat 方法合併多個字符串
var myString1 = "My"; var myString2 = " "; var myString3 = "string"; document.write(myString.concat(myString1, myString2, myString3); // Results in "My String"
還有一組 String
方法 接受正則表達式作爲一個參數,以查找或修改一個字符串。 這些包括 match
、 replace
和 search
方法。match
方法使用正則 表達式搜索特定字符串並返回所有的匹配的字符串。 replace
方法實際上接受子字符串或 正則表達式和替換字符串作爲其第二個參數, 用替換字符串更換所有匹配項,並返回更新的 字符串。這些方法的最後一個是 search
方法,它搜索正則表達式的匹配結果並返回其 位置。
如果需要修改字符串,有多個方法派得上用場。 第一個方法是 slice
方法,它基於索引或 索引的開始和結尾的組合提取 並返回一個字符串的一部分。另一個方法是 split
方法。 split
方法每當找到分隔符參數時就將一個字符串分割成一系列 子字符串。例如,如果將逗號 (,
) 作爲一個參數傳遞,那麼字符串 將在每個逗號處分割成一個新的子字符串。能夠修改字符串的方法還包括 substr
方法,它 基於指定爲參數的起始位置和長度,從字符串提取字符, 還有 substring
方法,該方法基於指定爲參數的兩個索引從一個字符串提取字符。能夠改變字符串的最後的方法分別是 toLowerCase
和 toUpperCase
,它們將字符串中的字符分別轉換爲 小寫和大寫字母。這些方法在 比較字符串值時非常有用,因爲字符串有時可能 大小寫不一致。這些方法確保您在比較 值,而不是大小寫。
Date
JavaScript Date
對象提供了一種方式 來處理日期和時間。您可以用許多不同的 方式對其進行實例化,具體取決於想要的結果。例如,您可以在沒有參數的情況下對其進行實例化:
var myDate = new Date();
或傳遞 milliseconds
作爲一個參數:
var myDate = new Date(milliseconds);
您可以將一個日期字符串作爲一個參數傳遞:
var myDate = new Date(dateString);
或者您可以傳遞多個參數來創建一個完整的日期:
var myDate = new Date(year, month, day, hours, minutes, seconds, milliseconds);
此外,有幾種方法可用於 Date
對象,一旦該對象 得到實例化,您便可以使用這些方法。大多數可用的方法圍繞 獲取當前時間的特定部分。以下方法是 可用於 Date
對象的 getter 方法:
getDate
getDay
getFullYear
getHours
getMilliseconds
getMinutes
getMonth
getSeconds
getTime
getTimezoneOffset
如您所見,每個方法所 返回的值都相當簡單。區別在於所返回的值範圍。例如, getDate
方法返回 一個月份的天數,範圍從 1 到 31;getDay
方法返回每週的天數,範圍從 0 到 6; getHours
方法返回小時數值, 範圍從 0 到 23;getMilliseconds
函數返回毫秒數值,範圍從 0 到 999。 getMinutes
和 getSeconds
方法返回一個範圍從 0 到 59 的值,getMonth
方法返回一個 從 0 到 11 之間的月份數值。本列表中惟一獨特的方法 是 getTime
和 getTimezoneOffset
。 getTime
方法返回 自 1/1/1970 中午 12 點的毫秒數,而 getTimezoneOffset
方法返回 格林尼治標準時間和本地時間之間的時間差,以分鐘爲單位。
對於大多數 getter 方法,還有一個 setter 方法,接受 相應的值範圍內的數值參數。setter 方法 如下所示:
setDate
setFullYear
setHours
setMilliseconds
setMinutes
setMonth
setSeconds
setTime
對於上述所有 getter 方法,有一些匹配的方法 返回相同的值範圍,只是這些值以 國際標準時間設置。這些方法包括:
getUTCDate
getUTCDay
getUTCFullYear
getUTCHours
getUTCMilliseconds
getUTCMinutes
getUTCMonth
getUTCSeconds
當然,由於對於所有原始 getter 方法都有 setter 方法, 對於國際標準時間也一樣。這些方法包括:
setUTCDate
setUTCFullYear
setUTCHours
setUTCMilliseconds
setUTCMinutes
setUTCMonth
setUTCSeconds
正如在本文開頭提到的,我不提供許多 關於 toString
方法的信息,但是 在 Date
對象中有一些方法可將日期轉換爲一個字符串,值得一提。在某些 情況下,需要將日期或日期的一部分轉換爲一個 字符串。例如,如果您將其追加到一個字符串或在 比較語句中使用它。有幾個方法可用於 Date
對象,提供略微不同的 方法將其轉換成字符串,包括:
toDateString
toLocaleDateString
toLocaleTimeString
toLocaleString
toTimeString
toUTCString
toDateString
方法將日期轉換爲 字符串:
var myDate = new Date(); document.write(myDate.toDateString());
toDateString
返回當前日期, 格式爲 Tue Jul 19 2011。
toTimeString
方法將時間從 Date
對象轉換爲字符串:
var myDate = new Date(); document.write(myDate.toTimeString());
toTimeString
將時間作爲字符串返回, 格式爲 23:00:00 GMT-0700 (MST)。
最後一種將日期轉換爲字符串的方法是 toUTCString
,它將日期轉換爲 國際標準時間的字符串。
有幾種方法使用區域設置將日期轉換成字符串,但是在撰寫本文之時 Google Chrome 還不支持這幾種方法。不支持的方法 包括toLocaleDateString
、 toLocaleTimeString
和 toLocaleString
。
JavaScript Date
對象乍看起來似乎很簡單, 但是它不僅僅是一種顯示 當前日期的有用方式。它取決於您要創建的功能。 例如,Date
對象是 創建倒計時鐘表或其他與時間相關的功能的基礎。
Array
JavaScript Array
對象是一個存儲變量的變量:您可以用它一次在一個變量中存儲多個值, 它有許多方法允許您操作或收集 有關它所存儲的值的信息。儘管 Array
對象不差別對待值類型,但是 在一個單一數組中使用同類值是很好的做法。因此, 在同一數組中使用數字和字符串不是好的做法。所有 可用於 Array
對象的屬性 都是隻讀的,這意味着它們的值不能從外部予以更改。
可用於 Array
對象的惟一屬性 是 length
。該屬性返回 一個數組中的元素數目,通常在使用 循環迭代數組中的值時用到:
var myArray = new Array(1, 2, 3); for(var i=0; i<myArray.length; i++) { document.write(myArray[i]); }
有多種方法可用於 Array
對象,您可以使用各種方法來向數組添加元素,或從數組刪除元素。 這些方法包括 pop
、 push
、shift
和unshift
。pop
和 shift
方法都從 數組中刪除元素。pop
方法刪除並返回 一個數組中的最後一個元素,而 shift
方法刪除並返回一個數組中的第一個元素。相反的 功能可以通過 push
和 unshift
方法實現,它們將元素添加到 數組中。push
方法將元素作爲新元素添加到 數組的結尾,並返回新長度,而 unshift
方法將元素添加到 數組的前面,並返回新長度。
在 JavaScript 中對數組進行排序可以通過兩個方法實現,其中之一 實際上稱爲 sort
。另一個方法是 reverse
。sort
方法的複雜之處在於,它基於可選的 sort
函數排列數組。 sort
函數可以是 您編寫的任何自定義函數。reverse
方法不像 sort
那樣複雜,儘管它的確通過顛倒元素更改 數組中元素的順序。
在處理數組時,索引非常重要,因爲它們定義 數組中每個元素的位置。有兩個方法可基於索引更改 字符串:slice
和 splice
。slice
方法接受索引或 索引開始和結尾的組合作爲參數,然後提取數組的一部分並基於參數將其作爲 新數組返回。splice
方法包括 index
、 length
和unlimited element
參數。該方法基於指定的索引將 元素添加到數組,並基於指定的索引將元素從 數組中刪除,或基於指定的索引將元素添加到數組或從 數組刪除元素。還有一種方法 可以基於匹配值返回一個索引: indexOf
。然後您可以使用該索引截取 或拼接數組。
用任何編程語言編寫好代碼的關鍵是編寫 有條理的代碼。正如其各種方法所示, JavaScript Array
對象是一種 組織數據並創建複雜功能的強大方式。
Math
JavaScript Math
對象用於執行 數學函數。它不能加以實例化:您只能依據 Math
對象的原樣使用它,在沒有任何實例的情況下從該對象調用屬性和 方法:
var pi = Math.PI;
Math
對象有許多屬性和方法 向 JavaScript 提供數學功能。所有的 Math
屬性都是隻讀常量, 包括以下各項:
E
LN2
LN10
LOG2E
LOG10E
PI
SQRT1_2
SQRT2
E
屬性返回 自然對數的底數的值,或歐拉指數。該值是惟一的 實數,以 Leonhard Euler 命名。調用 E
屬性會產生數字 2.718281828459045。其他兩個屬性也用於返回自然 對數:LN2
和 LN10
。LN2
屬性返回值爲 2 的自然對數,而 LN10
屬性返回值爲 10 的自然 對數。LOG2E
和LOG10E
屬性可用於返回 E
以 2 或 10 爲底的對數。 LOG2E
的結果是 1.4426950408889633,而 LOG10E
的結果是 0.4342944819032518。通常您不需要 大部分這些屬性,除非您正在構建 計算器或其他數學密集型項目。然而, PI
和平方根比較常見。 PI
方法返回圓周與直徑的比率。兩個屬性返回平方根值: SQRT1_2
和 SQRT2
。 第一個屬性返回 0.5 的平方根,而 SQRT2
返回 2 的平方根。
除了這些屬性,還有幾種方法可用來 返回一個數的不同值。其中每種方法都接受 數值,並根據方法名稱返回一個值。 遺憾的是,方法名稱不總是顯而易見的:
abs
。一個數的 絕對值acos
。反餘弦asin
。反正弦atan
。反正切atan2
。多個數的 反正切cos
。餘弦exp
。冪log
。一個數的自然 對數pow
。x 的 y 次方值sin
。正弦sqrt
。平方根tan
。一個角的 正切
有三種方法可用於在 JavaScript 中取整數: ceil
、floor
和 round
。ceil
方法返回一個數的向上舍入值。該方法在 您需要將數字向上舍入到最接近的整數時非常有用。 floor
方法提供 與 ceil
相反的功能:它返回 一個數字的向下舍入值。該方法在需要 將數字向下舍入到最近的整數時非常有用。 round
方法提供了普通的四捨五入 功能,基於現有的 小數將數字向上或向下舍入。
Math
對象中包括的最後三個方法分別是 max
、min
和 random
。max
方法接受多個數字參數並返回最高值, 而 min
方法接受多個數字 參數並返回最低值。這些方法在 比較擁有數值的變量時非常有用,特別是當您事先不 知道是什麼數值時。您使用 random
方法返回 0 與 1 之間的一個隨機數。您可以將該方法用作多種目的,比如在 網站主頁上顯示一個隨機圖像,或返回一個隨機數, 該隨機數可用作包含圖像的文件路徑的數組的一個索引。 從該數組選擇的隨機圖像文件路徑然後可 用於將該圖像寫到 HTML <img>
標記。
結束語
JavaScript 提供的屬性和方法僅僅是可以實現的 功能的開始:是您的想象力創建了 自定義功能。由於您的想象力沒有界限,因此 您編寫的代碼也沒有界限。JavaScript 是一種靈活的語言,這有時使它 名聲較差,但是往好的一面看,它也向您提供了 快速、創造性地編寫代碼的能力。如需進一步瞭解 JavaScript 對象,以及如何使用 JavaScript 語言創建您自己的自定義對象,請務必查看 參考資料 部分。
參考資料
學習
在 開始使用 JavaScript 語言(Kris Hadlock,developerWorks,2011 年 4 月)一文中基本瞭解 JavaScript 語言。
在 開始使用面向對象的 JavaScript 代碼(Kris Hadlock,developerWorks,2011 年 4 月)一文中瞭解如何使用 JavaScript 語言編寫面向對象的代碼。
閱讀 JavaScript 和文檔對象模型(DOM)(Nicholas Chase,developerWorks,2002 年 7 月)介紹通過 JavaScript 實現 DOM,並描述 Web 頁面的構建,用戶可以向這個頁面添加並編輯註釋。
DevGuru 提供了面向 JavaScript 語言的 綜合 指南。
仔細閱讀 Douglas Crockford 撰寫的 JavaScript 中的類繼承,瞭解更多關於 JavaScript 語言的信息。
developerWorks developerWorks 中國網站 Web 開發專區 專門提供涵蓋各種基於 web 的解決方案的文章。
developerWorks Web development 專區:通過專門關於 Web 技術的文章和教程,擴展您在網站開發方面的技能。
developerWorks Ajax 資源中心:這是有關 Ajax 編程模型信息的一站式中心,包括很多文檔、教程、論壇、blog、wiki 和新聞。任何 Ajax 的新信息都能在這裏找到。
developerWorks Web 2.0 資源中心,這是有關 Web 2.0 相關信息的一站式中心,包括大量 Web 2.0 技術文章、教程、下載和相關技術資源。您還可以通過 Web 2.0 新手入門 欄目,迅速瞭解 Web 2.0 的相關概念。
查看 HTML5 專題,瞭解更多和 HTML5 相關的知識和動向。