数据类型
js的数据类型分为两大类基本数据类型和引用数据类型,基本数据类型有string/number/boolean/null/undefined/symbol ,大家可能对后面三个比较陌生,symbol是代表我们创建之后独一无二,并且不可以变的数据类型,这个主要是解决全局变量可能冲突的问题。引用数据类型:object,js总共有七种
区别
- 声明变量时的存储分配
说明 基本数据类型存储在栈中,引用的数据类型存储在堆中
- 不同的内存分配机制也带来了不同的访问机制
说明 不可以直接访问堆内存空间的位置以及直接操作堆内存空间,只能操作对象在栈内存中的引用地址, 基本数据类型直接访问到,引用数据类型访问引用地址,根据引用地址找到堆中实体。
- 复制变量时的不同
说明
- 基本数据类型:var a=1,var b=a,将原始值的副本赋值新的变量,传值
- 引用数据类型:var obj={name:"张三"},var obj1=obj,将引用的地址赋值给新的变量,传址
看个例子:
var a=[1,2,3,4,5]
// 引用数据类型的一个赋值
var b=a
var c=a[0]
console.log(b)//[1,2,3,4,5]
console.log(c)//1
// 改变数组
b[4]=6
c=7
console.log(a[4])//6
console.log(a[0])//1
画个图分析一下:
那这个时候的a代表就是一个引用地址,引用地址的话我们就随便起一个0x123,他指向数组,所以数组也是0x123,b=a所以b也是0x123,他的指向也只是一个数组,接着往下看,c就等于1,这里需要注意的是他只不过是把这个1传值给c,a的第一个值就是唯一,b[4]=6,他就会复制一个新的数组,地址不变,只是数组发生了变化,这时a的指向就是新数组,b也就指向新的数组,之后又把c变成7,但是对数组是没有影响的