`
ysj_csdn
  • 浏览: 6052 次
社区版块
存档分类
最新评论

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的值 赋予了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);
复制代码

输出结果:
{a1b2c3d: [0,1,2,3]}
{a1b2c3d: [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在默认情况下,数组、对象和函数是引用赋值,如下代码所示: 代码如下:&lt;html&gt; &lt;head&gt; [removed] var a={age:20,height:175}; var b = a; alert&#40;b.age&#41;; b.age = 25; alert&#40;a.age...

    源文件程序天下JAVASCRIPT实例自学手册

    4.2 JavaScript对象的生成 4.2.1 HTML文档结构 4.2.2 DOM框架 4.2.3 顶级对象之间的关系 4.2.4 浏览器载入文档时对象的生成 4.3 JavaScript核心对象 4.4 文档对象的引用 4.4.1 通过对象位置访问文档对象 4.4.2 通过...

    JavaScript权威指南-第六版

     3.7 不可变的原始值和可变的对象引用47  3.8 类型转换48  3.9 变量声明55  3.10 变量作用域56  第4章 表达式和运算符60  4.1 原始表达式60  4.2 对象和数组的初始化表达式61  4.3 函数定义表达式62  4.4 ...

    【JavaScript源代码】JavaScript高级程序设计之变量与作用域.docx

     目录 1、原始值与引用值2、instanceof3、作用域 1、原始值与引用值 2、instanceof 3、作用域 1、原始值与引用值 6种简单数据类型的值都是原始值, 原始值通过变量赋值给另一个变量时,会复制一个出一个新的...

    JavaScript权威指南(第6版) 英文版

    3.7 不可变的原始值和可变的对象引用 47 3.8 类型转换 48 3.9 变量声明 55 3.10 变量作用域 56 第4章 表达式和运算符 60 4.1 原始表达式 60 4.2 对象和数组的初始化表达式 61 4.3 函数定义表达式 62...

    JavaScript权威指南(第6版)(附源码)

    3.7 不可变的原始值和可变的对象引用 3.8 类型转换 3.9 变量声明 3.10 变量作用域 第4章 表达式和运算符 4.1 原始表达式 4.2 对象和数组的初始化表达式 4.3 函数定义表达式 4.4 属性访问表达式 4.5 调用表达式 4.6 ...

    JavaScript权威指南(第6版)

    3.7 不可变的原始值和可变的对象引用 3.8 类型转换 3.9 变量声明 3.10 变量作用域 第4章 表达式和运算符 4.1 原始表达式 4.2 对象和数组的初始化表达式 4.3 函数定义表达式 4.4 属性访问表达式 4.5 调用表达式 4.6 ...

    JavaScript权威指南(第6版)中文版pdf+源代码

     3.7 不可变的原始值和可变的对象引用47  3.8 类型转换48  3.9 变量声明55  3.10 变量作用域56  第4章 表达式和运算符60  4.1 原始表达式60  4.2 对象和数组的初始化表达式61  4.3 函数定义表达式62  4.4 ...

    javascript对象的property和prototype是这样一种关系

    ECMAScript可以识别两种... Number, Boolean, Null 或者 Undefined) 下面的这个简单的例子描述了一个javascript对象是如何设置一个属性的值和如何读取属性的值的。 赋值操作 一个对象的属性的创建非常简单,直接

    JavaScript基础和实例代码

    4.2 JavaScript对象的生成 4.2.1 HTML文档结构 4.2.2 DOM框架 4.2.3 顶级对象之间的关系 4.2.4 浏览器载入文档时对象的生成 4.3 JavaScript核心对象 4.4 文档对象的引用 4.4.1 通过对象位置访问文档对象 4.4.2 通过...

    javascript学习笔记.docx

    f) 继承:只是在查询一个属性时自动发生,而不会在写属性时发生,就是说单写一个父类的属性时,JavaScript环境会为对象本身创建一个同名的属性,从此该属性就覆盖了父类中的属性。 12) 创建一个数组可用 new Array()...

    JavaScript权威指南(第6版)(中文版)

    3.7 不可变的原始值和可变的对象引用 3.8 类型转换 3.9 变量声明 3.10 变量作用域 第4章 表达式和运算符 4.1 原始表达式 4.2 对象和数组的初始化表达式 4.3 函数定义表达式 4.4 属性访问表达式 4.5 调用表达式 4.6 ...

    JavaScript 权威指南(第四版).pdf

     3.7 不可变的原始值和可变的对象引用47  3.8 类型转换48  3.9 变量声明55  3.10 变量作用域56  第4章 表达式和运算符60  4.1 原始表达式60  4.2 对象和数组的初始化表达式61  4.3 函数定义表达式62  4.4 ...

    JavaScript权威指南(第6版)中文文字版

    3.7 不可变的原始值和可变的对象引用 47 .3.8 类型转换 48 3.9 变量声明 55 3.10 变量作用域 56 第4章 表达式和运算符 60 4.1 原始表达式 60 4.2 对象和数组的初始化表达式 61 4.3 函数定义表达式 62 4.4 属性访问...

    JavaScript权威指南(第6版)中文

    3.7 不可变的原始值和可变的对象引用 47 3.8 类型转换 48 3.9 变量声明 55 3.10 变量作用域 56 第4章 表达式和运算符 60 4.1 原始表达式 60 4.2 对象和数组的初始化表达式 61 4.3 函数定义表达式 62...

    【JavaScript源代码】详解JS变量存储深拷贝和浅拷贝.docx

     目录 变量类型与存储空间栈内存和堆内存基本数据类型引用类型图解存储空间引用类型的赋值深拷贝和浅拷贝深拷贝浅拷贝对象的赋值三者对比浅拷贝的常用的五种方法Object.assign()扩展运算符Array.prototype.slice...

Global site tag (gtag.js) - Google Analytics