rozważyć następujące kwestie:Dlaczego obiekt argumentów javascript zachowuje się tak dziwnie podczas próby modyfikacji?
foo zamierza podjąć argumenty obiekt i zmienić kolejność, przesuwając ARG1 na stanowisko arg2
function foo (args) {
args[2] = args[1];
args[1] = undefined;
}
bar
wywołania Foo z jego argumentów
function bar (a, b, c) {
foo(arguments);
console.log(arguments);
}
I spodziewać się, że wynik następujących czynności będzie podobny do: { 0: 'hello', 1: undefined, 2: 'world' }
bar('hello', 'world');
jednak uzyskać:
{
0: 'hello',
1: undefined,
2: 'world',
3: undefined,
4: undefined,
5: undefined,
6: undefined,
7: undefined,
8: undefined,
9: undefined,
10: undefined,
11: undefined,
12: undefined,
13: undefined,
14: undefined,
15: undefined,
16: undefined,
17: undefined,
18: undefined,
19: undefined
}
Jestem w całkowitej utraty, dlaczego tak się dzieje. Ktoś ma jakieś pomysły?
biegnę to w node.js środowiska
Cóż, to dziwne. Jest to prawdopodobnie związane z modyfikowaniem czegoś ('argumenty'), którego nie można modyfikować. – Cerbrus
Wygląda na to, że jest to problem z V8, ponieważ przy testowaniu przeglądarki "problem" pojawia się tylko w Chrome, ale nie używa Moz Spidermonkey. TBH, uważam, że bezpośrednia manipulacja argumentami "tablica" jest niebezpieczna, a lepiej byłoby zabrać kopię z 'Array.prototype.slice.call (argumenty)' zanim zaczniesz się z tym bawić. – spender
'arguments.length' jest jednak nadal tylko' 2'. – Mackan