国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

詳解JavaScript中數組和字符串的lastIndexOf()方法使用

2019-11-20 10:23:46
字體:
來源:轉載
供稿:網友

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

語法

str.lastIndexOf(searchValue[, fromIndex])

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

參數

1.searchValue
一個字符串,表示被查找的值。
2.fromIndex
從調用該方法字符串的此位置處開始查找。可以是任意整數。默認值為 str.length。如果為負值,則被看作 0。如果 fromIndex > str.length,則 fromIndex 被看作 str.length。

區分大小寫

lastIndexOf 方法區分大小寫。例如,下面的表達式返回 -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// 從正數第二個位置,搜索倒數第一個CD的位置document.write(ar.lastIndexOf("cd", 2) + "<br/>");// 輸出: 1// 從倒數第三個搜索最后一個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實現

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

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

而應該使用 for loop實現

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

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

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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 灌南县| 卫辉市| 丹阳市| 都匀市| 石泉县| 周至县| 青神县| 微博| 阳谷县| 金溪县| 宜都市| 湖北省| 弥勒县| 英吉沙县| 林甸县| 岳西县| 岳池县| 石家庄市| 长岭县| 阿巴嘎旗| 克拉玛依市| 渑池县| 邵武市| 林周县| 延庆县| 五家渠市| 内乡县| 柘荣县| 武城县| 贞丰县| 宁武县| 锦州市| 东山县| 随州市| 加查县| 长汀县| 东平县| 疏勒县| 来安县| 永吉县| 崇仁县|