AS3 SharedObject 幽灵般的数组纠缠

AS3 SharedObject spooky array entanglement

var so:SharedObject = SharedObject.getLocal("example");
var arr:Array=[1,2,3];
so.data.arr = arr;
so.flush();
trace(so.data.arr); // outputs 1,2,3
arr[2]=5;
trace(so.data.arr); // outputs 1,2,5

如您所见,我只更新了 arr,但 so.data.arr 也更新了。

so.data.arr 不更新,如果不是 arr[2]=5;我写 arr=[1,2,5];

似乎 arrso.data.arr 以某种方式链接,但前提是我更新了 arr 中的元素,而不是以不同的方式设置整个 arr。

这是我无意中发现的。为什么会这样?

我能算每次都这样用吗?谢谢

基本上来说,数组是按引用传递的,而不是按值传递的。这意味着如果您将一个数组变量分配给另一个数组变量,您并没有创建一个新数组。

so.data.arr = arr;

表示so.data.arrarr都指向同一个数组对象。这就是为什么对任何一个的修改都会被另一个反映出来的原因。他们指着同一件事。但是

arr=[1,2,5];

将使 arr 指向其他数组对象,请记住 [1,2,5]new Array(1,2,5).

的简写版本

这就是为什么在该行之后它们不再 "linked"。