sorry_i_noob
@sorry_i_noob

Почему обращение к полю объекта через точку выводит undefined, а через квадратные скобки правильное значение?

Здравствуйте. Есть вот такой код:

function foo(obj, field) {
	console.log(obj[1][field]);
	console.log(obj[1].field);
}

var goals = [
  {
	GoalID: 1
  }, 
  {
	GoalID: 2
  }, 
  {
	GoalID: 1
  },
  {
	GoalID: 3
  }
];

foo(goals, 'GoalID');

В выводе сначала получается 2. Потом undefined. Почему undefined? Разве не должно быть тоже 2?
  • Вопрос задан
  • 1526 просмотров
Пригласить эксперта
Ответы на вопрос 2
bootd
@bootd
Гугли и ты откроешь врата знаний!
Потому что переменная field - это динамическая переменная. Чтобы динамически обращаться к свойствам объекта, нужно использовать obj[1][field]
иначе вы у объекта obj[1] ищите свойство field, которого не существует у вашего объекта.
Ответ написан
Комментировать
coderisimo
@coderisimo Куратор тега JavaScript
Доступ к свойству через переменную
Квадратные скобки позволяют обратиться к свойству, имя которого хранится в переменной:

var person = {};
person.age = 25;
var key = 'age';

alert( person[key] ); // выведет person['age']
Вообще, если имя свойства хранится в переменной (var key = "age"), то единственный способ к нему обратиться – это квадратные скобки person[key].

Доступ через точку используется, если мы на этапе написания программы уже знаем название свойства. А если оно будет определено по ходу выполнения, то единственный выбор – квадратные скобки.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
22 нояб. 2024, в 06:06
1500 руб./в час
22 нояб. 2024, в 06:04
1 руб./за проект
22 нояб. 2024, в 03:54
1500 руб./за проект