javascript下对结构体数组元素的操作问题
本帖最后由 boygrass 于 2013-01-07 23:54:56 编辑
有两种结数组的操作,结果不一样,求解释:
第一种情况:
假设一个结构体数组
shapes = new Array();
结构体这样定义。
var shape = function( wh, radius, style, angle ) {
this.radius = radius;
this.style = style;
this.angle = angle;
this.wh = wh;
}
数组初始化完成后,对数组做如下操作后
var tempShape = shapes[i];
tempShape.angle += 3;
虽然改的是tempShape,但shapes[i]中的数据也是会被改掉的。
第二种情况
var testNum = [6,7,8,9];
var testAnum = testNum[0];
testAnum += 10;
testNum[0];就不会因testNum的修改而更改。
以上两种情况,为什么会不一样。
------解决方案--------------------第一个是将对象本身赋给了变量 所以变量改的实际上就是那个对象
第二个只是将数组元素的值赋给了变量 所以修改的只是副本 所以数组元素本身没变化
------解决方案--------------------
js 有二大类变量值
Primitive 你的第二个数组。 传递这变量,是变量的数值。 传递时候,系统复制全新的一份,之后的修改,和原先的无关
Reference 你的第一个数组, 传递是哪个对象的内存地址,任何的修改,都是反映原先的对象。
http://www.java2s.com/Tutorial/JavaScript/0100__Number-Data-Type/PrimitiveandReferenceValues.htm
------解决方案--------------------楼主 先了解:
引用类型 和 值类型
------解决方案--------------------第一种是改变引用类型([],{})的变量,所以两个变量的值都会变。
第二种是值类型的变量,所以改的哪个就变哪个。