判断数据类型有三种方式,typeof和(===)是判断基本类型的,instanceof是判断对象具体类型的
1.typeof
返回的是字符串
console.log(typeof a==='undefined') //true
console.log(typeof a===undefined) //false
1
2
可以判断number,string,Boolean,undefined类型
不能用在判断object和Array
b1.b2 是个数组
console.log(typeof b1.b2) //object
1
2
不能用来区别null和object
var a=null
console.log(typeof a) //object
1
2
问题:null明明是基本的数据类型,为什么typeof会判定它是object呢?
这是一个历史遗留问题:
原理是这样的,不同的对象在底层都表示为二进制,在Javascript中二进制前三位都为0的话会被判断为Object类型,null的二进制表示全为0,自然前三位也是0,所以执行typeof时会返回"object"。
可以用来判断函数function
console.log(typeof b1.b3) //function
console.log(typeof b1.b3==='function') //true
1
2
2.全等(===)
只能用来判断两种,因为这两个类型只有一个值
undefined
console.log(typeof a==='undefined') //true
1
null
var a=null
console.log(a===null) //ture
1
2
3.instanceof
var b1={
b2:[12,34,445],
b3:function(){
console.log('ba')
}
}
1
2
3
4
5
6
对象
console.log(b1 instanceof Object) //true
console.log(b1 instanceof Array) //false
1
2
数组
console.log(b1.b2 instanceof Object) //true
console.log(b1.b2 instanceof Array) //true
1
2
函数