代码在IE9中不起作用

时间:2012-12-11 08:22:55

标签: javascript

  

可能重复:
  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 );

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

3 个答案:

答案 0 :(得分:6)

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

我建议使用HTML5 doctype作为示例(<!DOCTYPE html>)以确保IE9正确呈现。

答案 1 :(得分:2)

直到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;
    }
}

答案 2 :(得分:0)

的这一行是什么
position > -1 && arrFruits.splice( position, 1 );

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

也许您打算发表if声明?

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