使用`for in`循环用函数改变对象属性

moo*_*law 1 javascript object for-in-loop

我正在尝试创建一个遍历对象属性的函数,如果该值是一个数字,则将值乘以2.

我确定它var value是一个整数但它不应用乘法?我在这个代码中哪里出错了?

var menu = {
width: "200",  
height: "300",
title: "My menu"
};

function multiplyNumeric(menu) {

 for(var key in menu) {
    var value = menu[key];
    if( typeof value === 'number' ) {
        value = value * 2;

    }
 }

}

multiplyNumeric(menu);

alert(menu.width);
Run Code Online (Sandbox Code Playgroud)

mea*_*gar 5

数字(以及字符串和布尔值)按值传递.您正在将值复制为要修改它的新变量.

您需要直接修改对象的属性:

for (var key in menu) {
  if (typeof menu[key] === 'number') {
    menu[key] *= 2;
  }
}
Run Code Online (Sandbox Code Playgroud)

此外,"number"如果您要求,JavaScript将不会返回typeof("200"); 它会回来"string".你需要一个数字文字,而不是一个字符串:

var menu = {
  width: 200,  
  height: 300,
  title: "My menu"
};
Run Code Online (Sandbox Code Playgroud)