变量

ECMAScript变量有两种不同数据类型的值,分别是基本类型和引用类型,两者的不同在于基本类型值是简单的数据段,引用类型值一般指由多个值构成的对象

基本类型

基本数据类型包括5种:Undefined、Null、Boolean、Number、String,基本数据类型是按值访问的,操作的是变量实际的值

引用类型

引用类型的值保存在内存中,因为JavaScript不允许直接访问内存位置,所以我们不能直接操作对象的内存空间,而是操作对象的引用,所以说引用类型的值是按引用访问的。

这里指的是一般的赋值操作,当给对象添加属性时,操作的是实际的对象


动态添加属性

引用类型的值可以动态添加属性,而基本类型不可以

var obj = new Object();

obj.name = "xiaoxiao";

alert(obj.name);  //"xiaoxiao"

var name = "xiaoxiao";

name.sex = "男";

alert(name.sex); //undefined

复制变量值

基本类型的值进行复制的时候,会在新变量创建新值作为原来变量的副本,新变量和原变量彼此独立,进行的操作不会相互影响

引用类型的值进行复制的时候,原变量进行复制的是一个指向存储在堆中一个对象的指针,所以两个变量指向的是同一个对象

基本类型存储位置在栈,引用类型存储位置在堆

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

传递参数

不管是基本类型的值还是引用类型的值,在给函数传递参数时,都是按值传递。

进行按值传递也就代表着给参数传值和给变量复制值进行一样的操作,基本类型操作栈,每个变量都是独立的;引用类型操作堆,每个变量代表一个指向堆内的指针,引用同一个对象。

基本类型的值进行参数传递时和复制变量值时一样,把值传递给了函数的一个局部变量(arguments对象的一个元素)

引用类型的值进行参数传递时,传给局部变量的是原对象的地址而不是复制时的指针,所以在函数内进行的操作会影响原对象


类型检测

检测基本类型时可以用typeof操作符,检测引用类型时可以用instanceof操作符。

var a = "xiaoxiao";

alert(typeof a); //string

var obj = new Object();

alert(obj instanceof Object); //true;

最新文章

  1. C#使用 DirectX SDK 9做视频播放器 并在视频画线添加文字 VMR9
  2. JS与树本(复杂)
  3. Java操作Oracle
  4. WordPress的body_class()函数详解
  5. jQuery ajax - get(),getJSON(),post()方法
  6. sell-- wordPOI
  7. iOS开发——使用技术OC篇&简单九宫格锁屏功能的实现与封装
  8. C# 在子线程中创建不会阻塞执行窗体
  9. C调用OPENSSL做REST服务客户端的例子
  10. Windows下MySQL数据库备份脚本(二)
  11. Dijkstra算法详解
  12. 【LeetCode】Flatten Binary Tree to Linked List
  13. mongoDB查询及游标
  14. Extjs学习笔记之九 数据模型(上)-extjs
  15. PHP全栈学习笔记16
  16. ubuntu重复登录问题
  17. NLS_CHARACTERSET和NLS_NCHAR_CHARACTERSET
  18. centos 7 搭建openvpn-2.4.6
  19. ZOJ Problem Set - 1004-Anagrams by Stack
  20. linux系统下邮件的发送

热门文章

  1. ubuntu亲测安装opencv和成功解决Makefile:160: recipe for target 'all' failed make: *** [all] Error 2
  2. centos7下的防火墙部署
  3. vite实现element-plus按需配置,自定义主题和读取/修改系统主题色
  4. 关于windows更新时间,设置更新时间段
  5. IaaS--云上虚拟网络(何恺铎《深入浅出云计算》笔记整理)
  6. Java8 提供CompletableFuture来简化高并发异步处理编程
  7. jmeter 添加断言和查看断言结果
  8. 'xxx' must be unique because it is referenced by a foreign key.
  9. DOS批处理自动定期清除生成的备份文件
  10. git lock fail解决