我想知道为什么在不同浏览器中运行以下代码的结果有不同之处?
(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);
答案 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] );
}
希望有所帮助!