1. Object類型
大多數(shù)引用類型值都是Object類型的實(shí)例;而且Object也是ECMAScript中使用最多的一個(gè)類型。
創(chuàng)建Object實(shí)例有如下兩種方式:
new操作符后跟Object構(gòu)造函數(shù):
對象字面量表示法:
2. Array類型
除了Object之外,Array類型恐怕是ECMAScript中最常用的類型了。
ECMAScript數(shù)組的每一項(xiàng)可以保存任何類型的數(shù)據(jù)(例如,第一個(gè)位置可存放字符串,第二個(gè)位置保存數(shù)值,第三個(gè)位置保存對象,以此類推)。而且ECMAScript數(shù)組的大小是可以動(dòng)態(tài)調(diào)整的,即可以隨著數(shù)據(jù)的添加自動(dòng)增長以容納新增數(shù)據(jù)。
創(chuàng)建數(shù)組的基本方式有兩種,
使用Array構(gòu)造函數(shù):
數(shù)組字面量表示法
注:數(shù)組的length屬性很有特點(diǎn)——它不是只讀的。因此通過設(shè)置這個(gè)屬性,可以從數(shù)組的末尾移除或添加項(xiàng)。例如,
2.1 檢測數(shù)組
對于一個(gè)網(wǎng)頁,或者一個(gè)全局作用域而言,使用instanceof操作符就能判斷某個(gè)對象是不是數(shù)組:
instanceof操作符的問題在于,它假定只有一個(gè)全局執(zhí)行環(huán)境。如果網(wǎng)頁中包含多個(gè)框架,那實(shí)際上就存在兩個(gè)以上不同的全局執(zhí)行環(huán)境,從而存在兩個(gè)以上不同版本的Array構(gòu)造函數(shù)。如果你從一個(gè)框架向另一個(gè)框架傳入一個(gè)數(shù)組,那么傳入的數(shù)組與在第二個(gè)框架中原生創(chuàng)建的數(shù)組分別具有各自不同的構(gòu)造函數(shù)。
為了解決這個(gè)問題,ECMAScript5新增了Array.isArray( )方法。這個(gè)方法的目的是最終確定某個(gè)值到底是不是數(shù)組,而不管它是在哪個(gè)全局執(zhí)行環(huán)境中創(chuàng)建的,
支持該方法的瀏覽器有IE9+、Firefox 4+、Safari 5+、Opera 10.5+和Chrome。
2.2 轉(zhuǎn)換方法
調(diào)用數(shù)組的toString( )方法會返回由數(shù)組中每個(gè)值的字符串形式拼接而成的一個(gè)以逗號分隔的字符串。而調(diào)用valueOf( )返回的還是數(shù)組。實(shí)際上,為了創(chuàng)建這個(gè)字符串會調(diào)用數(shù)組每一項(xiàng)的toString( )方法。例如,
另外,toLocaleString( )方法經(jīng)常也會返回與toString( )和valueOf( )方法相同的值,但也不總是如此。當(dāng)調(diào)用數(shù)組的toLocaleString( )方法時(shí),它也會創(chuàng)建一個(gè)數(shù)組值的以逗號分隔的字符串。而與前兩個(gè)方法唯一的不同之處在于,這一次為了取得每一項(xiàng)的值,調(diào)用的是每一項(xiàng)的toLocaleString( )方法,而不是toString( )方法。
2.3 棧方法(LIFO)
push( ):接受任意數(shù)量的參數(shù),把它們逐個(gè)添加到數(shù)組末尾,并返回修改后數(shù)組的長度;
pop( ):從數(shù)組末尾移除最后一項(xiàng)
2.4 隊(duì)列方法(FIFO)
shift( ):移除數(shù)組的第一項(xiàng)并返回該項(xiàng),同時(shí)數(shù)組長度減1;
unshift( ):顧名思義,與shift( )用途相反,能在數(shù)組前端添加任意個(gè)項(xiàng)并返回?cái)?shù)組的長度。
2.5 重排序方法
reverse( ):反轉(zhuǎn)數(shù)組項(xiàng)的順序;
sort( ):默認(rèn)按升序排列;為了實(shí)現(xiàn)排序,sort( )方法會調(diào)用每項(xiàng)的toString( )方法,然后比較得到的字符串,以確定如何排序。即使每一項(xiàng)都是數(shù)值,比較的也是字符串,如下所示。
這種排序方式在很多情況下都不是最佳方案。因此sort( )方法可以接受一個(gè)比較函數(shù)作為參數(shù),以便指定哪個(gè)值位于哪個(gè)值的前面。
這個(gè)比較函數(shù)可以適用大多數(shù)據(jù)類型,只要將其作為參數(shù)傳遞給sort( )方法即可,如下,
2.6 操作方法
concat( ):基于當(dāng)前數(shù)組中的所有項(xiàng)創(chuàng)建一個(gè)新數(shù)組。例如,
slice( ):基于當(dāng)前數(shù)組中的一個(gè)或多個(gè)項(xiàng)創(chuàng)建一個(gè)新數(shù)組。例如,
splice( ):這個(gè)方法恐怕是最強(qiáng)大的數(shù)組方法了,主要用途是向數(shù)組的中部插入項(xiàng),但使用這種方法的方式則有如下2種。
刪除:可以刪除任意數(shù)量的項(xiàng),只需指定2個(gè)參數(shù):要?jiǎng)h除的第一項(xiàng)的位置和要?jiǎng)h除的項(xiàng)數(shù)。
插入:可以向指定位置插入任意數(shù)量的項(xiàng),只需提供3個(gè)參數(shù):起始位置、0(要?jiǎng)h除的項(xiàng)數(shù))和要插入的項(xiàng)。如果要插入多個(gè)項(xiàng),可以再傳第四、第五以至任意多個(gè)項(xiàng);例如,splice(2,0,"red","green")會從當(dāng)前數(shù)組的位置2開始插入字符串"red"和"green"。
splice( )方法始終都會返回一個(gè)數(shù)組,包含從原始數(shù)組中刪除的項(xiàng)(如果沒有刪除任何項(xiàng),則返回空數(shù)組)。
2.7 位置方法
indexOf( )和lastIndexOf( ):這兩個(gè)方法都接受兩個(gè)參數(shù):要查找的項(xiàng)和(可選的)表示查找起點(diǎn)位置的索引。前者從開頭開始向后查找,后者從末尾向前查找
2.8 迭代方法
ECMAScript5為數(shù)組定義了5個(gè)迭代方法,每個(gè)方法都接受兩個(gè)參數(shù):要在每一項(xiàng)上運(yùn)行的函數(shù)和(可選的)運(yùn)行該函數(shù)的作用域?qū)ο蟆绊憈his的值。傳入這些方法中的函數(shù)會接收三個(gè)參數(shù):數(shù)組項(xiàng)的值、該項(xiàng)在數(shù)組中的位置和數(shù)組對象本身。
every( ):對數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),如果該函數(shù)對每一項(xiàng)都返回true,則返回true。
filter( ):對數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),返回該函數(shù)會返回true的項(xiàng)組成的數(shù)組。
forEach( ):對數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),這個(gè)方法無返回值。
map( ):對數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),返回每次函數(shù)調(diào)用的結(jié)果組成的數(shù)組。
some( ):對數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),如果該函數(shù)對任一項(xiàng)返回true,則返回true。
以上方法都不會修改數(shù)組中包含的值。例如,
2.9 歸并方法
reduce( ):從數(shù)組的第一項(xiàng)開始,逐個(gè)遍歷到最后;
reduceRight( ):從數(shù)組的最后一項(xiàng)開始,向前遍歷到第一項(xiàng)。
這兩個(gè)方法都接受兩個(gè)參數(shù):一個(gè)在每一項(xiàng)上調(diào)用的函數(shù)和(可選的)作為歸并基礎(chǔ)的初始值。傳給這些方法的函數(shù)接受4個(gè)參數(shù):前一個(gè)值、當(dāng)前值、項(xiàng)的索引和數(shù)組對象。這個(gè)函數(shù)返回的任何值都會作為第一個(gè)參數(shù)傳給下一項(xiàng)。例如,
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com