對(duì)象的類型:本地對(duì)象(1)
更新時(shí)間:2006年12月29日 00:00:00 作者:
在ECMAScript中,所有對(duì)象并非同等創(chuàng)建的。一般說來,可以創(chuàng)建并使用的對(duì)象有三種。
3.3.1 本地對(duì)象
ECMA-262把本地對(duì)象(native object)定義為“獨(dú)立于宿主環(huán)境的ECMAScript實(shí)現(xiàn)提供的對(duì)象”。簡(jiǎn)單說來,本地對(duì)象就是ECMA-262定義的類(引用類型)。它們包括:

你已經(jīng)從上一章了解了一些本地對(duì)象(Object、Function、String、Boolean和Number),本書后面的章節(jié)中還會(huì)討論一些本地對(duì)象?,F(xiàn)在要討論的兩種重要的本地對(duì)象是Array和Date。
1. Array類
與Java不同的是,在ECMAScript中有真正的Array類??梢匀缦聞?chuàng)建Array對(duì)象:

如果預(yù)先知道數(shù)組中項(xiàng)的個(gè)數(shù),可以用參數(shù)傳遞數(shù)組的大小:

使用這兩個(gè)方法,一點(diǎn)要使用括號(hào),與它們?cè)贘ava中的用法相似:

這里創(chuàng)建了一個(gè)數(shù)組,并定義了三個(gè)數(shù)組項(xiàng),即"red"、"green"和"blue"。每增加一個(gè)數(shù)組項(xiàng),數(shù)組的大小就動(dòng)態(tài)地增長(zhǎng)。
此外,如果知道數(shù)組應(yīng)該存放的值,還可用參數(shù)聲明這些值,創(chuàng)建大小與參數(shù)個(gè)數(shù)相等的Array對(duì)象。例如,下面的代碼將創(chuàng)建一個(gè)有三個(gè)字符串的數(shù)組:

與字符串類似,數(shù)組中的第一個(gè)項(xiàng)位于位置0,第二個(gè)項(xiàng)位于位置1,依此類推。可通過使用方括號(hào)中放置要讀取的項(xiàng)的位置來訪問特定的項(xiàng)。例如,要用剛才定義的數(shù)組輸出字符串"green",可以采用下面的代碼:

可用屬性length得到數(shù)組的大小。與字符串的length屬性一樣,數(shù)組的length屬性也是最后一個(gè)項(xiàng)的位置加1,意味著具有三個(gè)項(xiàng)的數(shù)組中的項(xiàng)的位置是從0到2。

前面提過,數(shù)組可以根據(jù)需要增大或減小。因此,如果要為前面定義的數(shù)組增加一項(xiàng),只需把要存放的值放入下一個(gè)未使用的位置即可:

在這段代碼中,下一個(gè)未使用的位置是3,所以值"purple"將被賦予它。增加一項(xiàng)使數(shù)組的大小從3變成了4。但如果把值放在這個(gè)數(shù)組的位置25處會(huì)怎樣呢?ECMAScript將把從3開始到24的所有位置都填上值null,然后在位置25處放上正確的值,并把數(shù)組大小增大為26:

數(shù)組最多可以存放4294967295項(xiàng),這應(yīng)該可滿足大多數(shù)程序設(shè)計(jì)的需要。如果要添加更多的項(xiàng),則會(huì)發(fā)生異常。
還可以用字面量表示定義Array對(duì)象,即使用方括號(hào)([和]),用逗號(hào)分隔值。例如,可以用下面的形式重寫前面的例子:

注意,在這個(gè)例子中,未明確使用Array類。方括號(hào)暗示把其中的值存放在Array對(duì)象中。用這種方式聲明的數(shù)組與用傳統(tǒng)方式聲明的數(shù)組相同。
Array對(duì)象覆蓋了toString()方法和valueOf()方法,返回特殊的字符串。該字符串是通過對(duì)每項(xiàng)調(diào)用toString()方法,然后用逗號(hào)把它們連接在一起構(gòu)成的。例如,對(duì)具有項(xiàng)"red"、"green"和"blue"的數(shù)組調(diào)用toString()方法或valueOf()方法,返回的是字符串"red,green,blue"。

類似的,toLocaleString()方法返回的也是由數(shù)組項(xiàng)構(gòu)成的字符串。唯一的區(qū)別是得到的值是通過調(diào)用每個(gè)數(shù)組項(xiàng)的toLocaleString()方法得到的。許多情況下,該方法返回的值都與toString()方法返回的值相同,也是用逗號(hào)連接字符串。

