时间:2021-05-26
本文实例讲述了JavaScript对象引用与赋值。分享给大家供大家参考,具体如下:
<script type="text/javascript">//例子一: 引用var myArrayRef = new Array(0,1,2); //创建数组对象var mySeconArrayRef = myArrayRef; // 对象复制.myArrayRef[0] = 100; // 修改元素值alert(mySeconArrayRef[0]);/*** 输出 100; 学过其它语言的都应该知道这里应该输出的是0 为什么输出的是100呢?* 上面程序通过把myArrayRef对象复制给了mySeconArrayRef这时就存在了2个独立的 但最初值是相同的对象* 因为是独立的为什么修改myArrayRef会对别一个对象有影响呢?大家都知道只有当他们引用的是同一个对象时这时修改一个才会* 对别一个产生影响.但是在javascript语言中创建的对象myArrayRef值中其时保存的是对象的引用(也就是一个地址).* 也就是 我用 new Array生成的保存在内存中而new Array把它所在的地方告诉了myArrayRef,myArrayRef又把这地址告诉了mySeconArrayRef* 他们两个都指向的是new Array生成对象的地址而不是把对象保存在myArrayRef中,所以通过其中的一个去修改值时其时是修改他们同指象的那对象.*/alert(mySeconArrayRef[0] );//例子二: 赋值var myVa = 'ABC'; //把ABC的值 赋予了myVavar myVb = myVa; // myVa 赋值给 myVbmyVa = 'DEF'; //修改myVa/*** 输出的是:ABC. 因为是把值保存在了变量了 而不是保存的是引用地址,所以他们两个是相对独立的整体.*/alert(myVb);</script>如果真要复制对象互不影响,则要通过转换赋值或者遍历key:value来复制你中的方法和属性。
注意:对象的子对象也是引用,所以遍历赋值的时候要判断,子元素是否是对象,如果子元素是对象,则继续对子元素进行遍历赋值。
转换赋值方式:
var data = {a:1,b:2,c:3,d:[0,1,2,3]};var str = JSON.stringify(data);var data1 = $.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}相互没有影响
当对象引用做为函数参数传递时候,依然会相互影响,切记,如下示例:
var data = {a:1,b:2,c:3,d:{q:4,w:5,e:6}};var data1 = data;function con(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}对象引用赋值后,如果将对象置空,相互间是不受影响的,如下:
var arr = {"a":"1","b":"2"};var arr1 = arr;arr = {};arr["a"] = 2;console.log(arr1);console.log(arr);输出结果:
{"a":"1","b":"2"},{"a":2}更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《javascript面向对象入门教程》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》
希望本文所述对大家JavaScript程序设计有所帮助。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
java对象拷贝详解及实例Java赋值是复制对象引用,如果我们想要得到一个对象的副本,使用赋值操作是无法达到目的的:@Testpublicvoidtestass
本文实例讲述了javascript引用赋值(地址传值)用法。分享给大家供大家参考。具体如下:javascript在默认情况下,数组、对象和函数是引用赋值,如下代
本文实例讲述了Python深拷贝与浅拷贝用法。分享给大家供大家参考,具体如下:1、对象的赋值对象的赋值实际上是对象之间的引用:当创建一个对象,然后将这个对象赋值
本文实例讲述了Python直接赋值、浅拷贝与深度拷贝。分享给大家供大家参考,具体如下:直接赋值:其实就是对象的引用(别名)。浅拷贝(copy):拷贝父对象,不会
在JavaScript中,可以通过值和引用传递。两者之间的主要区别是,按值传递发生在赋值基本类型的时候,而赋值对象时按引用传递。接下来,跟着智哥,来详细看看。1