Цикл «for…in» javascript

D
На сайте с 28.06.2008
Offline
996
85
Можете помочь понять JS (начал учить) ?
Немного туго понимать некоторые моменты после пхп, итак простой код
    let menu = {
        width: 200,
        height: 300,
        title: "My menu"
    };
    function multiplyNumeric(menu){
        for (let key in menu){
            if (typeof menu[key] === "number"){
                menu[key] *= 2;
            }
        }
    }
    multiplyNumeric(menu);
   console.log(menu)
В моем понимании внутри цикла - menu[key] это просто значения объекта 200,300 и т.д.

Мне не понятно как функция поняла что нужно изменить именно ключ width?

Я понимаю, что я там проверку типа сделал, но где явное указание, что изменить width?

Пока в моем понимании внутри цикла работает так:

200*2;

300*2;

Я то ожидал что нужно писать некое приравнивание, типа
key =  menu[key] *2;
ArbNet
На сайте с 27.10.2019
Offline
75
#1

В цикле перебираются свойства объекта menu

Тип typeof menu['width'] === "number"

Тип typeof menu['height'] === "number"

следовательно

width будет 200*2 и  height будет 300*2

Блажен, кто не стремится сделать лучше: он не рискует быть не понятым.
D
На сайте с 28.06.2008
Offline
996
#2
...................................
D
На сайте с 28.06.2008
Offline
996
#3
Т.е. любое изменение свойства объекта в цикле == изменение его в родительском объекте? И совсем не нужно прямо указывать что типа поменяй значение в таком то свойстве?
S3
На сайте с 29.03.2012
Offline
235
#4
Dram #:
И совсем не нужно прямо указывать что типа поменяй значение в таком то свойстве?

Так там прямо и указывается по какому ключу что присваивать

S3
На сайте с 29.03.2012
Offline
235
#5
Dram :
if (typeof menu[key] === "number")

Это конечно жесть - неужели в JS это не делается по-человечески? )))

flacon2000
На сайте с 08.08.2013
Offline
96
#6
Dram #:
Т.е. любое изменение свойства объекта в цикле == изменение его в родительском объекте? И совсем не нужно прямо указывать что типа поменяй значение в таком то свойстве?

Попробуйте так, возможно станет понятней: 

    let menu = {
        width: 200,
        height: 300,
        title: "My menu"
    };
    function multiplyNumeric(menu){
        for (let key in menu){
            console.log(key);
            if (typeof menu[key] === "number"){
                menu[key] *= 2;
            }
        }
    }
    multiplyNumeric(menu);
   console.log(menu)


⭐ ⭐ ⭐
Jon Personality
На сайте с 01.06.2009
Offline
84
#7
Dram :
Я то ожидал что нужно писать некое приравнивание, типа
key =  menu[key] *2;

key в данном случае это имя свойста, в php похожее:

foreach ($arr as $key => $value) {
    echo "{$key} => {$value} ";
}


Какие ваши доказательства
tommy-gung
На сайте с 22.11.2006
Offline
268
#8
let menu = {
        width: 200,
        height: 300,
        title: "My menu"
    };
    function multiplyNumeric(obj) {
        var newObj = {};
        for (let key in obj) {
            newObj[key] = (typeof obj[key] == "number") ? obj[key] * 2 : obj[key];
        }
        return newObj;
    }
    var newMenu = multiplyNumeric(menu);
    console.log(newMenu);
так что ли?


Здесь не могла быть ваша реклама
tommy-gung
На сайте с 22.11.2006
Offline
268
#9
Sly32 #:

Это конечно жесть - неужели в JS это не делается по-человечески? )))

какой же ты дурачок..


Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий