javascript一共有6种数据类型
有5种基本类型:Null,String Number,Boolean,Undefined
和一种引用类型Object
基础类型在内存中存在于栈空间中,例如 var a=20;则在栈空间中开辟了一个a=20的空间
而Object类型在栈中保存的只是一个内存地址,通过这个地址可以找到堆空间中new出来的对象
具体如下图:
其中数组对象,函数(js中函数也是对象)日期,正则等等都是通过Object对象衍生出来的。
如何检测一个对象的类型呢?
对于基础类型来说,我们使用typeof关键字来检验
var a="junjun";
console.log(a typeof String)//true
对于引用类型来说使用typeof就不满意了,例如数组是引用类型,正则也是引用类型,我们要知道一个对象是不是数组对象,我们需要使用instanceof来检测
var b=[1,2,3];
b instanceof Array 返回true
关于引用类型必须强调的是引用类型在栈内存中保存的只是一个地址,下面实例说明:
var a={}; a.age=12; var b=a; b.age=13; console.log(a.age)
答案是多少呢?答案是13
我们画内存图来分析
var a={}后在堆内存中开辟了一块空间,保存age=12
var b=a a实际上保存的只是一个地址,把这个地址赋值给b,因为b和a指向的是同一个地址,所以b也能访问堆里面的值;b.age=13则重新更改了里面属性,所以a再来访问则是访问修改后的属性。
这个题是一个比较经典的易错题