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?
  • Вопрос задан
  • 1408 просмотров
Пригласить эксперта
Ответы на вопрос 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].

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

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

Войти через центр авторизации
Похожие вопросы
03 мая 2024, в 22:18
1000 руб./за проект
03 мая 2024, в 21:57
1000 руб./за проект
03 мая 2024, в 21:47
500 руб./за проект