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

时间:2013-12-30 14:54:41

标签: 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);

3 个答案:

答案 0 :(得分:5)

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

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

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

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

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

答案 1 :(得分:0)

只需将这些字符串更改为对象中的数字:

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

答案 2 :(得分:0)

编辑您的对象,如下所示,不要在对象上使用数字引号

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