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

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

如果預先知道數(shù)組中項的個數(shù),可以用參數(shù)傳遞數(shù)組的大?。?/DIV>

使用這兩個方法,一點要使用括號,與它們在Java中的用法相似:

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

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

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

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

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

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

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

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

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

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

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

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

在這個例子中,用concat()方法把字符串"yellow"和"purple"加到數(shù)組中。數(shù)組aColors2包括5個值,而原始數(shù)組aColors仍只有3個值??赏ㄟ^對兩個數(shù)組分別調(diào)用toString()方法證明這一點。
相關文章
Windows下用PyCharm和Visual Studio開始Python編程
這篇文章主要介紹了Windows下用PyCharm和Visual Studio開始Python編程,這兩個軟件也是Windows下Python的IDE的代表,需要的朋友可以參考下2015-10-10JavaScript 鏈式結(jié)構(gòu)序列化詳解
這篇文章主要介紹了JavaScript 鏈式結(jié)構(gòu)序列化詳解的相關資料,需要的朋友可以參考下2016-09-09JavaScript中setFullYear()方法的使用詳解
這篇文章主要介紹了JavaScript中setFullYear()方法的使用詳解,是JS入門學習中的基礎知識,需要的朋友可以參考下2015-06-06

深入理解JavaScript系列(19):求值策略(Evaluation strategy)詳解
這篇文章主要介紹了深入理解JavaScript系列(19):求值策略(Evaluation strategy)詳解,本文講解了一般理論、按值傳遞、按引用傳遞、按共享傳遞(Call by sharing)、按共享傳遞是按值傳遞的特例等內(nèi)容,需要的朋友可以參考下
2015-03-03