Author |
Message |
dimagolov
Участник форума
Joined: 04 Feb 2007
Posts: 1664
Карма: 96 поощрить/наказать
Location: Christ Church, Barbados
|
Posted: Sun Mar 07, 2010 9:14 pm (написано за 3 минуты 50 секунд)
Post subject: for (var x in arr)
|
|
Всегда был уверен, что конструкция for (var x in arr) отдает все свойства объекта. Сегодня убедился, что FF 3.5.8, IE 6,7, Crome 4.0, Safari 4.0.4 (все Win32) не отдают свойство length для массива. Это так и должно быть и я пропустил что-то в описании for?
|
|
Back to top |
|
 |
Александр Михалицын
Модератор
Joined: 23 May 2008
Posts: 1299
Карма: 83 поощрить/наказать
|
Posted: Mon Mar 08, 2010 6:46 pm (спустя 21 час 31 минуту; написано за 44 секунды)
Post subject:
|
|
dimagolov, дело в том, что Array, это native объект языка, и для него for, видимо, не выводит все свойства.
|
|
Back to top |
|
 |
Александр Михалицын
Модератор
Joined: 23 May 2008
Posts: 1299
Карма: 83 поощрить/наказать
|
Posted: Mon Mar 08, 2010 6:58 pm (спустя 12 минут; написано за 1 минуту 23 секунды)
Post subject:
|
|
Кстати, если глянуть стандарт там четко прописано, что фор ин возвращает только те свойства, у которых нет флага "DontEnum". А еще в стандарте написано, что свойства native объектов по умолчанию имеют этот флаг.
|
|
Back to top |
|
 |
dimagolov
Участник форума
Joined: 04 Feb 2007
Posts: 1664
Карма: 96 поощрить/наказать
Location: Christ Church, Barbados
|
Posted: Mon Mar 08, 2010 7:08 pm (спустя 10 минут; написано за 19 секунд)
Post subject:
|
|
Александр Михалицын, это я понимаю в общем и целом. Я спрашивал про эволюцию этого момента от версии к версии и прямых указаниях в стандарте на этот счет. Например, в Core JavaScript 1.5 Guide (developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Object_Manipulation_Statements#for...in_Statement): Хотя в описании как бы не сказано, по каким именно свойствам идет перебор (вернее даже сказано что по всем): Quote: |
The for...in statement iterates a specified variable over all the properties of an object. For each distinct property, JavaScript executes the specified statements. | Но в ремарке про массив есть хитрое уточнение: Quote: |
Arrays Although it may be tempting to use this as a way to iterate over Array elements, because the for...in statement iterates over user-defined properties in addition to the array elements, if you modify the Array object, such as adding custom properties or methods, the for...in statement will return the name of your user-defined properties in addition to the numeric indexes. Thus it is better to use a traditional for loop with a numeric index when iterating over arrays. | Из чего следует, что для массива for...in работает не так, как для "обычного" объекта. Можно сделать общий вывод, что for...in ходит не по всем свойствам объекта, а только по назначенным пользователем. Спасибо за каммент про стандарт.
|
|
Back to top |
|
 |
Александр Михалицын
Модератор
Joined: 23 May 2008
Posts: 1299
Карма: 83 поощрить/наказать
|
Posted: Mon Mar 08, 2010 7:45 pm (спустя 36 минут; написано за 26 секунд)
Post subject:
|
|
dimagolov, javascript.ru/ecma/part12#a-12.6.4
javascript.ru/ecma/part15: Quote: |
В каждом случае свойство length каждого встроенного объекта Function, описанного в этом разделе, обладает атрибутами { ReadOnly, DontDelete, DontEnum } и никакими другими. Любое другое свойство в этом разделе обладает атрибутом { DontEnum } и никакими другими, если иное не указывается явно. |
|
|
Back to top |
|
 |
Rumata
Профессионал

Joined: 17 Aug 2003
Posts: 1850
Карма: 185 поощрить/наказать
|
Posted: Tue Mar 09, 2010 12:13 am (спустя 4 часа 27 минут; написано за 1 минуту 42 секунды)
Post subject:
|
|
Александр Михалицын, точная цитата javascript.ru/ecma/part15#a-15.4.5.2 wrote: |
Свойство length данного объекта типа Array всегда численно больше, чем имя каждого свойства, имя которого является индексом массива. Свойство length обладает атрибутами { DontEnum, DontDelete }. | Иначе не работало бы
|
|
Back to top |
|
 |
Юрий Насретдинов
Модератор

Joined: 13 Mar 2003
Posts: 8642
Карма: 198 поощрить/наказать
Location: 007 495
|
Posted: Wed Mar 17, 2010 8:12 pm (спустя 8 дней 19 часов 58 минут; написано за 1 минуту 42 секунды)
Post subject:
|
|
Кстати, что интересно, Firebug не показывает свойств у объектов типа Array, и JsHttpRequest тоже эти свойства игнорирует. Хотя при переборе, как оказалось, атрибут length даже не стал бы показываться :). Так что, вероятно, со стандартом ECMA хорошо знакомы лишь разработчики более-менее современных браузеров, а уже даже разработчики Firebug о таких «тонкостях» не знают.
|
|
Back to top |
|
 |
