【发布时间】:2016-08-20 07:06:05
【问题描述】:
假设我有一个对象:
var obj = {
len: 4,
bred: 5
}
现在假设我将这个对象分配给变量x 作为var x = obj;。据我了解,它会创建obj 的副本并将该副本分配给x — 即按值传递。现在,如果我更改 x 的属性,那么它也会更改 obj 对象的该属性。例如
x.len = 99
然后obj.len 和x.len 都变成99。另一方面考虑这种情况:
var r = 2, s = 3, t = 4;
s = r;
s = 88;
现在r 被按值传递给s,s 的一个副本r 被提供给s。所以将s 更改为88 不会改变r 变量的原始值。在控制台中输入r 仍然会给出2。
问题 1:如果变量(包括对象)在 JavaScript 中按值传递,那么为什么更改 x.len 也会更改原来的 obj.len?
另一个问题是我无法在分配给变量时更改对象的属性。考虑这种情况:
var obj2 = {
len: 4,
bred: 5
}
var x2;
x2 = obj.len;
现在在控制台中输入x2 只会返回4。但是,如果我尝试更改 x2 的值,例如 x2 = 77;,则不会更改 obj2.len。
问题2:为什么我不能用变量改变对象的属性?
【问题讨论】:
-
你在第一段中描述的不是价值段落,而是引用。
-
我相信只有对象是引用数据类型。
var xyz是原始数据类型。
标签: javascript html object pass-by-reference pass-by-value