如何动态更新我的对象?

Dra*_*zah 2 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);
Run Code Online (Sandbox Code Playgroud)

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

Joe*_*e50 6

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

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

var a = {
  person: "Ian"
};

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

document.write(a.person);
Run Code Online (Sandbox Code Playgroud)

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

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