在这个简单的脚本中,我尝试更改a.person
中包含的字符串的值。为什么不更新object.property
的值?
function searchObject(object, value) {
object = value;
}
var a = {
person: "Ian"
};
searchObject(a.person, "James");
document.write(a.person);
我认为输出应该是“詹姆斯”,而不是“伊恩”。为什么不更新我的对象?
答案 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
的实际值