【问题标题】:Code is not working in IE9 [duplicate]代码在 IE9 中不起作用 [重复]
【发布时间】:2012-11-28 18:26:11
【问题描述】:

可能重复:
IE9 array does not support indexOf

我的代码:

var arrFruits = ['apple', 'banana', 'carrot', 'dates'];
var position = arrFruits.indexOf( 'carrot' );
position > -1 && arrFruits.splice( position, 1 );
alert( arrFruits );

以上代码在Chrome 中将结果显示为apple, banana, dates。但它在IE9 中不起作用。

【问题讨论】:

  • “不工作”是什么意思?
  • “不工作”是什么意思?它触发语法错误?它警报未定义?让电脑爆炸?
  • 指定“不工作”你会收到错误吗?
  • 在我的 IE9 中工作正常,但数组 indexOf 在 IE8 中可能不起作用-FIDDLE
  • 这是您遇到的错误吗? “对象不支持属性或方法'indexOf'”

标签: javascript


【解决方案1】:

直到 IE8 它没有 .indexOf 方法,you can add it like this,如果您使用 IE9 check 进行兼容模式

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 > 1) {
            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;
    }
}

【讨论】:

  • IE9 是否支持 array.indexOf ?
  • IE9 确实支持它。您只需要确保页面在 IE9 模式下运行。旧的文档类型可能会导致它在 IE7/8 模式下运行。请参阅此SO question 了解更多信息:
【解决方案2】:

这条线是干什么用的

position > -1 && arrFruits.splice( position, 1 );

它评估为truefalse,然后你不会对它做任何事情。这可能会导致 IE 中的语法错误,Chrome 和 Firefox 上更宽容的 Javascript 引擎会忽略它。

也许您打算发表if 声明?

 if(position > -1) {
     arrFruits.splice( position, 1 ); 
}

【讨论】:

  • 这两种解决方案在所有现代浏览器上都能正常工作(尽管第二个确实更清晰)。
  • 我认为这意味着 Ie9 将 && 视为短路和?这是规范的一部分还是只是一个方便的 ms 技巧?
【解决方案3】:

可能是不支持.indexOf 的问题。 IE9 基本上支持它,除非某些恶意文档类型触发它以 IE7/8 模式呈现页面。不支持Array.indexOf 方法。

我建议使用 HTML5 文档类型 (&lt;!DOCTYPE html&gt;) 来确保 IE9 正确呈现。

【讨论】:

  • 我同意。类似帖子here.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-10
  • 1970-01-01
  • 1970-01-01
  • 2011-07-27
  • 2012-09-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多