【20190407】JavaScript-indexOf方法解析

在JavaScript中,字符串類型String和數組類型Array都有indexOf()方法,雖然他們的做用都是返回傳入元素在指定字符串或數組中的位置,但他們之間仍是存在着一點點不一樣。正則表達式

Str.indexOf(searchValue[, fromIndex])

字符串調用indexOf方法,返回searchValue在原字符串中第一次出現的位置,能夠使用lastIndexOf方法查找searchValue最後一次出現的位置,若是沒有找到則返回-1。數組

它與數組的indexOf方法不一樣的是,它比較元素時會存在類型轉換。app

console.log('12345'.indexOf(3)); //2
console.log('12345'.indexOf([3])); //2
console.log('12345'.indexOf(new Object(3))); //2

這裏傳入的實際上分別是數值類型、數組類型、對象,可是它仍是返回了這個元素在字符串中的位置。函數

console.log('12345'.indexOf(45)); //3
console.log('12345'.indexOf([45])); //3
console.log('12345'.indexOf(new Object(45))); //3

從以上例子能夠看到實際上這個函數把傳入的元素轉換爲了字符串,而後按照匹配子字符串的方式找到它在原字符串中的位置。spa

另外indexOf方法對大小寫敏感。code

str.search(RegExp)

順便再提一下search方法,search方法用於檢索字符串中指定的子字符串,檢索與正則表達式相匹配的子字符串。若是沒有找到,返回-1。regexp

search() 方法不執行全局匹配,它將忽略標誌 g。它同時忽略 regexp 的 lastIndex 屬性,而且老是從字符串的開始進行檢索,這意味着它老是返回 str 的第一個匹配的位置。它一樣對大小寫敏感,若是要忽略大小寫則在RegExp中添加標誌i。對象

Arr.indexOf(searchValue[, fromIndex])

一樣返回的是searchValue在Arr中第一次出現的位置,可是數組的indexOf方法執行的是嚴格相等,也就是「===」,不會有類型轉換。blog

let arr=['apple','banana','12','apple'];
console.log(arr.indexOf('apple')); //0
console.log(arr.indexOf('apple',1)); //3
console.log(arr.indexOf(12)); //-1
console.log(arr.indexOf('app')); //-1
相關文章
相關標籤/搜索