日期:2014-05-16  浏览次数:20362 次

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的修改而更改。

以上两种情况,为什么会不一样。

------解决方案--------------------
第一个是将对象本身赋给了变量 所以变量改的实际上就是那个对象
第二个只是将数组元素的值赋给了变量  所以修改的只是副本  所以数组元素本身没变化 
------解决方案--------------------
引用:
本帖最后由 boygrass 于 2013-01-07 23:54:56 编辑
            有两种结数组的操作,结果不一样

js 有二大类变量值
Primitive 你的第二个数组。 传递这变量,是变量的数值。 传递时候,系统复制全新的一份,之后的修改,和原先的无关
Reference 你的第一个数组, 传递是哪个对象的内存地址,任何的修改,都是反映原先的对象。


http://www.java2s.com/Tutorial/JavaScript/0100__Number-Data-Type/PrimitiveandReferenceValues.htm

------解决方案--------------------
楼主 先了解:
引用类型 和 值类型
------解决方案--------------------
第一种是改变引用类型([],{})的变量,所以两个变量的值都会变。
第二种是值类型的变量,所以改的哪个就变哪个。