2019-12-18:第五章:引用類型(Object和Arrary)

引用類型的值是引用類型的實(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

跳過0,1同衣,2竟块,3,4項(xiàng)

而且同樣的耐齐,如果使用方法2定義數(shù)組浪秘,其同樣不會(huì)調(diào)用Array構(gòu)造函數(shù)。

數(shù)組的length屬性非常有特點(diǎn)埠况,它不是一個(gè)只讀變量耸携。在將length值增大或縮小的過程中,我們可以實(shí)現(xiàn)刪除或添加新的項(xiàng)目辕翰。

第五項(xiàng)被刪除了
添加了一個(gè)新的項(xiàng)目‘a(chǎn)aa'

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ù)組痰憎。

可以發(fā)現(xiàn),當(dāng)我們重寫了toString于toLocaleString時(shí)攀涵,得到的結(jié)果就不一樣了

另外铣耘,數(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()。

在數(shù)組尾部發(fā)生操作

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)行比較惯豆。

可以發(fā)現(xiàn),以字符串進(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

}

結(jié)果正常了华临。

如果想降序芯杀,更改比較函數(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ù)組。

concat()

slice(op1,op2):從下標(biāo)op1開始(包括op1)扶供,到下標(biāo)op2結(jié)束(不包括op2)筛圆,取中間元素構(gòu)成新的數(shù)組。

包含a[1],不包含a[4]

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振亮。用以查詢滿足條件巧还。

every

filter(?fun() ):對數(shù)組中的每一項(xiàng)運(yùn)行給定的函數(shù)fun(),返回?cái)?shù)組中所有運(yùn)行fun()返回為true的數(shù)組坊秸。用以返回滿足條件的值麸祷。

filter

forEach( fun() ):對數(shù)組中的每一項(xiàng)運(yùn)行給定的函數(shù)fun(),沒有返回值褒搔。用以加工數(shù)組阶牍。

forEach

map( fun() ):對數(shù)組中的每一項(xiàng)運(yùn)行給定的函數(shù)fun(),返回每次fun()函數(shù)return的結(jié)果星瘾。用以加工數(shù)組走孽。

map

some(?fun() ):對數(shù)組中的每一項(xiàng)運(yùn)行給定的函數(shù)fun(),如果任意一項(xiàng)運(yùn)行fun()函數(shù)的返回值是true琳状,則返回true磕瓷。用以查詢滿足條件。

some
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末念逞,一起剝皮案震驚了整個(gè)濱河市困食,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌翎承,老刑警劉巖硕盹,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異叨咖,居然都是意外死亡瘩例,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進(jìn)店門芒澜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來仰剿,“玉大人,你說我怎么就攤上這事痴晦∧纤保” “怎么了?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵誊酌,是天一觀的道長部凑。 經(jīng)常有香客問我,道長碧浊,這世上最難降的妖魔是什么涂邀? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮箱锐,結(jié)果婚禮上比勉,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好浩聋,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布观蜗。 她就那樣靜靜地躺著,像睡著了一般衣洁。 火紅的嫁衣襯著肌膚如雪墓捻。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天坊夫,我揣著相機(jī)與錄音砖第,去河邊找鬼。 笑死环凿,一個(gè)胖子當(dāng)著我的面吹牛梧兼,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播智听,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼袱院,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了瞭稼?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤腻惠,失蹤者是張志新(化名)和其女友劉穎环肘,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體集灌,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡悔雹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了欣喧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片腌零。...
    茶點(diǎn)故事閱讀 40,127評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖唆阿,靈堂內(nèi)的尸體忽然破棺而出益涧,到底是詐尸還是另有隱情,我是刑警寧澤驯鳖,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布闲询,位于F島的核電站,受9級特大地震影響浅辙,放射性物質(zhì)發(fā)生泄漏扭弧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一记舆、第九天 我趴在偏房一處隱蔽的房頂上張望鸽捻。 院中可真熱鬧,春花似錦、人聲如沸御蒲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽删咱。三九已至屑埋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間痰滋,已是汗流浹背摘能。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留敲街,地道東北人团搞。 一個(gè)月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像多艇,于是被迫代替她去往敵國和親逻恐。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Lua 5.1 參考手冊 by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 13,812評論 0 38
  • ??引用類型的值(對象)是引用類型的一個(gè)實(shí)例。 ??在 ECMAscript 中姆涩,引用類型是一種數(shù)據(jù)結(jié)構(gòu)挽拂,用于將數(shù)...
    霜天曉閱讀 1,059評論 0 1
  • 本章內(nèi)容 使用對象 創(chuàng)建并操作數(shù)組 理解基本的 JavaScript 類型 使用基本類型和基本包裝類型 引用類型的...
    悶油瓶小張閱讀 682評論 0 0
  • 第3章 基本概念 3.1 語法 3.2 關(guān)鍵字和保留字 3.3 變量 3.4 數(shù)據(jù)類型 5種簡單數(shù)據(jù)類型:Unde...
    RickCole閱讀 5,128評論 0 21
  • JavaScript語言精粹 前言 約定:=> 表示參考相關(guān)文章或書籍; JS是JavaScript的縮寫。 本書...
    微笑的AK47閱讀 581評論 0 3