在ECMAScript中,所有對象並非同等創建的。一般說來,可以創建並使用的對象有三種。
3.3.1 本地對象
ECMA-262把本地對象(native object)定義為“獨立於宿主環境的ECMAScript實現提供的對象”。簡單說來,本地對象就是ECMA-262定義的類(引用類型)。它們包括:

你已經從上一章了解了一些本地對象(Object、Function、String、Boolean和Number),本書後面的章節中還會討論一些本地對象。現在要討論的兩種重要的本地對象是Array和Date。
1.
Array類
與Java不同的是,在ECMAScript中有真正的Array類。可以如下創建Array對象:

如果預先知道數組中項的個數,可以用參數傳遞數組的大小:

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

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

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

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

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

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

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

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

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

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

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

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

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

在這個例子中,用concat()方法把字符串"yellow"和"purple"加到數組中。數組aColors2包括5個值,而原始數組aColors仍只有3個值。可通過對兩個數組分別調用toString()方法證明這一點。