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

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

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

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. Переопределим его, добавив новые вычисления.

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

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

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

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

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

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