有一個奇怪的情況,其中JavaScript參數對象嚴重依賴。我有「解決」問題,但想知道如果有人能向我解釋一些,從這個代碼產生的行爲:如何將一個新的參數推送到javascript的參數對象
function whatweget(arg1,arg2,arg3) {
while(arguments.length<3) { arguments[arguments.length++] = undefined; }
console.log(arguments);
}
function argstest() {
arguments[arguments.length++] = 3;
console.log(arguments);
}
whatweget(1,2);
whatweget(1,2,3);
whatweget(1,2,3,4);
argstest(3);
輸出在Chrome:
[1, 2, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined]
[1, 2, 3]
[1, 2, 3, 4]
[3, 3]
檢查arguments對象在whatweget console.log顯示它有20個項目,前3個是粗體,而最後17個稍微褪色。在argstest console.log中檢查參數不會顯示這些'ghost'參數。這不是問題,因爲隨後的腳本將被傳遞'參數'並使用正確設置的'length'參數,但想知道是否有人對此行爲有任何洞察?
哦,順便說一句,Firefox 8是完全酷的這種行爲。它按預期完成一切工作,除非它不在監視器檢查器中顯示參數對象,但將鼠標懸停在其上時將顯示爲數組。糟糕的Firefox,糟糕的糟糕的Firefox。
'arguments'對象不是一個數組,即使它的行爲像一個。我想你需要將它轉換爲一個數組,然後再嘗試向它推送另一個元素。 – Teddy
我意識到這一點,這就是爲什麼我設置了參數object = undefined at [i](類似於arguments.i = undefined)而不是參數arguments.push(undefined)。我也通過arguments.length ++手動更新.length參數。增加的信息:調試器只有在通過whatweget循環時纔會傳遞2個參數,如預期的那樣。那麼這些鬼影值從哪裏添加? – clumsyfingers
@Teddy:您可以修改參數對象的屬性以及其長度屬性。你也可以添加新的。 – shredder