- Теория
- Теория
Скобочная нотация
Заметили что-то необычное в примере работы со словарём?
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
Вы перешли на другую страницу
Кликните внутри мини-браузера, чтобы поставить фокус в это окно.