参考JavaScript高级程序设计(JS红宝书)

一、基本类型值的复制

如果从一个变量向另一个变量复制基本类型的值,会在变量对象上创建一个新值,然后把该值复制到为新变量分配的位置上(注意,这里为新变量分配了相应类型的内存来存这个值)。

举个栗子:

var num1 = 5;
var num2 = num1;

在这里,num1中保存的值是5.当使用num1的值来初始化num2时,num2中也保存了值5。但num2中的5与num1中的5是完全独立的,该值只是num1中5的一个副本。此后,这两个变量可以参与任何操作而不会相互影响。(注意两个5在两块内存中,名字分别是num1和num2,所以操作其中一个的时候,不会对另外一个产生影响)

如下图:

二、引用类型值的复制

当从一个变量向另一个变量复制引用类型的值时,同样也会将存储在变量对象中的值复制一份放到为新变量分配的空间中。不同的是,这个值的副本实际上是一个指针,而这个指针指向存储在堆中的一个对象。复制操作结束后,两个变量实际上将引用同一个对象。因此,改变其中一个变量,就会影响另一个变量。

举个栗子:

<script type="text/javascript">var obj1 = new Object();var obj2 = obj1;obj1.name = "test";alert(obj2.name);
</script>

首先,变量obj1保存了一个对象的新实例。然后,这个值被复制到了obj2中;换句话说,obj1和obj2都指向同一个对象。这样,当为obj1添加name属性后,可以通过obj2来访问这个属性,因为这两个变量引用的都是同一个对象。如下图:

可以理解为同一个对象有两个名字(即两个指针指向它),两个名字都可以操作这个对象(就像一个人有两个名字)。

JavaScript基本类型值和引用类型值的复制问题相关推荐

  1. php js给input的赋值,JavaScript给input的value赋值引发的关于基本类型值和引用类型值问题_javascript技巧...

    在自己做东西时,遇见了一个问题.就拿博客园的首页右边的搜索举例吧,用控制台操作. 现在我需要从另外一个地方将数据传给input,让其在一刷新的时候就显示数据. 这不难啊,于是我按照我的理解做了 代码如 ...

  2. html js布尔值怎么定义,JavaScript基本类型值-Undefined、Null、Boolean

    大致介绍 ECMAScript中有5中简单的数据类型(也称为基本数据类型):Undefined.Null.Boolean.Number.String. Undefined Undefined时全局变量 ...

  3. ECMAScript中基本类型和引用类型的值在复制变量值时的区别

    一. 复制基本类型变量的值 如果从一个变量向另一个变量复制基本类型的值时,会在原变量对象上创建一个新值,然后把该值复制到为新变量分配的位置上. 举例: var a1=5; var a2=a1; ale ...

  4. JavaScript学习笔记——JS中的变量复制、参数传递和作用域链

    今天在看书的过程中,又发现了自己目前对Javascript存在的一个知识模糊点:JS的作用域链,所以就通过查资料看书对作用域链相关的内容进行了学习.今天学习笔记主要有这样几个关键字:变量.参数传递.执 ...

  5. 重学JavaScript系列之一_引用类型

    重学JavaScript系列之一_引用类型 ECMAScript中,引用数据是一种数据结构,用于将数据和功能组织在一起,有时候被称为类 ES6中使用Class定义一个类 引用类型的值(对象)是引用类型 ...

  6. JavaScript基本类型与引用类型的区别

    我们先看一段程序的运行结果: 示例代码: 执行结果: 会出现这样的情况是因为JavaScript基本类型和引用类型在数据存储和变量传值方面存在差别.详解如下: 基本类型: Boolean.Number ...

  7. Javascript中的对象拷贝(对象复制/克隆)

    Javascript中的对象拷贝(对象复制/克隆) 李俊才 CSDN:jcLee95 邮箱:291148484@163.com 1. 对象的引用 要说"拷贝"还要先说"引 ...

  8. JavaScript强化教程——对象的值传递和引用传递

    2019独角兽企业重金招聘Python工程师标准>>> 本文为 H5EDU 机构官方 HTML5培训 教程,主要介绍:JavaScript强化教程--对象的值传递和引用传递 func ...

  9. go 接口 构造器_Go 中接口值的复制

    我一直在思考 Go 语言它是如何工作的.直到最近我才发现 Go 中一切都是基于值的.当我们向函数传递参数.迭代切片.执行类型断言时我们都可以看到这一现象.在这些例子中,这些数据结构所存储的值的拷贝会被 ...

最新文章

  1. 使用LoadRunner对Web Services进行调用--Add Service Call
  2. muduo学习笔记 - 第3章 多线程服务器的适合场合与常用编程模型
  3. 聊聊Function的bind()
  4. java getabsolutepath,详谈java中File类getPath()、getAbsolutePath()、getCanonical的区别
  5. 用java求直角三角形的面积_JAVA 已知三角形的三个边判断 是否为直角三角形,如果是求面积!...
  6. python爬虫07--代理
  7. Luogu P2595 [ZJOI2009]多米诺骨牌 容斥,枚举,插头dp,轮廓线dp
  8. 三足鼎立 – Mac 输入法横向对比
  9. Scratch3.0创意编程(基础篇):第11课 智能小车
  10. 北京有两个百度,李彦宏只有一个陆奇
  11. java 跳跃表_你真的了解跳跃表吗
  12. 怎么用计算机打印出东西,怎样在电脑上打印东西_怎么用电脑打印东西
  13. 如何在cad中导入谷歌地图_如何在Google地图中避开收费公路
  14. 软件工程——软件设计总结
  15. 代理服务器可能有问题,或地址不正确(已解决)
  16. 零基础学习HTML(7)——块级元素和行内元素
  17. PPT的那些事儿(趣资源)
  18. Django计算机毕业设计校园二手拍卖网python(源码程序+lw+远程部署)
  19. 三菱伺服调试软件_三菱M70第四轴追加参数设定一览表
  20. COMSOL中内置数学函数及内置运算符

热门文章

  1. [转载] python中@property装饰器
  2. 39. 组合总和 ,40. 组合总和 II,216. 组合总和 III
  3. RIA and volta
  4. 欧拉线性筛 与 欧拉函数 + 几道例题
  5. 网易编程题------操作序列
  6. Maximal Binary Matrix CodeForces - 803A (贪心+实现)
  7. 简单介绍一下vue2.0
  8. nyoj--49--开心的小明(背包)
  9. C#算法 质因数 最大公约数与最小公倍数
  10. Tensorflow随笔——命令行参数