Получился странный случай, когда на объект аргументов 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 эти «призрачные» параметры не отображаются.Это не проблема, так как последующим сценариям будут передаваться аргументы и они будут использовать параметр length, который установлен правильно, но интересно, есть ли у кого-нибудь понимание этого поведения?
Да, и между прочим, Firefox 8 абсолютно крут с таким поведением.Что ж, он делает все как положено, за исключением того, что он не показывает объект arguments в инспекторе Watch, хотя он будет отображать его как массив, когда вы наводите на него курсор мыши.Плохой Firefox, плохой плохой Firefox.