2

可能重复:
IE9 数组不支持 indexOf

我的代码:

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

上面的代码将结果显示apple, banana, datesChrome. 但它在IE9.

4

3 回答 3

6

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

我建议使用 HTML5 文档类型 ( <!DOCTYPE html>) 来确保 IE9 正确呈现。

于 2012-12-11T08:25:54.393 回答
2

直到 IE8 它没有.indexOf方法,你可以像这样添加它,如果你使用的是 IE9检查兼容模式

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;
    }
}
于 2012-12-11T08:27:22.887 回答
0

这条线是干什么用的

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

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

也许你的意思是if发表声明?

 if(position > -1) {
     arrFruits.splice( position, 1 ); 
}
于 2012-12-11T08:33:08.337 回答