javascript - 我应该使用哪个indexOf函数?

标签 javascript jquery

我在代码库中遇到了以下代码来添加indexOf函数:

if (!Array.prototype.indexOf)
{
  Array.prototype.indexOf = function(elt /*, from*/)
  {
    var len = this.length >>> 0;

    var from = Number(arguments[1]) || 0;
    from = (from < 0)
         ? Math.ceil(from)
         : Math.floor(from);
    if (from < 0)
      from += len;

    for (; from < len; from++)
    {
      if (from in this &&
          this[from] === elt)
        return from;
    }
    return -1;
  };
}

这与 Mozilla https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/indexOf 推荐的实现不同。 :

代码:

   if (!Array.prototype.indexOf) {  
        Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {  
            "use strict";  
            if (this == null) {  
                throw new TypeError();  
            }  
            var t = Object(this);  
            var len = t.length >>> 0;  
            if (len === 0) {  
                return -1;  
            }  
            var n = 0;  
            if (arguments.length > 0) {  
                n = Number(arguments[1]);  
                if (n != n) { // shortcut for verifying if it's NaN  
                    n = 0;  
                } else if (n != 0 && n != Infinity && n != -Infinity) {  
                    n = (n > 0 || -1) * Math.floor(Math.abs(n));  
                }  
            }  
            if (n >= len) {  
                return -1;  
            }  
            var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);  
            for (; k < len; k++) {  
                if (k in t && t[k] === searchElement) {  
                    return k;  
                }  
            }  
            return -1;  
        }  
    }  

我应该使用 Mozilla 版本还是问题开头提到的版本就足够了?使用其中一种比另一种有优势吗?

最佳答案

它们都来自 MDN,但第一个版本来自旧版本的 indexOf 页面。新版本是为了使实现与 ECMAScript 5 规范中发布的算法保持一致而进行的更新。考虑到所有这些,使用新版本似乎是合理的。

以下是 MDN 页面上进行更改的差异:

https://developer.mozilla.org/index.php?title=en/JavaScript/Reference/Global_Objects/Array/indexOf&action=diff&revision=32&diff=33

关于javascript - 我应该使用哪个indexOf函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11159943/

相关文章:

javascript - 多个粘性元素

jquery - 如何使用 Flask 从 devbridge 实现 jquery 自动完成?

javascript - 仅在另一个脚本完成后才运行另一个脚本

javascript - 如何为按钮文本设置动画? (加载类型的动画)-jquery?

javascript - 如何根据读取的 cookie 值使超链接指向不同的 url?

javascript - 正则表达式:如何像 DOM 渲染器那样删除多余的空格/换行符(处理)

javascript - jQuery:显示/隐藏是即时的

javascript - 如何实现chrome扩展按固定时间间隔弹出桌面通知

javascript - php javascript 拖放

javascript - 使用 Javascript 填充 Umbraco 内容表单