Rhino не перечисляет "аргументы" функции

Я пытаюсь использовать переменную "arguments", доступную для функции, чтобы перечислить аргументы, переданные функции, в Javascript, используя:

for (var i in arguments){
   ...
}

Кажется, это работает для меня в консолях Chrome и Firebug, но не работает с Rhino. С первыми двумя я могу успешно войти в цикл for и увидеть аргументы, в то время как со вторым кажется, что цикл for даже не введен.

Почему это происходит и как я могу предотвратить это?

1 ответ

Решение

Из Javascript для... в цикле по аргументам ie.for( arg в аргументах) не работает в IE8, но работает в Chrome 8:

Прежде всего, хотя объект arguments, доступный внутри функции, не является массивом, он достаточно "похож на массив", так что инкрементальный цикл for (for (var i = 0, len = arguments.length; i

Чтобы на самом деле ответить на вопрос, почему второй цикл не работает, важно понять, что делает цикл for... in: он перебирает все перечисляемые свойства, найденные в объекте. Теперь я выделил 2 слова в этом утверждении, потому что я использовал эти два слова целенаправленно, чтобы указать на пару нюансов, которые, хотя они могут показаться неуловимыми, могут существенно повлиять на поведение вашего кода, если вы не понимаете, что происходит,

Сначала давайте сосредоточимся на всем - под этим я имею в виду не только свойства самого объекта, но и потенциально свойства, которые указанный объект унаследовал от своего прототипа, или прототипа своего прототипа, и так далее. По этой причине очень часто рекомендуется "охранять" любой цикл for... in, немедленно дополнительно дополнительно квалифицируя его условием if (obj.hasOwnProperty(p)) (при условии, что ваш цикл был написан для (var p in obj).)).

Но это не то, что вы сталкиваетесь здесь. Для этого давайте сосредоточимся на этом втором слове, перечисляемом. Все свойства объектов в JavaScript являются перечисляемыми или не перечисляемыми, что в значительной степени напрямую связано с тем, отображается ли свойство в цикле for... in или нет. В браузерах, таких как Firefox и IE, оказывается, что числовые свойства объекта arguments не перечисляются (как и его длина), и именно поэтому вы ничего не просматриваете!

Другие вопросы по тегам