AS3 SharedObject怪异的数组纠缠


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;[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)的简写版本。

最新更新