ECMAScript Language Specification Edition 3 (ECMA-262-3):
- 4.3.3 Object
An object is a member of the type Object. It is an unordered collection of properties each of which contains a primitive value, object, or function. - 12.6.4 The for-in Statement
The mechanics of enumerating the properties (get the name of the next property ... that doesn't have the DontEnum attribute) is implementation dependent.
- 8.6 The Object Type
An Object is a collection of properties. - 12.6.4 The for-in Statement
The mechanics and order of enumerating the properties (let P be the name of the next property of obj whose [[Enumerable]] attribute is true) is not specified. - 15.2.3.14 Object.keys ( O )
If an implementation defines a specific order of enumeration for the for-in statement, that same enumeration order must be used in step 5 of this algorithm.
Как видим, порядок перечисления свойств объекта не указан. Теоретически он может быть случайным даже при повторном перечислении свойств одного и того же объекта, однако на практике каждый проверенный интерпретатор JavaScript использует свой определённый порядок: jsfiddle
- Chrome 21, Chrome 33, Firefox 27, Opera 12: первыми перечисляются свойства с именем в виде целого числа (a property name that can be parsed as a 32-bit unsigned integer), отсортированные по возрастанию, затем все остальные в порядке инициализации в коде (см. баг в V8); удаление и последующее добавление свойства изменяет его порядок следования
- Firefox 27: порядок совпадает с Chrome
- Firefox 14: в порядке инициализации в коде
- IE9, IE10: сначала свойства с целочисленными именами, затем остальные в порядке упоминания в коде; удаление и последующее добавление свойства НЕ изменяет его порядок следования
- Konqueror 4.10.2: в порядке инициализации в коде
Комментариев нет:
Отправить комментарий