JavaScript对象引用与赋值实例详解
本文实例讲述了JavaScript对象引用与赋值。分享给大家供大家参考,具体如下:
//例子一:引用 varmyArrayRef=newArray(0,1,2);//创建数组对象 varmySeconArrayRef=myArrayRef;//对象复制. myArrayRef[0]=100;//修改元素值 alert(mySeconArrayRef[0]); /** *输出100;学过其它语言的都应该知道这里应该输出的是0为什么输出的是100呢? *上面程序通过把myArrayRef对象复制给了mySeconArrayRef这时就存在了2个独立的但最初值是相同的对象 *因为是独立的为什么修改myArrayRef会对别一个对象有影响呢?大家都知道只有当他们引用的是同一个对象时这时修改一个才会 *对别一个产生影响.但是在javascript语言中创建的对象myArrayRef值中其时保存的是对象的引用(也就是一个地址). *也就是我用newArray生成的保存在内存中而newArray把它所在的地方告诉了myArrayRef,myArrayRef又把这地址告诉了mySeconArrayRef *他们两个都指向的是newArray生成对象的地址而不是把对象保存在myArrayRef中,所以通过其中的一个去修改值时其时是修改他们同指象的那对象. */ alert(mySeconArrayRef[0]); //例子二:赋值 varmyVa='ABC';//把ABC的值赋予了myVa varmyVb=myVa;//myVa赋值给myVb myVa='DEF';//修改myVa /** *输出的是:ABC.因为是把值保存在了变量了而不是保存的是引用地址,所以他们两个是相对独立的整体. */ alert(myVb);
如果真要复制对象互不影响,则要通过转换赋值或者遍历key:value来复制你中的方法和属性。
注意:对象的子对象也是引用,所以遍历赋值的时候要判断,子元素是否是对象,如果子元素是对象,则继续对子元素进行遍历赋值。
转换赋值方式:
vardata={a:1,b:2,c:3,d:[0,1,2,3]}; varstr=JSON.stringify(data); vardata1=$.parseJSON(str);//$为jQuery对象需要引入jQuery包 data1["e"]=4; data1["d"][0]=11; console.log(data); console.log(data1);
输出结果:
{a:1,b:2,c:3,d:[0,1,2,3]} {a:1,b:2,c:3,d:[11,1,2,3],e:4}
相互没有影响
当对象引用做为函数参数传递时候,依然会相互影响,切记,如下示例:
vardata={a:1,b:2,c:3,d:{q:4,w:5,e:6}}; vardata1=data; functioncon(data2){ data2["r"]=5; console.log(JSON.stringify(data2)); } con(data1); console.log(JSON.stringify(data));
输出结果:
{"a":1,"b":2,"c":3,"d":{"q":4,"w":5,"e":6},"r":5} {"a":1,"b":2,"c":3,"d":{"q":4,"w":5,"e":6},"r":5}
对象引用赋值后,如果将对象置空,相互间是不受影响的,如下:
vararr={"a":"1","b":"2"}; vararr1=arr; arr={}; arr["a"]=2; console.log(arr1); console.log(arr);
输出结果:
{"a":"1","b":"2"},{"a":2}
更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《javascript面向对象入门教程》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》
希望本文所述对大家JavaScript程序设计有所帮助。