Было бы разумно добавить упорядоченный тип данных хеша в JavaScript? - PullRequest
2 голосов
/ 15 декабря 2011

Я видел несколько вопросов о переполнении стека и в других местах, в которых спрашивалось, как реализовать упорядоченный хеш, упорядоченный объект или упорядоченный словарь в Javascript. Вот несколько примеров:

Для меня это выглядит как в соответствии с официальной спецификацией ECMAScript, порядок свойств в объекте "зависит от реализации", хотя большинство браузеров перебирают свойства в том порядке, в котором они были определены. Я могу представить, как некоторые программисты тестируют свои сценарии и видят, что все работает нормально, не подозревая, что в некоторых ситуациях они могут вести себя неожиданным образом, по крайней мере, в принципе.

У меня такой вопрос: Могут ли они изменить спецификацию, чтобы указать порядок свойств? Мне не кажется, что это будет слишком сложно, но я не знаю, смогу ли я я что-то упустил Это побудит создателей нескольких оставшихся браузеров сделать то же, что и все остальные, и добавить полезную функцию. Они в основном говорили бы, что интерпретаторы JavaScript должны делать то же самое, что и большинство интерпретаторов JavaScript. Я не могу представить, чтобы подобное изменение вызвало какие-либо проблемы с совместимостью.

Если это не было бы реалистичным вариантом, то почему бы и нет? У меня нет никаких непосредственных практических целей. Я пытаюсь удовлетворить свое любопытство относительно того, почему язык такой, какой он есть.

Ответы [ 2 ]

3 голосов
/ 15 декабря 2011

Указание порядка перечисления свойств объекта обсуждалось для ECMAScript 5, но было отброшено, поскольку было обнаружено, что не является де-факто стандартом для браузеров , насколько я могу понять.

Это, безусловно, разумное желание, особенно после появления JSON.

2 голосов
/ 15 декабря 2011

Хранение хеш-таблицы требует меньше памяти, чем хеш-таблица с сохраненным порядком 1 .Я полагаю, что это одна из причин, почему спецификация позволяет игнорировать порядок.

Основные браузеры сохраняют порядок записей, вероятно, чтобы не нарушать существующие скрипты, написанные неосведомленными разработчиками.Однако я могу представить реализацию EcmaScript с минимальным объемом памяти, которая жертвовала бы этой нестандартной функцией.


1 Например, в Java у вас есть выбор между HashMap и LinkedHashMap.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...