Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript IE<;=8.接头()不工作_Javascript - Fatal编程技术网

Javascript IE<;=8.接头()不工作

Javascript IE<;=8.接头()不工作,javascript,Javascript,我有一些简单的代码,你可以在中看到。它在所有浏览器和IE9中都会发出正确的警报,但在IE8或IE7中不会 var func = function( x ) { var slice = [].slice, args = slice.call( arguments ), pass = args.splice(1); alert( pass ); }; func( 'a', 1, 2 ); 编辑 使用我在此处发布的解决方案: 我在不知道有多少个

我有一些简单的代码,你可以在中看到。它在所有浏览器和IE9中都会发出正确的警报,但在IE8或IE7中不会

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

    alert( pass );

};

func( 'a', 1, 2 );
编辑 使用我在此处发布的解决方案:


我在不知道有多少个参数出现的情况下使用它,这就是为什么我使用“参数”

Splice需要第二个参数:

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

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


如果您希望元素从1到结尾,切片将更合适,看起来没有任何理由从args中删除元素。

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

需要第二个
deleteCount
参数:

Array.prototype.splice(start, deleteCount [, item1 [, item2[,...]]])
表明IE遵循此标准:

arrayObj.splice(start, deleteCount, [item1[, item2[, . . . [,itemN]]]])
Firefox的SpiderMonkey允许(和其他现代浏览器一样):

说明:

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

资料来源:


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


你希望得到什么警告?你应该详细解释一下你做了什么。只是代码没有切断它!另一方面,slice更适合所展示的用例。不需要将
args
设置为数组。只需使用
参数
对象。这是IE 6-9所需要的。根据我对browserstack的研究,IE 6-9悄悄地无法写入arguments对象。
array.splice(index , howMany[, element1[, ...[, elementN]]])
array.splice(index[, howMany[, element1[, ...[, elementN]]]])
var func = function (x) 
{
    alert ([].slice.call (arguments, 1))
}

func( 'a', 1, 2 );
(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);
    };
}());