Свойства в квадратных скобках
Есть и другой способ прочитать свойство: квадратные скобки с ключом в кавычках.
const stock = {
apples: 12,
lemons: 0,
peaches: 30
};
console.log(stock["peaches"]);30stock["peaches"] означает то же, что и stock.peaches, просто записано длиннее. Зачем же он нужен? Затем, что внутри скобок можно написать любое значение, в том числе переменную. Тогда вам не нужно знать ключ в момент написания программы:
const stock = { apples: 12, lemons: 0, peaches: 30 };
const fruit = "apples";
console.log(stock[fruit]);12Сначала JavaScript заглядывает в переменную fruit, находит в ней текст "apples" и только потом читает свойство apples. Больше всего это полезно в функциях, где ключ приходит как аргумент:
const stock = { apples: 12, lemons: 0, peaches: 30 };
function isInStock(fruit) {
return stock[fruit] > 0;
}
console.log(isInStock("apples"));
console.log(isInStock("lemons"));true
falseКаждый вызов читает другое свойство, и функция работает для любого фрукта, даже для того, который вы добавите в объект позже.
Типичные ошибки:
stock.fruitне заглядывает в переменнуюfruit. Оно ищет свойство с ключомfruit, не находит его, и вы получаетеundefined. То же самое сstock["fruit"]: в кавычках"fruit"— это просто текст, а не переменная.stock[apples]без кавычек ищет переменнуюapples, которой нет:ReferenceError: apples is not defined.
Итак: если вы знаете ключ, когда пишете код, используйте точку. Если ключ лежит в переменной, используйте квадратные скобки без кавычек. Квадратные скобки подходят и для изменения значений: stock[fruit] = 5;.
Задание
- 1
Функция
printStockдолжна выводить, сколько штук данного фрукта есть на складе, но она выводитundefined. Исправьте её, чтобы первые две строки былиapples: 12иpeaches: 30. - 2
Допишите функцию
sell: она должна уменьшать запас данного фрукта на 1. Программа продаёт два персика и одно яблоко, поэтому последние две строки должны бытьpeaches: 28иapples: 11.