ECMAScript变量可能包含两种不同数据类型的值:基本数据类型值和引用类型值

基本类型值指的是简单的数据段,而引用类型值指那些可能由多个值构成的对象。

1.动态的属性

  定义基本类型值和引用类型值的方式都是定义一个变量并为该变量赋值。我们可以对引用类型值的变量进行添加属性和方法。

2.复制变量值

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

  

1 var num1=5;
2 var num2=num1;

  在这里num1中保存的是5,当使用num1来初始化num2时,num2中也保存了5,但是num2中5与num1并没有关系,该值是num1中5的一个副本,你可以对num1做任何操作而不影响num2.

  但如果是一个变量向另一变量复制引用类型的值时,同样也会将存储在变量中值复制一份到新变量中,但是复制的是一个指针,而这个指针指向存储在堆中一个对象,实际上两个变量引用的是同一个对象,如下面列子所示:

var obj1=new Object();
var obj2=obj1;
obj1.name="zp";
alert(obj2.name); //"zp"

3传参

  ECMAScript中所以函数的参数都是按值传递的,也就是说,把函数以外的值复制给函数内部的参数,就跟把值从一个变量复制到另外一个变量一样,基本类型还是按照基本类型的传递,引用类型的还是按照引用类型的传递。

  在向参数传递基本类型值时,被传递的值会被复制给一个局部变量(即命名参数,或者用ECMAScript的概念来说就是arguments对象中一个元素)。在向参数传递引用类型的值的时,会把这个值在内存中的地址复制给一个局部变量,因此这个局部变量的变换也会反映在函数的外部。

function addTen(num){num+=10;return num;
}
var count=20;
var result=addTen(count);
alert(count);   //20
alert(result);   //30

  这里addTen()有一个参数num,而参数实际上是函数的局部变量,在调用这个函数时,变量count作为参数传递给addTen,这个变量的值是20,于是,按照基本类型的值传递,20被复制给参数num,函数的返回值是30,而num和count并没有关系,它们紧紧是值相同。如果是按照引用传递的话,那么变量count的值也会变成30,从而反映函数内部的修改。下面是一个使用对象作为参数的例子:

  

function setName(o){o.name="zp";
}
var person=new Object();
setName(person);
alert(person.name);  //"zp"

  以上代码似乎在说明参数是按照引用传递的,因为在函数内部的修改反映到外部的person中。因为在内存中person指向的对象只有一个,而且是全局对象。为了证明是按值传递的,接下来提供了下面一个例子

function setName(obj){obj.name="zp";obj=new Object();obj.name="xyq";
}
var person=new Object();
setName(person);
alert(person.name); //"zp"

  这个代码在上面的基础上添加两行代码,重新再函数内部给obj参数赋值了,如果按照引用传递,此时外面的person对象应该指向其name的值为xyq的新对象,但是person对象还是指向原来的对象,这说明在函数内部修改了参数的值,但是原始的引用值还是不会变,实际上在函数内部重新obj时,obj这个变量的引用的就是一个局部对象了,而这个局部对象在函数执行完后就销毁了。

就写到这,是对引用类型和基本类型的基础知识的一点记录。

转载于:https://www.cnblogs.com/ReadingNotes/archive/2012/09/06/2674286.html

