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. Объекты и объектно-ориентированное программирование
   170   171   172   173   174   175   176   177   178   179   180