說到 indexOf 大家并不陌生,判斷字符串是否包涵子字符串時特別常用(正則不熟練同學的利器)。
String 類型的使用
溫習一下大家熟知的字符串用法,舉個例子
這里 0 和 3 分別是 o 和 n 在字符串中出現的位置。起始下標是 0。而 -1 代表未匹配。
曾經有人問我為什么偏偏是 -1 不是 null 或者 undefined。你去問制定規(guī)則的人啊!一臉無奈。
大家看到這里感覺沒什么亮點啊,別急接著再來一個例子
看到這里有個小點就是 indexOf 會做簡單的類型轉換,把數字轉換成字符串 '2' 然后再執(zhí)行。
Number 類型的使用
大家可能會想 number 類型有沒有 indexOf 方法因為會做隱式轉換嘛!明確告訴大家沒有,上例子
非要對 number 類型使用 indexOf 方法嘞?那就轉換成字符串咯,接著上例來寫
第一種寫法簡單直接,對于已知的較短的數字也不是不可行。但是 num 變量針對不同數據是變化的時候,怎么辦呢?
第二種寫法為常用,但對比第三種寫法長了一點。哈哈,其實都可以,代碼潔癖的人喜歡第三種
Array 類型的使用
大家提起精神,大boss來了。
數組方法大家再熟悉不過了,卻忽略了數組有 indexOf 這個方法(我個人感覺)。
干說不練瞎扯淡,遇到了什么問題,注意點又在哪里?
這里沒把例子拆的那么細,四個用例足以說明問題。
arr.indexOf(‘orange’) 輸出 0 因為 ‘orange’ 是數組的第 0 個元素,匹配到并返回下標。
arr.indexOf(‘o’) 輸出 -1 因為此方法不會在每一個元素的基礎上再次執(zhí)行 indexOf 匹配。
arr.indexOf(’2016′) 輸出 1 因為此方法從頭匹配直到匹配到時返回第一個數組元素的下表,而不是返回全部匹配的下標。
arr.indexOf(2016) 輸出 -1 注意:這里不會做隱式類型轉換。
既然坑已經發(fā)現我們不妨刨根問底。去MDN官網一看究竟。對此話題感興趣的朋友可以直接跳轉到 Array.prototype.indexOf()
只想了解的朋友下面給大家官方的 Description。
indexOf() compares searchElement to elements of the Array using strict equality (the same method used by the === or triple-equals operator).
一目了然,這里用的是嚴格等于(===)。大家做類似判斷的時候多留意。不要誤認為數字會轉成字符串,同理字符串也不會轉換成數字。
總結
小知識點積累,不作為深入討論的話題,因此這里沒有解釋 indexOf() 的第二個參數,相信大家都知道第二個參數的作用,不知道的可以看這里String.prototype.indexOf(),然后結合上面數組的鏈接也看一下第二個參數。