1.基本数据类型(5个)
number、string、boolean、undefined、null
2.引用数据类型
object
3.typeof和instanceof可以检测数据类型,下面我们来具体看下
1)
null的类型为什么不是null而是object:
计算机检测返回数据类型的判断是根据机器码的后三位进行判断的,只有在后三位是000的时候是object,而null的话是很多0,所以它是object,关于基础数据类型我认为就是记住就好。
2) 下面我们实践一下引用数据类型,我们首先想到的肯定就是对象以及数组
[]和{}没有问题,类型是object,那么function和Array的类型是如何判断的呢:
这个就和js的设计有关了,理论上他们应该也返回object,但是设计的时候后在js内部设计了一个call方法,如果有这个方法,那么就是object,没有的话就是function类型
3)直接声明的string和new出的string有什么不同
10s中思考一下。。。。
好,看答案
直接声明的数据,它是开辟了一个栈来储存数据,这种声明类型一定为string,而new出来的数据,等于是一个实例对象,并且会已键值对的形式存储,如上图所示,类型的话就是object类型。
4. instanceof检测类型
返回值是boolean值,用法是A instanceof B,意思就是A是否是B实例化以后的数据,你也可以理解成instacnceof是A在B以及它的原型链上进行检测的:
毫无疑问,空数组[ ]是由Array实例化而来的,
[] instanceof Array ----------true
而[ ]也是由object实例化而来的,这个就是原型链上的实例化关系,A为[ ], B为Array,c为object
因为A由B实例化而来,Array是由object实例化而来,那么[ ]也是由object实例化而来。
同样我们想象instanceof肯定不能检测基本数据类型,例如: ‘str’ instanceof String一定为false,上面举的例子可以看到,这不是string实例化而来的,string实例化之后就变成了object了。
5.小结
有上面我们可以看到typeof无法检测出null类型,而instanceof也只能返回true或false无法确定数据是什么类型的,如果我们想精确知道数据类型可以使用下面object的原型的方法:
Object.prototype.toString.call('ssss'); // string
大家可以亲自试一下~~