Задача на объекты в JavaScript
Короче говоря, я новичок в JS и вот решал задачу. Смысл задачи: если значение объекта является числом (number), то его значение надо увеличить вдвое. Вот рабочий код:
let menu = {
width: 200,
height: 300,
title: "my menu"
};
function multiplyNumeric (obj) {
for (let key in obj) {
if (typeof obj[key] === "number") {
obj[key] *= 2;
}
}
}
multiplyNumeric(menu);
Возможно, мой вопрос глупый, но почему этот же код не работает через точечную нотацию? Я имею ввиду вот так:
let menu = {
width: 200,
height: 300,
title: "my menu"
};
function multiplyNumeric (obj) {
for (let key in obj) {
if (typeof obj.key === "number") {
obj.key *= 2;
}
}
}
multiplyNumeric(menu);
Ответы (2 шт):
Потому что у объекта нет свойства, которое называется key.
Название свойства, к которому Вы пытаетесь обратиться через точку obj.key, не имеет никакого отношения к локальной переменной key.
let menu = {
width: 200,
height: 300,
title: "my menu"
};
let key = 'title';
console.log(menu.width);
console.log(menu.key);
Существует и другой способ обратиться к элементу объекта - используя обращение не через квадратные скобки, а через точку: не obj['key'], а obj.key.
В этом случае, что мы обращаемся к свойству объекта.
При таком способе обращения на названия свойств (то есть ключей) накладываются ограничения: они не должны начинаться с цифры, не должны иметь символ дефиса или символ пробела внутри.
Если у вас есть такой ключ - используйте обращение через квадратные скобки.