Является ли приемлемым стиль для библиотек Node.js, чтобы полагаться на порядок объектов?
Перечисление ключей объектов javascript повторяет ключи в порядке вставки:
> for (key in {'z':1,'a':1,'b'}) { console.log(key); }
z
a
b
Это не является частью стандарта, но широко используется (как обсуждалось здесь):
ECMA-262 не определяет порядок перечисления. Стандарт де-факто должен соответствовать порядок вставки, который также выполняет V8, но за одним исключением:
V8 не дает гарантий по порядку перечисления для индексов массива (т.е. свойство имя, которое может быть проанализировано как 32-разрядное целое без знака).
Является ли приемлемой практикой полагаться на это поведение при построении библиотек Node.js?
Ответы
Ответ 1
Абсолютно не! Это не вопрос стиля, а вопрос правильности.
Если вы зависите от этого стандарта de facto, ваш код может выйти из строя на ECMA-262 5th Ed. совместимый интерпретатор, потому что эта спецификация не определяет порядок перечисления. Более того, двигатель V8 может изменить свое поведение в будущем, скажем, в интересах производительности, например.
Ответ 2
Определенно не полагайтесь на порядок ключей. Если в стандарте не указывается порядок, то реализации могут свободно делать, как им заблагорассудится. Хэш-таблицы часто лежат в основе таких объектов, и вы не можете узнать, когда их можно использовать. Javascript имеет множество реализаций, и все они конкурируют за то, чтобы быть самым быстрым. Порядок клавиш будет отличаться от реализаций, если не сейчас, то в будущем.
Ответ 3
Нет. Положитесь на стандарт ECMAScript, или вам придется спорить с разработчиками о том, существует ли "стандарт де-факто", как люди на этой ошибке.