基本类型和引用类型的传值相关推荐

  1. JS:基本类型和引用类型

    JS中的基本类型和引用类型 1.基本类型:number.boolean.string.undefined. null 2.引用类型:array.object.function.regexp- 一.基本 ...

  2. java面向对象(类与对象,局部变量成员变量,基本类型和引用类型作为参数传递)...

    一.类和对象的区别 类是对某一类事物的抽象描述,而对象用于表示现实中该类事物的个体 可以将玩具模型看作是一个类,将一个个玩具看作对象,从玩具模型和玩具之间的关系便可以看出类与对象之间的关系.类用于描述 ...

  3. Java Native Interface 二 JNI中对Java基本类型和引用类型的处理

    本文是<The Java Native Interface Programmer's Guide and Specification>读书笔记 Java编程里会使用到两种类型:基本类型(如 ...

  4. 基本类型和引用类型的值 函数的传递参数

    ECMAScript中函数的传参都是按值传递的. 不管是传基本类型的值还是引用类型的值都是按值传递,访问变量则分按值和按引用两种方式. 向参数传递基本类型的值 被传递的值会被复制(对应文章<基本 ...

  5. javascript变量中基本类型和引用类型的详解解读

    前言: Javascript语言中的变量和其他语言的变量有很大区别,javascript松散类型的本质,决定了它只是在特定时间时间保存特定值得名字而已.由于不存在定义某个变量必须保存何种数据类型值的规 ...

  6. javascript中基本类型和引用类型的区别分析

    大多数人系统学习过的程序设计语言,在这些语言的学习过程中最早学到的几个要点之一就是值类型和引用类型的区别.下面我们来看一下在 JavaScript 中基本数据类型(Primitive Types)和引 ...

  7. JavaScript基本类型和引用类型

    目录 介绍 背景 JavaScript数据类型 基本类型 基本类型的行为如何? 使用typeof运算符 语法类型 为什么null返回对象? 参考类型 创建对象 对象的行为如何? 销毁对象 基本类型和引 ...

  8. 基本类型和引用类型区别

    目录 1.基本类型包括: 2. 引用类型包括: 3.基本类型 3.1 基本类型的值是不可变的 3.2基本类型的比较是值的比较 3.2.1基本类型的数据类型相同时 3.2.2基本类型的数据类型不同时 3 ...

  9. JavaScript 基本类型和引用类型区别

    基本概念 JS有以下这些数据类型:undefined.null.string.boolean.number.symbol.bigint.object. 其中,前面 7 个被称为基本类型,又叫原始类型( ...

最新文章

  1. python 公钥解密
  2. leetcode算法题--矩阵中的路径
  3. 记录下log4j的两种配置方式
  4. elasticsearch的Linux下安装报错问题解决
  5. Linux 汇编学习
  6. SpringBoot源码分析解答问题
  7. 机器学习实战——决策树:matplotlib绘图
  8. 成果丰硕!SWORD 斯沃德惊艳亮相“第18届深圳名品家博会”
  9. 生活在同一片土地上,印度人肤色差异为何那么大?
  10. 用Hight-Speed Charting绘制时间电压动态曲线
  11. grub4dos linux 设备,解决方案:在Grub4Dos硬盘上安装Fedora / CentOS Linux操作系统
  12. 双硬盘双系统win10+manjaro-kde搭建
  13. C++:endl的作用
  14. Linux系统下安装Adobe Flash Player插件的方法
  15. Docker下载安装运行Nginx服务
  16. 仿微信语音功能的流程
  17. 基于mini2440嵌入式linux上整合一套Domoticz智能家居系统(九)使用domoticz+mosquitto+Android客户端实现控制mini2440上的LED(二)
  18. Excel原封不动导入txt文件
  19. linux 解压 文件 中文名乱码
  20. 新基建新场景新需求,激发智能化变革新联想

热门文章

  1. 176页报告辟谣自动化时代的就业危机(附下载)
  2. 中科院在2017年高被引科学家遴选中表现优异
  3. “计算机艺术之父”、现代计算机技术先驱查理斯·苏黎去世,享年99岁!
  4. 从事安卓开发6年,我都有哪些收获?
  5. 据说只有 Java 程序员才能看懂! | 每日趣闻
  6. 我是 Redis,MySQL 大哥被我害惨了!
  7. 这可能是东半球最保姆级的后台服务器开发学习路线
  8. c语言遍历字符串数组的方法
  9. 阿里巴巴测试环境稳定性提升实践
  10. 分布式监控系统Zabbix3.2对数据库的连接数预警