armix
Заглянувший
Joined: 23 May 2011
Posts: 12
Карма: 1 поощрить/наказать
|
Posted: Tue Jul 19, 2011 10:04 am (спустя 1 год 4 месяца 1 день 13 часов 52 минуты; написано за 1 минуту 46 секунд)
Post subject:
|
|
Добрый день. Есть хороший учебник по JavaScript: Дэвид Флэнаган "JavaScript. Подробное руководство. 5-е издание". "...Цикл for/in на самом деле не перебирает все свойства всех объектов. Так же как некоторые свойства объектов помечаются как доступные только для чтения или постоянные (не удаляемые), свойства могут помечаться как неперечислимые. Такие свойства не перечисляются циклом for/in. Если все свойства, определен ные пользователем, перечисляются, то многие встроенные свойства, включая все встроенные методы, не перечисляются."
|
|
Back to top |
|
 |
WingedFox
Профессионал

Joined: 29 Apr 2003
Posts: 4064
Карма: 269 поощрить/наказать
Location: Питер
|
Posted: Tue Jul 19, 2011 10:42 am (спустя 37 минут; написано за 33 секунды)
Post subject:
|
|
armix
Если весь учебник подобен приведённой цитате - выкиньте его.
|
|
Back to top |
|
 |
armix
Заглянувший
Joined: 23 May 2011
Posts: 12
Карма: 1 поощрить/наказать
|
Posted: Tue Jul 19, 2011 4:54 pm (спустя 6 часов 12 минут; написано за 42 секунды)
Post subject:
|
|
С удовольствием. Предложите лучше.
|
|
Back to top |
|
 |
Александр Михалицын
Модератор
Joined: 23 May 2008
Posts: 1299
Карма: 83 поощрить/наказать
|
Posted: Tue Jul 19, 2011 7:57 pm (спустя 3 часа 2 минуты; написано за 1 минуту 28 секунд)
Post subject:
|
|
WingedFox, [+] armix - стандарт ECMA-262-3 (когда вам требуются действительно глубокие представления о том, как же работает так или иная конструкция языка).
|
|
Back to top |
|
 |
armix
Заглянувший
Joined: 23 May 2011
Posts: 12
Карма: 1 поощрить/наказать
|
Posted: Wed Jul 20, 2011 2:45 pm (спустя 18 часов 48 минут; написано за 2 минуты 35 секунд)
Post subject:
|
|
Спасибо. Но для скорости понимания можно и Флэнагана использовать. Для каждого уровня задания вопроса - свой инструмент. У меня на всякий случай ещё и букварь по квантовой механике лежит. (С электроникой-таки дело имеем!).
|
|
Back to top |
|
 |
Александр Михалицын
Модератор
Joined: 23 May 2008
Posts: 1299
Карма: 83 поощрить/наказать
|
Posted: Wed Jul 20, 2011 3:56 pm (спустя 1 час 11 минут; написано за 32 секунды)
Post subject:
|
|
armix, Quote: |
Для каждого уровня задания вопроса - свой инструмент. | Именно.
Last edited by Александр Михалицын on Thu Jul 21, 2011 12:55 pm; edited 1 time in total
|
|
Back to top |
|
 |
WingedFox
Профессионал

Joined: 29 Apr 2003
Posts: 4064
Карма: 269 поощрить/наказать
Location: Питер
|
Posted: Thu Jul 21, 2011 12:13 am (спустя 8 часов 16 минут; написано за 59 секунд)
Post subject:
|
|
armix wrote: |
Но для скорости понимания можно и Флэнагана использовать. | Приведённая цитата как раз и показывает, что нельзя. Много разных букв, но смысла их сочетание не имеет.
|
|
Back to top |
|
 |
|