如何动态更新我的对象?

时间:2014-12-19 21:44:57

标签: javascript javascript-objects

在这个简单的脚本中,我尝试更改a.person中包含的字符串的值。为什么不更新object.property的值?

function searchObject(object, value) {

  object = value;

}

var a = {
  person: "Ian"
};

searchObject(a.person, "James");

document.write(a.person);

我认为输出应该是“詹姆斯”,而不是“伊恩”。为什么不更新我的对象?

3 个答案:

答案 0 :(得分:6)

您现在正在做的是使用值object替换局部变量value。你可以做的是做到这一点:



function searchObject(object, property, value) {
  object[property] = value;
}

var a = {
  person: "Ian"
};

searchObject(a, 'person', "James");

document.write(a.person);




然后你不会替换局部变量,而是替换对象的属性。该对象仍然引用相同的东西,并且在此代码中,您正在编辑该对象,而不是在本地替换它。

这是因为在JavaScript中,每个函数参数都是按值传递的,但是由于对象存储为指针而不是它们的值,这意味着如果你放置{,那么你只能给出对象的内存地址。函数参数中的{1}}。如果您再次访问该函数中的该变量,它将是指向同一事物的指针。更改其中的属性也会改变实际对象中的属性。

答案 1 :(得分:4)

这是因为只有对象通过引用传递。其他一切都是通过价值传递的。如果你想要这个,你可以试试这个:



function searchObject(object, key, value) {
  object[key] = value;
}

var a = {
  person: "Ian"
};

searchObject(a, "person", "James");

document.write(a.person);




答案 2 :(得分:2)

您正在传递a.person作为对象,但a.person是字符串值。字符串在JavaScript中按值传递,而不是通过引用传递。这意味着您函数中的object实际上是字符串"Ian"的副本,而不是a.person的实际值