2015-12-24 2 views
-1

Im любопытное новое для JS, и я пытаюсь понять, как для/в цикл действительно работает, вот некоторые примеры кода:Понимание для в цикле (JavaScript)

phoneBook = {}; 
phoneBook.bill = { name : "bill", lastName "hayder" }; 
phoneBook.steve = { name : "steve", lastName "garcia" }; 

for (obj in phoneBook) 
{ 
    console.log(obj); 
}; 

Когда я запускаю этот код я получаю счет и steve в качестве вывода, мой вопрос в том, что это то, что итератор держит, почему мне разрешено делать phoneBook [obj] и работать с этим? Если я набираю вручную phoneBook [bill], я получаю сообщение об ошибке, я могу только phoneBook.bill или phoneBook ["bill"].

Спасибо за помощь.

+1

Поскольку 'bill' как идентификатор не определен. Синтаксис JS допускает только 'objectName [" свойство "]' или 'objectName.property'. Если 'bill' была переменной строки, это сработало бы. Так обстоит дело с 'obj' - это строка. – Xufox

+0

Для получения дополнительной информации вы можете проверить, как работает работа с объектами в js https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects – Tanmay

+0

Ссылка: [Property Accessors] (https: // разработчик .mozilla.org/EN-US/Docs/Web/JavaScript/Справочник/Операторы/Property_Accessors) –

ответ

0

Когда вы пишете phonebook[something] это означает, что something должен быть expre ssion, который возвращает строку, и он должен найти свойство, имя которого является этой строкой.

В случае phonebook[obj], значение переменной obj будет строка "bill" или "steve", и он будет искать соответствующее свойство.

Если вы пишете phonebook[bill], он пытается использовать bill в качестве имени переменной и ожидает, что он содержит строку, которая называет свойство. Но нет переменной с именем bill, поэтому это приводит к ошибке.

0

Объекты Javascript - это просто пары ключ-значение.

phoneBook = {}; 
phoneBook.bill = { name : "bill", lastName: "hayder" }; 
phoneBook.steve = { name : "steve", lastName: "garcia" }; 

В этом примере phoneBook объект имеет два свойства ключ-значение, bill и steve. Но сами свойства - это объекты, каждый из которых содержит свойства name и lastName.

Доступ к парам ключ-значение осуществляется двумя способами: способом объекта и способом словаря. Объектный способ означает доступ через phoneBook.bill, а словарь - доступ через phoneBook['bill']. Обратите внимание: использование словаря означает просто передачу имени свойства объекту.

В настоящее время phoneBook[bill] недействителен, поскольку JS считает, что законопроект является переменной и пытается найти это. Вот почему вы должны использовать phoneBook['bill'] или phoneBook["bill"]. Вы можете использовать эту форму словаря, но я предлагаю вам использовать метод phoneBook.bill.

Надеюсь, я ответил на ваш вопрос. :)

0

некоторые синтаксические ошибки фиксированной

phoneBook = {}; 
phoneBook.bill = { name: "bill", lastName: "hayder" }; 
phoneBook.steve = { name: "steve", lastName: "garcia" }; 

for (obj in phoneBook) 
{ 
    console.log(obj); 
}; 

Javascript основы

PHONEBOOK имеет свойство счет

В JavaScript этот законопроект свойство можно ссылаться с помощью

  • phoneBook.bill
  • phoneBook['bill']

при ссылке PHONEBOOK [счет] вы получите сообщение об ошибке, потому что браузер ищет переменную, которая содержит строкусчет

, что вы можете сделать, это попробовать эту способ

var bill = 'bill'; 
phoneBook[bill] 
Смежные вопросы