IE <= 8 .splice()不起作用

Dav*_*ein 19 javascript

我有一些简单的代码,你可以在我的小提琴中看到.它在所有浏览器和IE9中正确警报,但不是IE8或7.

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

    alert( pass );

};

func( 'a', 1, 2 );
Run Code Online (Sandbox Code Playgroud)

编辑 使用解决方案我发布了我在这里使用的:http: //jsfiddle.net/7kXxX/4/

我正在使用这个,我不知道有多少参数,这就是我使用"参数"的原因

Way*_*ett 24

ECMAScript的第三版标准要求的第二个deleteCount参数:

Array.prototype.splice(start, deleteCount [, item1 [, item2[,...]]])
Run Code Online (Sandbox Code Playgroud)

MSDN文档显示IE遵循此标准:

arrayObj.splice(start, deleteCount, [item1[, item2[, . . . [,itemN]]]])
Run Code Online (Sandbox Code Playgroud)

Firefox的SpiderMonkey允许第二个参数是可选的(与其他现代浏览器一样):

array.splice(index , howMany[, element1[, ...[, elementN]]])
array.splice(index[, howMany[, element1[, ...[, elementN]]]])
Run Code Online (Sandbox Code Playgroud)

描述:

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

资料来源:


Esa*_*ija 5

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

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

pass = args.splice(1,2);
Run Code Online (Sandbox Code Playgroud)

可选的第二个参数是较新浏览器中的扩展,如果未定义,则假定数组的其余部分

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

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