我想知道爲什麼在不同瀏覽器中運行以下代碼的結果有不同?爲什麼不能在不同的瀏覽器中使用參數的功能?
(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);
我想知道爲什麼在不同瀏覽器中運行以下代碼的結果有不同?爲什麼不能在不同的瀏覽器中使用參數的功能?
(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);
因爲瀏覽器有不同的參數對象的實現。對於跨瀏覽器方法,請改用length屬性。
(function() {
for (var i=0, nLength = arguments.length; i < nLength; i++) {
alert(arguments[i]);
}
})(1,2,3);
的arguments
對象實際上是不是一個數組,雖然它的行爲就像一個在某些方面。這是一個特殊的對象,默認情況下缺少大多數JavaScript array
的方法(儘管您可以使用apply()
手動應用這些方法),並且包含length
屬性。
爲了訪問參數本身,只需使用標準for
循環遍歷arguments
對象。 JavaScript的for-in
聲明適用於array
的內容,但有一些重要的例外,但不是這種陣列式的結構。
for (var i = 0, numArgs = arguments.length; i < numArgs; i++) {
console.log(arguments[i]);
}
希望有幫助!
另外作爲一般規則,當您可以使用常規for循環時,絕不應使用'for var i in'。 –
大鼠。你比我快。 :) – piersadrian
@PeterWilkinson - 建議你不應該使用'for/in'循環迭代數組的項目。使用它來迭代對象的屬性是非常好的(事實上,這是推薦的方法)。在這種情況下'arguments'是一個僞數組,因此您應該使用迭代的數組方法。 – jfriend00