引用類型的值是引用類型的實(shí)例。在ECMAScript中瑞信,引用類型是一種數(shù)據(jù)結(jié)構(gòu)执庐,它通常將功能于數(shù)據(jù)組合在一起锻离。有人將他稱之為類渤滞,但這并不妥當(dāng)。因?yàn)樗痪哂袀鹘y(tǒng)面向?qū)ο笳Z言中類所支持的類和接口等基本定義呀闻。
引用類型經(jīng)常被稱作對象定義。原因是他們描述的是一類對象所具有的屬性于方法潜慎。
一個(gè)真正的對象實(shí)際上是某個(gè)特定引用類型的實(shí)例化捡多。對象被new操作符+構(gòu)造函數(shù)創(chuàng)造,再將其賦給一個(gè)引用類型的變量铐炫。
舉個(gè)例子:var person = new Object()
Object()是構(gòu)造函數(shù)垒手,其為一個(gè)新的對象創(chuàng)建了默認(rèn)的屬性和方法(見前文Object的基礎(chǔ)屬性)。
1.Object類型
js中的大多數(shù)引用類型的值都是object類型的實(shí)例倒信。它不具備多少功能科贬,但是是儲(chǔ)存和傳輸數(shù)據(jù)的理想選擇。
創(chuàng)建Object的方法:
1.var person = new Object()? //構(gòu)造函數(shù)法 new Object()
2.var person = {name:'monster'}? //對象字面量表示法 {}
實(shí)際上鳖悠,使用對象字面量法創(chuàng)建引用類習(xí)慣的值時(shí)榜掌,并不會(huì)調(diào)用Object構(gòu)造函數(shù)。因此對象字面量法創(chuàng)建對象的速度要快于構(gòu)造函數(shù)法乘综。
訪問對象屬性時(shí)可以使用兩種方法:點(diǎn)訪問法和方括號(hào)訪問法憎账,方括號(hào)中填字符串,通常來說方括號(hào)訪問法更加優(yōu)越瘾带,因?yàn)榭梢?b>在方括號(hào)內(nèi)使用字符串變量鼠哥。
2.Array類型
ECMAScript中的數(shù)組也時(shí)有序列表,但不同的是數(shù)組中可以包含任意類型的數(shù)據(jù)看政。而且其大小可以動(dòng)態(tài)自動(dòng)調(diào)整朴恳。
創(chuàng)建數(shù)組也有兩種方法:
1.var color = new Array(op1,op2,op3,....,opn) // 構(gòu)造函數(shù)法? new關(guān)鍵字可以省略
2. var color = [op1,op2,op3,....,opn]? //數(shù)組字面量法
注意使用第一種方法時(shí),如果只傳入一個(gè)參數(shù)N允蚣,而且這個(gè)參數(shù)時(shí)整型數(shù)字的話于颖,則該數(shù)字代表當(dāng)前這個(gè)數(shù)組被聲明了長度為N,它當(dāng)前有N個(gè)值為undefined的成員嚷兔。同樣森渐,如果你跳過其中某幾項(xiàng)定義數(shù)組的話做入,被跳過的項(xiàng)也將被賦值為undefined
而且同樣的耐齐,如果使用方法2定義數(shù)組浪秘,其同樣不會(huì)調(diào)用Array構(gòu)造函數(shù)。
數(shù)組的length屬性非常有特點(diǎn)埠况,它不是一個(gè)只讀變量耸携。在將length值增大或縮小的過程中,我們可以實(shí)現(xiàn)刪除或添加新的項(xiàng)目辕翰。
2.1數(shù)組檢測
使用instanceof操作符即可獲得結(jié)果夺衍。(Arr1? instanceof Array)或者使用Array.isArray()方法。
前者的局限在于如果一個(gè)項(xiàng)目中存在兩個(gè)以上框架喜命,那么就會(huì)有兩個(gè)以上的全局執(zhí)行環(huán)境沟沙,則可能存在兩個(gè)以上不同版本的Array構(gòu)造函數(shù),這時(shí)如果將一個(gè)框架中的數(shù)組傳入另外一個(gè)框架中渊抄,則二者有不同的構(gòu)造函數(shù)尝胆,instanceof則會(huì)報(bào)出false。而后者就沒有這樣的煩惱护桦。
2.2轉(zhuǎn)換方法
首先我們知道含衔,toLocaleString(),toString()二庵,valueOf()時(shí)所有對象都擁有的方法贪染。
一個(gè)數(shù)組調(diào)用toString會(huì)返回?cái)?shù)組中所有值的字符串形式,并且以逗號(hào)拼接催享。它實(shí)際上是對數(shù)組的所有屬性調(diào)用toString()方法杭隙,再以逗號(hào)拼接。而toLocaleString()于toString()類似因妙。
調(diào)用valueOf()結(jié)果還是數(shù)組痰憎。
另外铣耘,數(shù)組可以使用join('op')來用'op'作為連接符返回?cái)?shù)組元素的字符串拼接。如果join中不填或填入undefined以故,則默認(rèn)以逗號(hào)來連接蜗细。
2.3棧方法
ECMAScript提供了一種讓數(shù)組的行為類似于棧數(shù)據(jù)結(jié)構(gòu)的方法。使得數(shù)組可以表現(xiàn)的像棧一樣,達(dá)到后進(jìn)先出的效果炉媒。js中的數(shù)組元素變更位置永遠(yuǎn)在棧的頂部arr[arr.length - 1]踪区,添加和刪除的方法:push()和pop()。
2.4隊(duì)列方法
隊(duì)列與棧完全相反吊骤,隊(duì)列遵循LIFO缎岗,先進(jìn)先出。添加元素在末尾arr[arr.length-1]白粉,刪除元素在頭部arr[0]密强。添加和刪除的方法:shift()和push()。
2.5重排序方法
sort()和reverse()方法蜗元,reverse()方法時(shí)將數(shù)組順序顛倒。而sort()方法按升序?qū)?shù)組排序:最小值在最前系冗,最大值在最后奕扣。在這個(gè)實(shí)現(xiàn)過程中,sort()方法會(huì)首先針對每個(gè)成員調(diào)用其toString()函數(shù)掌敬,然后以字符串進(jìn)行比較惯豆。
因此我們推薦寫一個(gè)比較函數(shù)作為參數(shù)傳給sort()函數(shù):
????如果參數(shù)1位于參數(shù)2之前奔害,返回-1
? ? 如果參數(shù)1位于參數(shù)2之后楷兽,返回1
? ? 如果參數(shù)1和參數(shù)2相等,返回0
? ? function compare (val1,val2){
? ? if ( val1 < val2) return -1
? ? else if ( val1 > val2 ) return 1
? ? else return 0
}
如果想降序芯杀,更改比較函數(shù)即可。
當(dāng)然如果數(shù)組元素全部都是數(shù)值類型或者其做valueOf()后可以返回?cái)?shù)值類型的對象雅潭,可以使用一個(gè)更簡單的比較函數(shù):
function compare (val1,val2){
? ? return val2 -val1
}
2.6操作方法
concat():連接當(dāng)前數(shù)組和cancat中的所有參數(shù)揭厚,構(gòu)成一個(gè)新的數(shù)組。
slice(op1,op2):從下標(biāo)op1開始(包括op1)扶供,到下標(biāo)op2結(jié)束(不包括op2)筛圆,取中間元素構(gòu)成新的數(shù)組。
slice功能非常強(qiáng)大椿浓,使用slice太援,可以在數(shù)組的任意位置插入,替換扳碍,刪除某個(gè)或某幾個(gè)元素提岔。
2.7位置方法
indexOf(op1,op2)和lastIndexOf(op1,op2):分別從op2和arr.length-1-op2開始向后和向前查找op1在數(shù)組中所在的位置,找到時(shí)返回所在index位置左腔,未找到返回-1唧垦。
2.8迭代方法
every( fun() ):對數(shù)組中的每一項(xiàng)運(yùn)行給定的函數(shù)fun(),如果每一項(xiàng)的返回值都是true液样,則返回true振亮。用以查詢滿足條件巧还。
filter(?fun() ):對數(shù)組中的每一項(xiàng)運(yùn)行給定的函數(shù)fun(),返回?cái)?shù)組中所有運(yùn)行fun()返回為true的數(shù)組坊秸。用以返回滿足條件的值麸祷。
forEach( fun() ):對數(shù)組中的每一項(xiàng)運(yùn)行給定的函數(shù)fun(),沒有返回值褒搔。用以加工數(shù)組阶牍。
map( fun() ):對數(shù)組中的每一項(xiàng)運(yùn)行給定的函數(shù)fun(),返回每次fun()函數(shù)return的結(jié)果星瘾。用以加工數(shù)組走孽。
some(?fun() ):對數(shù)組中的每一項(xiàng)運(yùn)行給定的函數(shù)fun(),如果任意一項(xiàng)運(yùn)行fun()函數(shù)的返回值是true琳状,則返回true磕瓷。用以查詢滿足條件。