typeof 和instanceof

123 阅读1分钟

使用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 let a console.log(typeof a)//undefined console.log(typeof b)//undefined 所以typeof的局限性就在于对引用类型进行判断的时候只能是object,包括Oject、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 最值得注意的是,instanceof其实判断的是后者的原型有没有出现在前者的原型链上。即判断object.prototype有没有出现obj的_proto_上,所以当前者没有原型链的时候不能判断

console.log(null instanceof Object)//false

由于null只是一个空对象指针,没有原型链,所以结果为false