一、数据类型
栈:原始数据类型(Undefined、Null、Boolean、Number、.String)
堆:引用数据类型(对象、数组和函数)
二、检测方法
1、typeof方法
typeof基本数据类型可以,引用数据类型不管用
2、instanceof检测方法
instanceof可以正确判断对象类型,其内部运行机制是判断在其原型链中能否找到该类型的原型。
可以看出,instanceof只能正确判断引用数据类型,而不能判断基本数据类型。instanceof运算符可以用来测试一个对象在其原型链中是否存在一个构造函数的prototype属性
3、constructor检测方法
几乎可以判断基本数据类型和引用数据类型:('abc').constructor === String
constructor有两个作用,一是判断数据的类型, 二是对象实例通过 constrcutor对象访问它的构造函数。需要注意,如果创建一个对象来改变它的原型,constructor就不能用来判断数据类型了。
4、Object.prototype.toString.call( )
Object.prototype.toString.call(1) // Number Object.prototype.toString.call(true) // Boolean Object.prototype.toString.call('accc') // String