IE< = 8 .splice()无效

时间:2011-11-30 21:09:19

标签: javascript

我可以在my fiddle中看到一些简单的代码。它在所有浏览器和IE9中都能正常发出警报,但不能在IE8或7中正确发出警告。

var func = function( x ) {
    var slice = [].slice,
        args = slice.call( arguments ),
        pass = args.splice(1);

    alert( pass );

};

func( 'a', 1, 2 );

修改 使用解决方案我发布了我在这里使用的内容: http://jsfiddle.net/7kXxX/4/

我正在使用这种情况,我不知道会有多少参数,这就是我使用“参数”的原因

5 个答案:

答案 0 :(得分:24)

ECMAScript 3rd edition standard需要第二个deleteCount参数:

Array.prototype.splice(start, deleteCount [, item1 [, item2[,...]]])

MSDN docs表明IE符合此标准:

arrayObj.splice(start, deleteCount, [item1[, item2[, . . . [,itemN]]]])

Firefox的SpiderMonkey允许second argument to be optional(和其他现代浏览器一样):

array.splice(index , howMany[, element1[, ...[, elementN]]])
array.splice(index[, howMany[, element1[, ...[, elementN]]]])

说明

  

<强>的howmany   一个整数,指示要删除的旧数组元素的数量。如果howMany为0,则不删除任何元素。在这种情况下,你   应至少指定一个新元素。如果没有howMany参数   指定(上面的第二个语法,这是一个SpiderMonkey扩展),   删除索引后的所有元素。

来源:

答案 1 :(得分:5)

Splice有一个必需的第二个参数:

http://jsfiddle.net/7kXxX/2/

pass = args.splice(1,2);

可选的第二个参数是较新浏览器中的扩展,如果未定义

,则假定数组的其余部分

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/splice

如果你想要从1到最后的元素,那么切片会更合适,看起来没有任何理由从args中删除元素。

答案 2 :(得分:2)

我对IE中的Array.prototype.splice的解决方案(read more here):

(function () {
    'use strict';
    var originalSplice = Array.prototype.splice;
    Array.prototype.splice = function (start, deleteCount) {
        // convert the weird, not-really-an-array arguments array to a real one
        var args = Array.prototype.slice.call(arguments);
        // IE requires deleteCount; set default value if it doesn't exist
        if (deleteCount === undefined) {
            args[1] = this.length - start;
        }
        // call the original function with the patched arguments
        return originalSplice.apply(this, args);
    };
}());

答案 3 :(得分:1)

var func = function (x) 
{
    alert ([].slice.call (arguments, 1))
}

func( 'a', 1, 2 );

答案 4 :(得分:0)

我不熟悉这个特定问题,但你试过Sugar.js吗?它有一些可能对你有用的方法(我相信用from替换splice会起作用)。