Принцип механизма цикла в javascript for in или jquery each?

Привет!

У меня в яваскрипте есть объект, каждое свойство которого число, значение такого свойства объект. Когда я добавляю новое свойство, а после перебираю все свойства, то они идут в порядке увелечения числа (которое является ключом свойства) — так устроен js. Мой вопрос связан вот с чем:

если я начинаю перебор (через for in или jquery.each) и в это время срабатывает событие которое добавляет новое свойство, которое (из-за самого большого ключа) должно быть последним в списке правил, то попадет ли оно в перебор с учетом того что курсор цикла еще не дошел до него? Другими словами создает ли яваскрипт копию оригинального объекта при переборе его свойств или нет?
  • Вопрос задан
  • 4629 просмотров
Пригласить эксперта
Ответы на вопрос 3
@rozhik
и в это время срабатывает событие javascript однопоточный, по этому в «это время» ничего не может произойти снаружи (то-есть только внутри цикла).
Ответ написан
akral
@akral
перебираю все свойства, то они идут в порядке увелечения числа (которое является ключом свойства) — так устроен js.


ECMA-262, 12.6.4:
The mechanics of enumerating the properties… is implementation dependent.


Особенности V8:
V8 gives no guarantees on the enumeration order for array indices (i.e., a property
name that can be parsed as a 32-bit unsigned integer).
Ответ написан
spmbt
@spmbt
>… так устроен js.
В половине браузеров он не так устроен. Firefox, Safari — ключи-числа идут в порядке объявления. В старой Опере что-то вообще необычное. Зато нечисловые ключи у всех идут в порядке объявления, хотя это, как написано, не гарантируется. Просто не пользуйтесь в объектах числовыми ключами, чтобы не попадать на эти грабли.

> Не попадёт.
… А вот в коллекциях DOM-элементов список живой. Так что всё от реализации зависит.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы