JavaScript基本数据类型和引用数据类型
JavaScript变量可能包含两种不同数据类型的值:基本类型值和引用类型值。
一、基本数据类型
1.1定义:
基本类型值指的是简单的数据段:javas中包含5中基本数据类型Undefined、Null、Boolean、Number 和 String。
1.2访问和存储:
基本数据类型是按值访问的,可以直接操作保存在变量中的实际的值。从存储的角度看。基本数据类型是直接存储在栈空间的。
来看一个变量赋值例子:
var num1 = 5;
var num2 = num1;
从图上可以清除的知道基本数据类型赋值时会在在空间分配一块新的存储空间然后把变量的值拷贝过来。图片来自于《JavaScript攻击程序设计(第三版)》
二、引用数据类型
2.1定义:
引用数据类型是由多个基本数据类型构成的对象。比如说object、Array、Date等。
2.2访问和存储
引用数据类型的值是按引用访问的。引用数据类型的值存储在堆内存中。JavaScript不允许直接访问堆内存中的位置,也就是说不能直接操作对象的
内存空间。JavaScript创建一个引用数据类型时会在栈内存中存放一个对象的引用(堆内存中实际存值的地址)。
通过《JavaScript攻击程序设计(第三版)》书上一个简单例子可以很直观的理解:
var obj1 = new Object();
var obj2 = obj1;
obj1.name = "Nicholas";
alert(obj2.name); //"Nicholas"
首先,变量 obj1 保存了一个对象的新实例。然后,这个值被复制到了 obj2 中;换句话说,obj1
和 obj2 都指向同一个对象。这样,当为 obj1 添加 name 属性后,可以通过 obj2 来访问这个属性,
因为这两个变量引用的都是同一个对象。图 4-2 展示了保存在变量对象中的变量和保存在堆中的对象之
间的这种关系。
说到这里就想说一下浅拷贝和深拷贝可以参考另一篇文章
https://www.cnblogs.com/tuofei13/p/15104778.html
三、小结
1.基本数据类型包含Undefined、Null、Boolean、Number 和 String,可直接访问按值访问,存储在栈空间。
2.引用数据类型,不能直接访问、按引用访问、存储在堆空间。