博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ECMAScript中基本类型和引用类型的值在复制变量值时的区别
阅读量:5265 次
发布时间:2019-06-14

本文共 730 字,大约阅读时间需要 2 分钟。

一. 复制基本类型变量的值

   如果从一个变量向另一个变量复制基本类型的值时,会在原变量对象上创建一个新值,然后把该值复制到为新变量分配的位置上。

   举例:

var a1=5;var a2=a1;alert(a1);     //5alert(a2);     //5

   在上述代码中,a1保存的值是5。当使用a1的值来初始化a2时,a2中也存了5,但是这两个变量(a1、a2)中的5是完全独立的,a2中的5只是a1中5的一个副本,这两个变量可以参与任何操作且互不影响。下图(图1-1)为复制基本类型变量值的过程。

                 图1-1  复制基本类型变量值的过程 

 

二. 复制引用类型变量的值       

     当从一个变量向另一个变量复制引用类型的值时,也会将储存在原变量中的值复制一份放到为新变量分配的空间中。但是,这里的值实际上是一个指针,指向存储在堆中的一个对象,因而两个变量实际上将引用同一个对象。因此,若改变其中一个变量,会影响到另一个变量。

    举例:

var obj1=new Object();var obj2=obj1;obj1.age=5;alert(obj2.age);   //5

   在上述代码中,变量obj1保存了一个对象的新实例,然后obj1保存的值被复制到了obj2中,这个值是指向一个对象的指针;即,obj1和obj2都指向了同一个对象。当为obj1添加了属性age后,也可以通过obj2来访问这个属性,因为obj1和obj2引用的都是同一个对象。保存在变量对象中的变量和保存在堆中的对象的关系如图2-1所示。

   

 

图2-1  保存在变量对象中的变量对保存在堆中的对象的关系

    

   

转载于:https://www.cnblogs.com/SofiaTJU/p/8987531.html

你可能感兴趣的文章
slab分配器
查看>>
【读书笔记】C#高级编程 第三章 对象和类型
查看>>
针对sl的ICSharpCode.SharpZipLib,只保留zip,gzip的流压缩、解压缩功能
查看>>
【转】代码中特殊的注释技术——TODO、FIXME和XXX的用处
查看>>
【SVM】libsvm-python
查看>>
Jmeter接口压力测试,Java.net.BindException: Address already in use: connect
查看>>
Leetcode Balanced Binary Tree
查看>>
go:channel(未完)
查看>>
[JS]递归对象或数组
查看>>
LeetCode(17) - Letter Combinations of a Phone Number
查看>>
Linux查找命令对比(find、locate、whereis、which、type、grep)
查看>>
路由器外接硬盘做nas可行吗?
查看>>
python:从迭代器,到生成器,再到协程的示例代码
查看>>
Java多线程系列——原子类的实现(CAS算法)
查看>>
多线程《三》进程与线程的区别
查看>>
linux sed命令
查看>>
html标签的嵌套规则
查看>>
[Source] Machine Learning Gathering/Surveys
查看>>
HTML <select> 标签
查看>>
类加载机制
查看>>