含义

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

基本类型 指的是简单的数据(六大常用类型): Number, String, Boolean, Undefined , Null

引用类型 指可能由多个值构成的对象: Object , Array, Function

区别

1.对于存放两种数据类型的变量 :存放js基本数据类型的变量存放的是基本类型数据的实际值,而存放引用数据类型的变量是保存对它的引用即指针

2 变量的交换(复制变量时): 对于存放基本数据类型的变量的交换,等于在一个新的作用域创建一个新的空间,新空间与原有的空间不会相互影响
对于存放引用数据类型的变量的交换,并不会创建一个新的空间,而是让对象或方法和之前对象或方法同时指向一个原有空间(即一个地址)

3 声明变量时不同的内存分配: 基本数据类型值(原始值)是存储在栈(stack)中的数据段,即直接存储在变量访问的位置
引用数据类型值是存储在堆(heap)中的对象即存储在变量处的值是一个指针,指向存储对象的内存地址。

4 参数传递的不同 : 首先要明确ECMAScript中所有的函数的参数都是按值来传递的
变量存储的基本类型的值只是把值传递给参数之后参数和这个变量互不影响
变量存储的引用数据类型值存储的是该引用值在堆内存中的内存地址,因此传递的值就是这个内存地址

举例

var a = 8;
var b = a ;    //此处a和b有着相同的值,但是两者是相互独立的互不影响
a = 10;    //给a赋了新值,但是不影响b
console.log(b);    //输出8
var c = [1,2,3];    //此处是将一个内存地址存储给了变量c
var d = c ;    //此处c和d指向的是同一个内存地址
c[0] = 2;    //此处将地址的值改变则会影响到d
console.log(d);    //[2,2,3]
var e = [4,5,6];
var f = [7,8,9];    //在此处f和e指向了不同的内存地址,则两者将不会有任何相互影响
e[0] = 5;
console.log(f);    //[7,8,9]