詳解JavaScript中數(shù)組和字符串的lastIndexOf()方法使用
來源:易賢網(wǎng) 閱讀:858 次 日期:2016-07-20 15:55:20
溫馨提示:易賢網(wǎng)小編為您整理了“詳解JavaScript中數(shù)組和字符串的lastIndexOf()方法使用”,方便廣大網(wǎng)友查閱!

Array.prototype.lastIndexOf 和 String.prototype.lastIndexOf 是非常的實用的方法,不過很多人不知道它其實可以傳遞兩個參數(shù),第二個參數(shù)決定了搜索的起始位置:

語法

str.lastIndexOf(searchValue[, fromIndex])

lastIndexOf() 方法返回指定值在調(diào)用該方法的字符串中最后出現(xiàn)的位置,如果沒找到則返回 -1。從該字符串的后面向前查找,從 fromIndex 處開始。

參數(shù)

1.searchValue

一個字符串,表示被查找的值。

2.fromIndex

從調(diào)用該方法字符串的此位置處開始查找??梢允侨我庹麛?shù)。默認值為 str.length。如果為負值,則被看作 0。如果 fromIndex > str.length,則 fromIndex 被看作 str.length。

區(qū)分大小寫

lastIndexOf 方法區(qū)分大小寫。例如,下面的表達式返回 -1:

"Blue Whale, Killer Whale".lastIndexOf("blue"); // returns -1

lastIndexOf的用法

// Create an array.

var ar = ["ab", "cd", "ef", "ab", "cd"];

// 找到最后一個CD的位置

document.write(ar.lastIndexOf("cd") + "<br/>");

// 輸出: 4

// 從正數(shù)第二個位置,搜索倒數(shù)第一個CD的位置

document.write(ar.lastIndexOf("cd", 2) + "<br/>");

// 輸出: 1

// 從倒數(shù)第三個搜索最后一個ab的位置

document.write(ar.lastIndexOf("ab", -3) + "<br/>");

// 輸出: 0

同樣 String.lastIndexOf的用法類似

"canal".lastIndexOf("a") // returns 3

"canal".lastIndexOf("a",2) // returns 1

"canal".lastIndexOf("a",0) // returns -1 從第0個往前搜,不存在'a',返回-1

"canal".lastIndexOf("x") // returns -1

lastIndexOf的IE8實現(xiàn)

不過微軟的IE8及其以下并不支持Array.lastIndexOf,需要兼容實現(xiàn)。可以參考:

if (!Array.prototype.lastIndexOf) {

 Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {

 'use strict';

 if (this === void 0 || this === null) {

  throw new TypeError();

 }

 var n, k,

  t = Object(this),

  len = t.length >>> 0;

 if (len === 0) {

  return -1;

 }

 n = len - 1;

 if (arguments.length > 1) {

  n = Number(arguments[1]);

  if (n != n) {

  n = 0;

  }

  else if (n != 0 && n != (1 / 0) && n != -(1 / 0)) {

  n = (n > 0 || -1) * Math.floor(Math.abs(n));

  }

 }

 for (k = n >= 0

   ? Math.min(n, len - 1)

   : len - Math.abs(n); k >= 0; k--) {

  if (k in t && t[k] === searchElement) {

  return k;

  }

 }

 return -1;

 };

}

可以使用 ES5-Slim 使舊版瀏覽器完全兼容ES5語法。

為什么要避免使用for in

不過要注意的是,在Array.prototype上面附加方法后,for in語法也會把lastIndexOf方法也枚舉出來:

for (var idx in [1,3,5,7,9]) {

 console.log(idx)

}

>> 0 1 2 3 4 lastIndexOf

而應(yīng)該使用 for loop實現(xiàn)

for (var idx = 0; idx < [1,3,5,7,9].length; idx++) {

 console.log(idx)

}

這個問題可以使用 Object.defineProperty 來實現(xiàn),來避免for in的枚舉出lastIndexOf方法:

Object.defineProperty(Array, "lastIndexOf", { enumerable: false })

不過一般需要兼容實現(xiàn)的瀏覽器根本不支持defineProperty 方法。并且在多數(shù)瀏覽器上for in都比for loop要慢很多,因此應(yīng)該盡量避免使用for in。但是如何枚舉Object屬性的key呢? 使用Object.keys({ a:1 })即可返回關(guān)于keys的數(shù)組。

更多信息請查看網(wǎng)絡(luò)編程
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

2025國考·省考課程試聽報名

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報警專用圖標(biāo)