为什么不能在不同的浏览器中使用参数的功能?

时间:2011-12-12 00:18:01

标签: javascript

我想知道为什么在不同浏览器中运行以下代码的结果有不同之处?

(function () {
   //will alert 1, 2, 3 in IE 9, Firefox 8+, Chrome 15,
   // Opera 11 but not in IE 7, 8 and Safari 5
    for (var a in arguments) 
        alert(arguments[a]);
})(1,2,3);

2 个答案:

答案 0 :(得分:4)

因为浏览器具有不同的arguments对象实现。对于跨浏览器方法,请改用length属性。

(function () {
        for (var i=0, nLength = arguments.length; i < nLength; i++) {
            alert(arguments[i]);
        }
    })(1,2,3);

答案 1 :(得分:0)

arguments对象实际上不是一个数组,尽管它在某些方面表现得像一个。这是一个特殊的对象,默认情况下缺少大多数JavaScript array的方法(尽管您可以使用apply()手动应用这些方法),并且包含length属性。

为了访问参数本身,只需使用标准arguments循环遍历for对象。 JavaScript的for-in语句适用于array的内容,但有一些关键的例外,但不是类似数组结构。

for (var i = 0, numArgs = arguments.length; i < numArgs; i++) {
    console.log( arguments[i] );
}

希望有所帮助!