2015-02-21 5 views
1

В JavaScript, когда мы используем цикл for...in или метод Object.keys(), как внутренний движок итерации по клавишам объекта?Внутренне как JavaScript перебирает ключи объекта?

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

Спасибо!

+0

Что вы подразумеваете под «как»? Вы спрашиваете о заказе? Я бы подумал, что «как» будет полностью зависимой от реализации и не очень полезной информацией в программе JS. –

+0

Я не имею в виду порядок, я имею в виду, как это делается. И полезно ли это знать или нет, это личное мнение: давайте придерживаться этого вопроса. – Pensierinmusica

+0

Вы имеете в виду реализацию каждого браузера и как они будут интерпретировать код javascript или вы хотите что-то вроде спецификации ECMA? Что-то вроде этого? http://people.mozilla.org/~jorendorff/es6-draft.html#sec-array.prototype.foreach – DuKes0mE

ответ

1

Это меньше о том, как object.keys работает и больше о том, как представлены свойства объекта. В V8 существуют свойства объекта (такое же представление, как поля C struct или поля объектов Java), фиксированные свойства вне объекта, хранящиеся в фиксированном массиве, и динамические свойства вне объекта, хранящиеся в хеш-таблице.

Макет свойств объекта и фиксированных свойств вне объекта хранится отдельно в скрытом классе объекта. Если изменяется макет объекта, он получает новый скрытый класс. Подобно Java's Class object, скрытый объект класса содержит имена фиксированных свойств, и вы просто перебираете этот массив.

При использовании представления хеш-таблицы (aka dictionary, hashmap или normalized object) вы должны динамически перебирать ключи хеш-таблицы так же, как вы перебираете любую хеш-таблицу.

Смежные вопросы