转载

Array及String的lastIndexOf函数用法及其IE8实现

Array.prototype.lastIndexOf 和 String.prototype.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

不过微软的IE8及其以下并不支持这两个函数,需要兼容实现。可以参考:

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语法。

参考: 

原文  http://ourjs.com/detail/56b416d588feaf2d031d246b
正文到此结束
Loading...