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 相关文章推荐
10个基于jQuery或JavaScript的WYSIWYG 编辑器整理
May 06 Javascript
JavaScript 以对象为索引的关联数组
May 19 Javascript
JQuery对id中含有特殊字符的转义处理示例
Sep 06 Javascript
Javascript中设置默认参数值示例
Sep 11 Javascript
详谈jQuery中的this和$(this)
Nov 13 Javascript
javascript制作的简单注册模块表单验证
Apr 13 Javascript
Three.js学习之Lamber材质和Phong材质
Aug 04 Javascript
ES6新特性之数组、Math和扩展操作符用法示例
Apr 01 Javascript
JS实现动态给标签控件添加事件的方法示例
May 13 Javascript
javascript获取图片的top N主色值方法详解
Jan 26 Javascript
详解vue在项目中使用百度地图
Mar 26 Javascript
JavaScript嵌入百度地图API的最详细方法
Apr 16 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实现文件下载详解
2014/11/27 PHP
PHP面向对象程序设计(OOP)之方法重写(override)操作示例
2018/12/21 PHP
php中目录操作opendir()、readdir()及scandir()用法示例
2019/06/08 PHP
PHP 进程池与轮询调度算法实现多任务的示例代码
2019/11/26 PHP
yii2.0框架场景的简单使用示例
2020/01/25 PHP
javascript事件模型代码
2007/07/01 Javascript
Autocomplete Textbox Example javascript实现自动完成成功
2007/08/17 Javascript
ext jquery 简单比较
2010/04/07 Javascript
javascript组合使用构造函数模式和原型模式实例
2015/06/04 Javascript
javascript顺序加载图片的方法
2015/07/18 Javascript
jquery实现简单的二级导航下拉菜单效果
2015/09/07 Javascript
微信小程序 es6-promise.js封装请求与处理异步进程
2017/06/12 Javascript
vue-cli webpack模板项目搭建及打包时路径问题的解决方法
2018/02/26 Javascript
vue cli 3.0 使用全过程解析
2018/06/14 Javascript
Python中死锁的形成示例及死锁情况的防止
2016/06/14 Python
Python列出一个文件夹及其子目录的所有文件
2016/06/30 Python
Python将图片批量从png格式转换至WebP格式
2020/08/22 Python
Django卸载之后重新安装的方法
2017/03/15 Python
python+matplotlib绘制3D条形图实例代码
2018/01/17 Python
Python3的介绍、安装和命令行的认识(推荐)
2018/10/20 Python
Python lxml解析HTML并用xpath获取元素的方法
2019/01/02 Python
python二进制文件的转译详解
2019/07/03 Python
Django认证系统实现的web页面实现代码
2019/08/12 Python
Selenium 滚动页面至元素可见的方法
2020/03/18 Python
python 数据库查询返回list或tuple实例
2020/05/15 Python
GoPro摄像机美国官网:美国运动相机厂商
2018/07/03 全球购物
.NET面试10题
2014/02/24 面试题
掌上明珠Java程序员面试总结
2016/02/23 面试题
销售人员自我评价
2014/02/01 职场文书
工作睡觉检讨书
2014/02/25 职场文书
责任心演讲稿
2014/05/14 职场文书
工作态度不端正检讨书
2014/10/04 职场文书
基层组织建设年活动总结
2015/05/09 职场文书
初一语文教学反思
2016/03/03 职场文书
用JS实现飞机大战小游戏
2021/06/09 Javascript
MySQL系列之十三 MySQL的复制
2021/07/02 MySQL