Javascript中有两种数据类型,分别是原始类型和对象类型
原始(Primitive)类型
boolean、number、string、null、undefind、smybol
原始数据类型是存储在栈中的,遵循先进后出的规则
boolean 是一个布尔值,ture 或者 false, === 、!==、>、< 可以转换数据类型
number 是数值,使用 - 、% 可是把其他类型转换成数值类型
string 是字符串;在js中其他类型可以通过隐式类型转换成字符串类型,比如 == ,+
null 可以是 '' 一个空串;当对象类型不需要使用想让它被清理时可以给把他的引用对象设置成null
undefined 是一个属性被定义但没有赋值;一个对象被申明但是它下面的属性不存在,比如 var 申明一个值,会发生变量提升,但是他的值不会被提升,在控制台打印会是一个 undefind
smybol 是 ES6 新增的可以定义全局变量的一个值
对象(Object)类型
Array、Function、Object
对象类型是存储在堆中的,它会存储两份,另一份存储的是对象的地址。当引用原始类型时,实际上是引用的栈中对象的地址。当对象的地址不被引用时,会被js中的垃圾回收机制回收
typeof VS instanceof
typeof 对于原始数据类型来说,除了 null 都能显示 正确的数据类型
typeof 对于引用数据类型来说,除了 function 都会显示 Object
instanceof 可以判断原始数据类型,他是基于原型链来判断的
instanceof 不能直接判断原始数据类型,可以通过 smybol.toPramiting 设置(好像写错了),或者 new Number() 这种也可以判断
所以 instanceof 也不一定准确
其他检测方法
原始类型可以判断 construtor 是否等于 type 来判断
Array.isArray() 判断数组
a=== null 判断是否是null
万能方法 Object.prototype.toString.call() ,通过这个方法可以把引用数据类型转换成袁术数据类型,比如 [object object] 第二个参数会随着传入参数的改变改变