Простой доступ к свойствам объекта в цикле for in JS - PullRequest
0 голосов
/ 02 октября 2019

Я изучаю ООП, и мне любопытно узнать, почему мой код не просматривает все экземпляры объекта и не выходит из свойства firstName - посмотрите мою демонстрацию ниже:

var people = {
          "person1" : {
              "firstName": "John"
              , "lastName": "Smith"
              , "age" : 25
              , "checkedin" : true
          },
          "person2" : {
              "firstName": "Nick"
              , "lastName": "Debruyne"
              , "age" : 24
              , "checkedin" : false
          }
        }
// console.log(people); // works correctly
for (let person in people) {
  // console.log(person); // works correctly
  console.log(person.firstName); // returns undefined
}

Codepen: https://codepen.io/ns91/pen/VwZoegw?editors=1111

Этот код должен просто проходить через каждый экземпляр объекта и регистрировать значения firstName каждого объекта (будучи 'John' и 'Ник'). Есть ли какая-то ошибка новичка, которую я здесь делаю?

Кроме того, почему в консоли отображается «undefined»? Я заметил, что это происходит для других вещей, которые я регистрирую в консоли, и даже в случае успеха, это все еще иногда происходит. Может ли кто-нибудь объяснить процесс того, что происходит в браузере, или почему он показывает undefined?

И это JSON или JS? Интересно, нужно ли преобразовывать его в JS, чтобы его можно было читать в JS для циклов?

Спасибо за любой совет.

Ответы [ 2 ]

3 голосов
/ 02 октября 2019

Ваша конструкция for ... in дает вашему циклу ключи для каждого объекта в people объекте, а не значения . Вам нужно изменить строку на console.log(people[person].firstName);.

. Причина, по которой вы видели undefined, заключается в том, что вы просили JavaScript предоставить вам свойство firstName ключа , котороебыла просто строка John или Nick, а не фактический объект person, и у которой не было такого свойства.

1 голос
/ 02 октября 2019

Это происходит потому, что цикл for(let x in foo) перебирает ключи объекта. Чтобы получить доступ к значению, вы должны использовать скобочный синтаксис, например foo[x]. Надеюсь, это поможет.

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