//例子一: 引用var myArrayRef = new Array(0,1,2); //创建数组对象var mySeconArrayRef = myArrayRef; // 对象复制.myArrayRef[0] = 100; // 修改元素值alert(my" />
当前位置:首页 > 日记 > 正文

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

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

本文实例讲述了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程序设计有所帮助。

相关文章

PHP语法小结之基础和变量

PHP语法小结之基础和变量

变量,语法,基础,电脑软件,PHP,最近有个H5项目的需求,需要服务端,考察过后决定用PHP实现一个HTTP服务端,于是开始重温PHP语法,顺便记录一下要点,以便随时重温。内容摘抄自w3school的PHP手册,并按照自己的理解重新进行了整理。PHP是什么?PHP 是 "PH…

ps简单快速绘制一个透明质感小图标

ps简单快速绘制一个透明质感小图标

小图标,绘制,透明,教程,质感,效果图:版权申明:本文原创作者&ldquo;QQ:652401493&rdquo;,感谢&ldquo;QQ:652401493&rdquo;的原创分享。版权归&ldquo;QQ:652401493&rdquo;所有!12 阅读全文教程结束,以上就是ps简单快速绘制一个透明质感小图标教程的…

PHP开发中解决并发问题的几种实现

PHP开发中解决并发问题的几种实现

方法,并发,几种,电脑软件,PHP,本文实例讲述了PHP开发中解决并发问题的几种实现方法。分享给大家供大家参考,具体如下:对于商品抢购等并发场景下,可能会出现超卖的现象,这时就需要解决并发所带来的这些问题了在PHP语言中并没有原生的提供并发的…

excel2013中怎么画柱状图

excel2013中怎么画柱状图

柱状图,方法,电脑软件,  excel常用于制图,提供多种图形,如折现图、饼状图、雷达图等等,下面小编就教你怎么在excel2013中画柱状图,希望看完本教程的朋友都能学会并运用起来。excel2013中画柱状图的方法打开要做柱状图的表格,点击鼠标左键全选,…

ps怎么绘制水彩晕染效果的图案?

ps怎么绘制水彩晕染效果的图案?

绘制,图案,效果,电脑软件,ps,ps中想要做一个漂亮的图案,该怎么制作呢?下面我们就来看看详细的教程。软件名称:Adobe Photoshop 8.0 中文完整绿色破解版软件大小:150.1MB更新时间:2015-11-041、首先打开Photoshop软件,并且熟悉一下PS里面的工具栏,…

excel扩展名是什么

excel扩展名是什么

后缀名,扩展名,什么呢,电脑软件,excel,excel从2007开始后缀名就开始了变化,很多人不知道excel的后缀名是什么,不知道后缀名是什么并不是什么丢人的事情,很多人还不知道什么是excel后缀名了,excel后缀名从office2007以后已经开始了改变,今天我们…

PS简单制作出有趣的破图效果

PS简单制作出有趣的破图效果

有趣,效果,简单,电脑软件,PS,前言:设计师在设计图片时,有时为了有趣和立体化,会采用破图的方法。破图说白了,就是通过颜色的严重反差,来造成一种立体的感觉。是不是只有大设计师才拥有这种手段呢,也未必。只有掌握了一定的方法,都可以做到的。首先…

mac系统下安装多个php并自由切换的

mac系统下安装多个php并自由切换的

方法,安装,系统,多个,详解,前言最近工作中遇到一个问题,需要实现在mac系统下安装多个php并实现自由切换,通过查找相关的资料找到了解决的方法,所以想着总结下来,方便大家和自己学习参考,下面话不多说,来看看的介绍吧。一、安装多版本php$ brew in…

win7打开任务管理器快捷键

win7打开任务管理器快捷键

快捷键,任务管理器,电脑软件,在我们使用的电脑中,对于进程管理器也叫作任务管理器,当然我们在关闭进程的时候也会经常会用到它。但是在Win7系统中,如果对系统不熟悉,那么也就不知道进程管理器在哪,不知道怎样打开。其实要打开Win7系统进程管理器…

微信小程序的生命周期的详解

微信小程序的生命周期的详解

生命周期,详解,程序,电脑软件,微信小,今天记录一下微信小程序的app生命周期及各页面的生命周期。(一)小程序的生命周期在app.json中进行监听,三个方法①onLauch方法只在小程序启动时触发一次。②onShow方法,在小程序启动时,及由后台切换至前台显…

Windows 7插入移动设备不能自动播

Windows 7插入移动设备不能自动播

移动设备,自动播放,电脑软件,Windows,当用户插入一个全新的USB移动设备时,在系统提示该设备可以正常使用后,没有出现&ldquo;自动插放&rdquo;窗口。这是由于Windows 7对未使用过的USB设备的默认操作识别,而不自动运行该问题的操作方法如下:1、右…

php求数组全排列,元素所有组合的方

php求数组全排列,元素所有组合的方

数组,全排列,组合,元素,方法,本文实例讲述了php求数组全排列,元素所有组合的方法。分享给大家供大家参考,具体如下:<?php$source = array('pll','我','爱','你','嘿');sort($source); //保证初始数组是有序的$last = count($source…