JavaScript对象引用与赋值实例详解


Posted in Javascript onMarch 15, 2017

本文实例讲述了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的值 赋予了myVa
var myVb = myVa; // myVa 赋值给 myVb
myVa = '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 类定义的4种方法
Sep 12 Javascript
手把手教你自己写一个js表单验证框架的方法
Sep 14 Javascript
iframe 异步加载技术及性能分析
Jul 19 Javascript
js实现身份证号码验证的简单实例
Feb 19 Javascript
jQuery插件jquery-barcode实现条码打印的方法
Nov 25 Javascript
微信小程序 省市区选择器实例详解(附源码下载)
Jan 05 Javascript
详解webpack和webpack-simple中如何引入css文件
Jun 28 Javascript
js实现登录与注册界面
Nov 01 Javascript
mint-ui 时间插件使用及获取选择值的方法
Feb 09 Javascript
Vue实现微信支付功能遇到的坑
Jun 05 Javascript
Vue 中 a标签上href无法跳转的解决方式
Nov 12 Javascript
vue项目proxyTable配置和部署服务器
Apr 14 Vue.js
jQuery图片瀑布流的简单实现代码
Mar 15 #Javascript
JavaScript关联数组用法分析【概念、定义、遍历】
Mar 15 #Javascript
jQuery animate()实现背景色渐变效果的处理方法【使用jQuery.color.js插件】
Mar 15 #Javascript
js中的触发事件对象event.srcElement与event.target详解
Mar 15 #Javascript
jQuery动态产生select option下拉列表
Mar 15 #Javascript
使用jQuery实现一个类似GridView的编辑,更新,取消和删除的功能
Mar 15 #Javascript
js中获取键盘按下键值event.keyCode、event.charCode和event.which的兼容性详解
Mar 15 #Javascript
You might like
PHP删除非空目录的函数代码小结
2013/02/28 PHP
解析使用ThinkPHP应该掌握的调试手段
2013/06/20 PHP
PHP实现的MongoDB数据库操作类分享
2014/05/12 PHP
PHP中数据库单例模式的实现代码分享
2014/08/21 PHP
Yii2学习笔记之汉化yii设置表单的描述(属性标签attributeLabels)
2017/02/07 PHP
PHP PDOStatement::rowCount讲解
2019/02/01 PHP
心扬JS分页函数代码
2010/09/10 Javascript
工作中常用到的JS表单验证代码(包括例子)
2010/11/11 Javascript
js 实现 input type=&quot;file&quot; 文件上传示例代码
2013/08/07 Javascript
javascript限制用户只能输汉字中文的方法
2014/11/20 Javascript
js实现鼠标经过时图片滚动停止的方法
2015/02/16 Javascript
JS动态修改表格cellPadding和cellSpacing的方法
2015/03/31 Javascript
基于javascript实现精确到毫秒的倒计时限时抢购
2016/04/17 Javascript
AngularJS控制器之间的数据共享及通信详解
2016/08/01 Javascript
图文详解JavaScript的原型对象及原型链
2016/08/02 Javascript
Angular.js中$apply()和$digest()的深入理解
2016/10/13 Javascript
使用smartupload组件实现jsp+jdbc上传下载文件实例解析
2017/01/05 Javascript
jQuery插件HighCharts实现的2D对数饼图效果示例【附demo源码下载】
2017/03/09 Javascript
微信小程序实现给循环列表添加点击样式实例
2017/04/26 Javascript
JavaScript原型继承_动力节点Java学院整理
2017/06/30 Javascript
微信小程序云开发(数据库)详解
2019/05/17 Javascript
[49:13]DOTA2上海特级锦标赛C组资格赛#1 OG VS LGD第一局
2016/02/27 DOTA
Python使用bs4获取58同城城市分类的方法
2015/07/08 Python
windows及linux环境下永久修改pip镜像源的方法
2016/11/28 Python
详解Golang 与python中的字符串反转
2017/07/21 Python
python列表插入append(), extend(), insert()用法详解
2019/09/14 Python
python实现七段数码管和倒计时效果
2019/11/23 Python
详解python 中in 的 用法
2019/12/12 Python
python实现MySQL指定表增量同步数据到clickhouse的脚本
2021/02/26 Python
阿里旅行:飞猪
2017/01/05 全球购物
意大利灯具购物网站:Lampade.it
2018/10/18 全球购物
Nordgreen英国官网:斯堪的纳维亚设计师手表
2018/10/24 全球购物
手术室护士自我鉴定
2013/10/14 职场文书
工作交流会欢迎词
2014/01/12 职场文书
2015年幼儿园保育员工作总结
2015/04/23 职场文书
讲座通知范文
2015/04/23 职场文书