由于開發(fā)者也可能希望在數(shù)組之外創(chuàng)建這樣的值,所以ECMAScript提供了方法join(),它唯一的用途就是連接字符串值。join()方法只有一個(gè)參數(shù),即數(shù)組項(xiàng)之間使用的字符串。考慮下面的例子:

這里用方法join()創(chuàng)建了三種不同的數(shù)組表示。第一個(gè)join()方法使用逗號(hào),本質(zhì)上與調(diào)用toString()方法或valueOf()方法等價(jià)。第二個(gè)和第三個(gè)join()方法使用不同的字符串,在數(shù)組項(xiàng)之間創(chuàng)建了奇怪的分隔符(可能不怎么有用)。理解的重點(diǎn)在于任何字符串都可以用作分隔符。
此刻也許你想知道,既然Array具有把自己轉(zhuǎn)換成字符串的方法,那么String是否有把自己轉(zhuǎn)換成數(shù)組的方法呢?答案是肯定的。String類的方法split()正用于此。split()方法只有一個(gè)參數(shù)??赡苡凶x者已經(jīng)猜到,該參數(shù)就是被看作數(shù)組項(xiàng)之間的分隔符的字符串。因此,如果有一個(gè)由逗號(hào)分隔的字符串,就可以用下面的代碼把它轉(zhuǎn)換成Array對(duì)象:

如果把空字符串聲明為分隔符,那么split()方法返回的數(shù)組中的每個(gè)項(xiàng)是字符串的字符,例如:

這里,字符串"green"將被轉(zhuǎn)換成字符串?dāng)?shù)組"g"、"r"、"e"、"e"和"n"。如果需要逐個(gè)字符的解析字符串,這種功能非常有用。
Array對(duì)象具有兩個(gè)String類具有的方法,即concat()和slice()方法。concat()方法處理數(shù)組的方式幾乎與它處理字符串的方式完全一樣。參數(shù)將被附加在數(shù)組末尾,返回的函數(shù)值是新的Array對(duì)象(包括原始數(shù)組中的項(xiàng)和新的項(xiàng))。例如:

在這個(gè)例子中,用concat()方法把字符串"yellow"和"purple"加到數(shù)組中。數(shù)組aColors2包括5個(gè)值,而原始數(shù)組aColors仍只有3個(gè)值??赏ㄟ^對(duì)兩個(gè)數(shù)組分別調(diào)用toString()方法證明這一點(diǎn)。
相關(guān)文章
JavaScript中this用法學(xué)習(xí)筆記
在本篇文章里小編給大家分享了關(guān)于JavaScript中this用法學(xué)習(xí)筆記以及知識(shí)點(diǎn)總結(jié),有興趣的朋友們學(xué)習(xí)下。2019-03-03Windows下用PyCharm和Visual Studio開始Python編程
這篇文章主要介紹了Windows下用PyCharm和Visual Studio開始Python編程,這兩個(gè)軟件也是Windows下Python的IDE的代表,需要的朋友可以參考下2015-10-10JavaScript 鏈?zhǔn)浇Y(jié)構(gòu)序列化詳解
這篇文章主要介紹了JavaScript 鏈?zhǔn)浇Y(jié)構(gòu)序列化詳解的相關(guān)資料,需要的朋友可以參考下2016-09-09JavaScript中setFullYear()方法的使用詳解
這篇文章主要介紹了JavaScript中setFullYear()方法的使用詳解,是JS入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-06-06

一起來學(xué)習(xí)一下JavaScript的事件流
這篇文章主要為大家詳細(xì)介紹了JavaScript的事件流,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
2022-01-01 
深入理解JavaScript系列(19):求值策略(Evaluation strategy)詳解
這篇文章主要介紹了深入理解JavaScript系列(19):求值策略(Evaluation strategy)詳解,本文講解了一般理論、按值傳遞、按引用傳遞、按共享傳遞(Call by sharing)、按共享傳遞是按值傳遞的特例等內(nèi)容,需要的朋友可以參考下
2015-03-03 
淺談Javascript中勻速運(yùn)動(dòng)的停止條件
這篇文章主要給我們探討了Javascript中勻速運(yùn)動(dòng)的停止條件的原理及其與緩沖運(yùn)動(dòng)的區(qū)別,需要的朋友可以參考下
2014-12-12