js--3.对象-2.基本和引用数据类型
1 数据类型
1.1 数据类型
JS中的变量可能包含两种不同数据类型的值:基本数据类型和引用数据类型。
1.2 基本数据类型
S中一共有5种基本数据类型:String、Number、Boolean、Undefined、Null。
基本数据类型的值是无法修改的,是不可变的。
基本数据类型的比较是值的比较,也就是只要两个变量的值相等,我们就认为这两个变量相等。
基本数据类型都是单一的值"hello"123 true, 值和值之间没有任何的联系。修改一个变量不会影响其他的变量
1.3 引用数据类型
引用类型的值是保存在内存中的对象。对象属于一种复合的数据类型,在对象中可以保存多个不同数据类型的属性。
当一个变量是一个对象时,实际上变量中保存的并不是对象本身,而是对象的引用。
当从一个变量向另一个变量复制引用类型的值时,会将对象的引用复制到变量中,并不是创建一个新的对象。这时,两个变量指向的是同一个对象。因此,改变其中一个变量会影响另一个。
2 栈和堆
JavaScript在运行时数据是保存到栈内存和堆内存当中的。简单来说栈内存用来保存变量和基本类型。堆内存用来保存对象。
2.1 栈中保存的变量
在声明一个变量时实际上就是在栈内存中创建了一个空间用来保存变量。
1.如果是基本类型则在栈内存中直接保存,
2. 如果是引用类型则会在堆内存中保存对象,而在栈内存保存的变量实际是对象在堆内存中的地址。
2.2 比较
当比较两个基本数据类型的值时,就是比较值。
而比较两个引用数据类型时,它是比较的对象的内存地址,如果两个对象是一摸一样的,但是地址不同,它也会返回false