• Теория
  • Теория

Скобочная нотация

Заметили что-то необычное в примере работы со словарём?

let catsFavoriteFood = {
  'Кекс': 'рыба',
  'Рудольф': 'котлета',
  'Снежок': 'сметана'
};

let printFavoriteFood = function (name) {
  return 'Моя любимая еда — ' + catsFavoriteFood[name];
};

console.log(printFavoriteFood('Снежок'));
// Выведет: Моя любимая еда — сметана

Раньше мы обращались к свойствам объекта с помощью точки, а в этом примере работаем с объектом как с массивом — читаем свойство с помощью квадратных скобок: catsFavoriteFood[name]. Да, так тоже можно. Способ со скобками называется скобочной нотацией, способ с точкой — точечной нотацией. Программисты такие оригиналы, не правда ли?

Скобочная нотация намного гибче точечной. Например, вы можете прочитать из объекта свойство, название которого записано в переменную:

let name = 'Кекс';
let catsFavoriteFood = { 'Кекс': 'рыба' };

console.log(catsFavoriteFood.name); // Выведет: undefined

console.log(catsFavoriteFood[name]); // Выведет: рыба

Первое сообщение содержит undefined, потому что у объекта нет свойства name. Второе сообщение содержит искомое значение, потому что программа понимает, что в квадратных скобках переменная. Значение переменной подставится в скобки, а затем будет найдено нужное свойство объекта.

console.log(catsFavoriteFood[name]);
// Незаметно внутри программы превращается в:
console.log(catsFavoriteFood['Кекс']);

И ещё один сюрприз. В качестве ключей в объекте можно использовать любые строки, даже строки с пробелами. С точечной нотацией такие свойства прочитать не получится, а со скобочной — без проблем.

let cat = { 'favorite food': 'Сметана' };

// Вызовет ошибку
console.log(cat.favorite food);

// Отработает нормально
console.log(cat['favorite food']);

Кстати, почему мы вынесли словари из функции в самое начало программы? Значения, которые хранятся в этих объектах, не зависят от параметров функции или объекта компьютера. Это правила, относящиеся ко всей программе. Их можно использовать в других функциях и операциях, если это понадобится. Если бы словари находились в теле функции, они бы создавались только в момент вызова этой функции.

Почему это вообще работает? Объект внутри функции видит объекты, которые объявлены в самом начале программы. Так работают области видимости. Мы разберём эту особенность языка позже, в других тренажёрах.

Теперь, когда словари созданы, и мы научились с ними работать, можно посчитать цену компьютера одной строкой. Будем использовать метод getPrice. Переопределим его, добавив новые вычисления.

Хорошо владеете JavaScript, но до сих пор не освоили Node.js? Записывайтесь на профессиональный курс «Node.js. Профессиональная разработка REST API». Цена 12 000 ₽.

Минимальный вид табов
  • index.html
HTML
HTML

Вы перешли на другую страницу

Кликните внутри мини-браузера, чтобы поставить фокус в это окно.

100%
Бабушка Кекс

Притормози, дружище

Проходить вызовы части «Объекты» тренажёра «Базовые структуры данных» можно после регистрации и оформления подписки.