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入门学习资料收集整理篇
Jul 06 Javascript
JavaScript 异步调用框架 (Part 4 - 链式调用)
Aug 04 Javascript
了解jQuery技巧来提高你的代码
Jan 08 Javascript
用JS写的一个TableView控件代码
Jan 23 Javascript
jquery加载页面的方法(页面加载完成就执行)
Jun 21 Javascript
关于Jquery操作Cookie取值错误的解决方法
Aug 26 Javascript
jQuery实现的点赞随机数字显示动画效果(附在线演示与demo源码下载)
Dec 31 Javascript
Vue-cli proxyTable 解决开发环境的跨域问题详解
May 18 Javascript
Vue中计算属性computed的示例解读
Jul 26 Javascript
JavaScript实现的原生态Tab标签页功能【兼容IE6】
Sep 18 Javascript
vue2实现可复用的轮播图carousel组件详解
Nov 27 Javascript
QML实现圆环颜色选择器
Sep 25 Javascript
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截取汉字乱码问题解决方法mb_substr函数的应用
2008/03/30 PHP
php session_start()关于Cannot send session cache limiter - headers already sent错误解决方法
2009/11/27 PHP
分割GBK中文遭遇乱码的解决方法
2013/08/09 PHP
php 强制下载文件实现代码
2013/10/28 PHP
php实现zip文件解压操作
2015/11/03 PHP
什么是PHP文件?如何打开PHP文件?
2017/06/27 PHP
Jquery调用webService远程访问出错的解决方法
2010/05/21 Javascript
php 中序列化和json使用介绍
2013/07/08 Javascript
jquery简单实现幻灯片的方法
2015/08/03 Javascript
基于BootStrap Metronic开发框架经验小结【八】框架功能总体界面介绍
2016/05/12 Javascript
深入浅析JavaScript函数前面的加号和叹号
2016/07/09 Javascript
JavaScript 函数节流详解及方法总结
2017/02/09 Javascript
JavaScript 判断iPhone X Series机型的方法
2019/01/28 Javascript
node命令行工具之实现项目工程自动初始化的标准流程
2019/08/12 Javascript
vue vantUI实现文件(图片、文档、视频、音频)上传(多文件)
2019/10/15 Javascript
在Python中编写数据库模块的教程
2015/04/29 Python
Python读取图片属性信息的实现方法
2016/09/11 Python
如何用python整理附件
2018/05/13 Python
在python中利用最小二乘拟合二次抛物线函数的方法
2018/12/29 Python
Python元组知识点总结
2019/02/18 Python
在pytorch中为Module和Tensor指定GPU的例子
2019/08/19 Python
Python集合基本概念与相关操作实例分析
2019/10/30 Python
python3.8下载及安装步骤详解
2020/01/15 Python
python利用opencv实现SIFT特征提取与匹配
2020/03/05 Python
python实现读取类别频数数据画水平条形图案例
2020/04/24 Python
keras-siamese用自己的数据集实现详解
2020/06/10 Python
scrapy-redis分布式爬虫的搭建过程(理论篇)
2020/09/29 Python
Skyscanner加拿大:全球旅行搜索平台
2018/11/19 全球购物
雷曼兄弟的五金店:Lehman’s Hardware Store
2019/04/10 全球购物
Ticketmaster意大利:音乐会、节日、艺术和剧院的官方门票
2019/12/23 全球购物
德国BA保镖药房中文网:Bodyguard Apotheke
2021/03/09 全球购物
私有程序集与共享程序集有什么区别
2013/04/05 面试题
幼儿园小班植树节活动方案
2014/03/04 职场文书
2014教师年度思想工作总结
2014/11/10 职场文书
社会主义核心价值观主题教育活动总结
2015/05/07 职场文书
2016反腐倡廉警示教育心得体会
2016/01/13 职场文书