使用typeof对变量进行类型判断的时候,只能进行5种基本类型的判断以及1种引用类型的判断,即undefined、null、String、Boolean、Number、Object。
注意区分undefined与null的区别: undefined是一个变量未进行初始化 var a; console.log(a) //undefined
而null是一个空对象指针,即null为一个对象 console.log(typeof null) //object
注意一点的是:使用typeof对一个未定义和未初始化的变量进行判断时都是undefined
这里只定义变量a而未定义变量b 但是用typeof进行类型检测都是undefined
1 let a 2 console.log(typeof a) //undefined 3 console.log(typeof b) //undefined
所以我们在对变量进行定义的时候需要注意:
若是定义一个变量需要
空对象 var obj=null
空字符串 var str=''
数字 var num=0
布尔值 var bool=true
若不知道即将定义的变量是什么类型 var a
这样不仅使代码更容易理解不易出错,浏览器解析也会更优。
但typeof的局限性就在于对引用类型进行判断的时候只能是object,包括Object、Array、Function、RegExp....
所以我们使用instanceof运算符,来检测变量是否为某种确定的引用类型,返回一个bool值true/false
1 let reg=/[1,2]/ 2 let obj={} 3 let arr=[] 4 console.log(obj) 5 console.log(reg instanceof RegExp) // true 6 console.log(obj instanceof Object) // true 7 console.log(arr instanceof Array) // true 8 但是值得注意的是,instanceof其实判断的是后者的原型有没有出现在前者的原型链上。即判断Object.prototype有没有出现在obj的__proto__上,所以当前者没有原型链的时候不能判断 9 10 console.log(null instanceof Object) //false 11 由于null只是一个空对象指针,没有原型链,所以结果为false