ECMAScript中基本类型和引用类型的值在复制变量值时的区别
一. 复制基本类型变量的值
如果从一个变量向另一个变量复制基本类型的值时,会在原变量对象上创建一个新值,然后把该值复制到为新变量分配的位置上。
举例:
var a1=5; var a2=a1; alert(a1); //5 alert(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
ECMAScript中基本类型和引用类型的值在复制变量值时的区别相关推荐
- 基本类型和引用类型的值 函数的传递参数
ECMAScript中函数的传参都是按值传递的. 不管是传基本类型的值还是引用类型的值都是按值传递,访问变量则分按值和按引用两种方式. 向参数传递基本类型的值 被传递的值会被复制(对应文章<基本 ...
- javascript变量中基本类型和引用类型的详解解读
前言: Javascript语言中的变量和其他语言的变量有很大区别,javascript松散类型的本质,决定了它只是在特定时间时间保存特定值得名字而已.由于不存在定义某个变量必须保存何种数据类型值的规 ...
- javascript中基本类型和引用类型的区别分析
大多数人系统学习过的程序设计语言,在这些语言的学习过程中最早学到的几个要点之一就是值类型和引用类型的区别.下面我们来看一下在 JavaScript 中基本数据类型(Primitive Types)和引 ...
- javascript中基本类型和引用类型复制变量的值
基本类型值指的是简单地数据段,引用类型的值指的是那些可能由多个值构成的对象. 基本数据类型:Undefined,Null,Boolean,Number,String. 如果从一个变量向另一个变量复制基 ...
- Javascript高级程序设计——基本类型和引用类型的值
ECMAScript中的变量有两种不同的数据类型的值: 基本类型:基本类型的值是简单的数据段.包括:Undefined.Null.Number.Boolean.String五种 引用类型:引用类型的值 ...
- Java Native Interface 二 JNI中对Java基本类型和引用类型的处理
本文是<The Java Native Interface Programmer's Guide and Specification>读书笔记 Java编程里会使用到两种类型:基本类型(如 ...
- JavaScript基本类型和引用类型
目录 介绍 背景 JavaScript数据类型 基本类型 基本类型的行为如何? 使用typeof运算符 语法类型 为什么null返回对象? 参考类型 创建对象 对象的行为如何? 销毁对象 基本类型和引 ...
- 基本类型和引用类型的传值
ECMAScript变量可能包含两种不同数据类型的值:基本数据类型值和引用类型值 基本类型值指的是简单的数据段,而引用类型值指那些可能由多个值构成的对象. 1.动态的属性 定义基本类型值和引用类型值的 ...
- java包装类和基本类型谁先谁后_你知道Java中基本类型和包装类的区别吗
前情提要 上一篇中,通过一道常见的面试题(即:String.StringBuilder.StringBuffer的区别),引申到Java中基本类型和包装类的相关内容.在这一篇中,我们将解决上一篇中引申 ...
最新文章
- Java泛型详解,通俗易懂
- 都在说TDD开发,那到底TDD是什么?
- Appointment get entity debug
- ROS与Android的通信
- python查找指定字符所在行号_在python中获取当前位置所在的行号和函数名
- 1. jenkins常见错误及解决方法
- Atitit。sql2016标准化的规划方案 v3 q2a
- 需求跟踪矩阵(Requirement Tracking Matrix)
- 三国战纪2 ,西游2的FBA 移植攻略!
- 曲线运动与万有引力公式_考前冲刺,人手一份!高中物理公式大全,不看太亏...
- javaweb基于SSM开发在线问卷调查系统(前台+后台) 课程设计 毕业设计源码
- 小米6-谷歌全家桶安装
- (内含两种方式)Android 在线查看文档world丶xls丶ppt等文件
- html中并列式的应用,并列式结构梳理
- android 主流屏幕比例,Android 主流屏幕以及适配
- 3D-SKIPDENSESEG医学图像分割
- matlab修改背景颜色为护眼和修改字体大小
- LIS.LCS.LCIS相关问题
- 云POS连锁版收银系统免费试用 超市连锁收银软件免费注册
- 人脸识别学生考勤系统【1】
热门文章
- 1047. 编程团体赛(20)-PAT乙级真题
- [Java] 蓝桥杯ADV-65 算法提高 格子位置
- [Java] 1001. 害死人不偿命的(3n+1)猜想 (15)-PAT乙级
- 1029. 旧键盘(20)-PAT乙级真题
- 蓝桥杯 BASIC-25 基础练习 回形取数
- spring 作用域理解
- Jquery的jqzoom插件的使用(图片放大镜)
- 怎样实现短信验证功能
- 分享Silverlight/WPF/Windows Phone/HTML5一周学习导读(12月12日-12月18日)
- 命令行运行postman