Page 175 - Браун Э. - Изучаем JavaScript. Руководство по созданию современных веб-сайтов - 2017
P. 175
ликвидировать этот эффект. Поэтому не стоит полагаться на результат эксперимента
и никогда не стоит подразумевать, что порядок свойств будет именно таков.
Будучи предупрежденными об этом, давайте теперь рассмотрим основные спосо
бы перебора свойств объекта.
Ци к п for . . in
.
.
Традиционным способом перебора свойств объекта является цикл for . . in. Рас
смотрим объект, у которого есть несколько строковых свойств и одно символьное
свойство.
const SYM SymЬol ( ) ;
const о = а : 1 , Ь : 2 , с : 3 , [ S YM] : 4 } ;
(
for l e t prop in о ) {
i f ( ! o . hasOwnPropert ( prop) ) continue ;
y
p
g
console . l o ( ' $ { p ro } : $ { o [ p rop] } ' ) ;
.
Все кажется довольно простым . . кроме, вероятно, вполне резонного вопро
са "Что делает hasOwnProperty?" Он ликвидирует опасность, связанную с циклом
for . . in, которая станет ясна далее в этой главе. Речь идет об унаследованных свой
.
ствах. В данном примере мы это могли бы опустить и не придать значения. Но, пере
бирая свойства объектов других типов (особенно объектов, производных от других),
вы можете обнаружить свойства, которых не ожидали. Поэтому я рекомендую вы
работать привычку использовать для проверки метод hasOwnProperty. Вы скоро уз
наете, почему это так важно, а также научитесь определять, когда его можно безбо
лезненно (или желательно) опустить.
Обратите внимание, что цикл for . . in не выводит значения свойств с символь
.
ными ключами.
.
Несмотря на то что с помощью цикла for . . i n можно выполнить
перебор элементов массива, обычно это считается плохой идеей. Для
массивов я рекомендую использовать обычный цикл for или forEach.
�---·--_J
Метод Ob e ct . keys
j
Метод Obj ect . keys позволяет получить все перечислимые строковые свойства
объекта в виде массива.
const SYM SymЬol ( ) ;
const о = а : 1 , Ь : 2 , с : 3 , [ S YM] : 4 } ;
p
Obj ect . keys ( o ) . f orEach ( p rop => console . l o ( ' $ {pro } : $ { o [ p rop] } ' ) ) ;
g
1 7 6 Глава 9. Объекты и объектно-ориентированное программирование

