 JavaScript數組中的indexOf方法詳(xiang)解
							時間:2018-09-28      來源:未知
							JavaScript數組中的indexOf方法詳(xiang)解
							時間:2018-09-28      來源:未知 
							說到 indexOf 大家并不(bu)陌生(sheng),判斷(duan)字(zi)符串是否包涵(han)子字(zi)符串時特別(bie)常用(yong)(正則(ze)不(bu)熟練同(tong)學的(de)利器)。
String 類型的使(shi)用(yong)
溫習(xi)一下大家熟知的字符串(chuan)用法,舉個例子
這里(li) 0 和(he) 3 分別是 o 和(he) n 在字符串中出現的(de)位置(zhi)。起始下(xia)標(biao)是 0。而(er) -1 代表未匹配。
曾經有(you)人(ren)問我為什么(me)偏偏是 -1 不是 null 或者 undefined。你去問制定(ding)規則的人(ren)啊(a)!一臉(lian)無(wu)奈。
大家看到這里感覺沒什(shen)么亮點啊(a),別急接(jie)著再(zai)來一個例子
看到這里有個小點就是 indexOf 會做簡單的(de)類型轉(zhuan)換,把數字(zi)(zi)轉(zhuan)換成字(zi)(zi)符串(chuan) '2' 然后再(zai)執行。
Number 類型的使(shi)用
大家(jia)可(ke)能會(hui)想 number 類型有(you)沒有(you) indexOf 方法因為會(hui)做隱(yin)式轉(zhuan)換嘛!明確告(gao)訴(su)大家(jia)沒有(you),上例子
非(fei)要對 number 類型使用 indexOf 方法嘞?那就轉換(huan)成字符(fu)串咯,接著上例來寫
第一種寫法簡(jian)單直接,對于已知(zhi)的(de)較短的(de)數(shu)字也不(bu)是不(bu)可行。但(dan)是 num 變(bian)量(liang)針對不(bu)同數(shu)據是變(bian)化(hua)的(de)時(shi)候,怎么辦(ban)呢?
第二(er)種寫法為常用,但對比第三(san)種寫法長了一(yi)點。哈(ha)(ha)哈(ha)(ha),其實都可以,代(dai)碼潔癖(pi)的人(ren)喜歡(huan)第三(san)種
Array 類型(xing)的(de)使用
大(da)家提(ti)起精神,大(da)boss來了。
數組方(fang)法(fa)大家再熟悉不過了,卻(que)忽略了數組有 indexOf 這個方(fang)法(fa)(我個人(ren)感覺)。
干說不(bu)練瞎(xia)扯淡,遇到了什(shen)么(me)問題,注意點(dian)又在哪里(li)?
這里沒(mei)把例子拆的那么細,四個用例足以(yi)說明(ming)問題。
arr.indexOf(‘orange’) 輸出 0 因為 ‘orange’ 是數組的第 0 個元素(su),匹(pi)配到(dao)并(bing)返回下標。
arr.indexOf(‘o’) 輸出 -1 因為此方法不會在每一個元(yuan)素的基(ji)礎上再(zai)次執行 indexOf 匹配。
arr.indexOf(’2016′) 輸(shu)出(chu) 1 因為此方法(fa)從頭匹(pi)配(pei)直到(dao)匹(pi)配(pei)到(dao)時(shi)返回(hui)第一(yi)個數組元素的(de)(de)下表,而不是返回(hui)全部(bu)匹(pi)配(pei)的(de)(de)下標。
arr.indexOf(2016) 輸出 -1 注意:這里不會做隱式(shi)類型轉(zhuan)換。
既然(ran)坑已經(jing)發現我們不妨刨(bao)根問(wen)底。去MDN官網一看(kan)究竟。對此話題(ti)感興(xing)趣的(de)朋友可以直接跳轉(zhuan)到 Array.prototype.indexOf()
只(zhi)想(xiang)了解(jie)的朋(peng)友下面給大家官(guan)方的 Description。
indexOf() compares searchElement to elements of the Array using strict equality (the same method used by the === or triple-equals operator).
一(yi)目了(le)然,這里(li)用的是嚴格等于(yu)(===)。大(da)家做類(lei)似判斷的時候多(duo)留意。不要(yao)誤認為(wei)數字(zi)會轉成字(zi)符(fu)串,同(tong)理(li)字(zi)符(fu)串也不會轉換成數字(zi)。
總結
小知識點積累,不作為深入討論(lun)的(de)(de)(de)話題,因此這里沒有解(jie)釋 indexOf() 的(de)(de)(de)第(di)二個(ge)參(can)數,相(xiang)信大家都知道第(di)二個(ge)參(can)數的(de)(de)(de)作用,不知道的(de)(de)(de)可以看這里String.prototype.indexOf(),然后結合上面數組的(de)(de)(de)鏈接也看一(yi)下第(di)二個(ge)參(can)數。

