typeof
typeof 用于判断对象的类型
1. typeof语法
typeof是一个运算符,有2种使用方式:
typeof(表达式)
,对表达式做运算typeof 变量名
,对变量做运算。
2. typeof返回值
返回值为String类型具体如下
‘undefined’ | 未定义的变量或值 |
‘boolean’ | 布尔类型的变量或值 |
‘string’ | 字符串类型的变量或值 |
‘number’ | 数字类型的变量或值 |
‘object’ | 对象类型的变量或值(包括Array),或null(js历史遗留问题,将null作为object类型处理) |
‘function’ | 函数类型的变量或值 |
3.示例
console.log(typeof a); //'undefined'
console.log(typeof(true)); //'boolean'
console.log(typeof '123'); //'string'
console.log(typeof 123); //'number'
console.log(typeof NaN); //'number'
console.log(typeof null); //'object'
var obj = new String();
console.log(typeof(obj)); //'object'
var fn = function(){};
console.log(typeof(fn)); //'function'
console.log(typeof(class c{})); //'function'
4.注意点
- typeof 来获取一个变量是否存在,不要使用if(a) 因为如果 a 不存在(未声明)则会出错。应该使用
if(typeof a!="undefined")
,if(typeof a !== 'undefined' && a !== null)
:判断a存在且不为空
instanceof
判断对象是否为某个构造函数的实例
1.语法
object instanceof constructor
2.返回值
返回值为boolean类型
true
,对象是该构造函数的实例false
,对象不是构造函数的实例
3.示例
var arr = []
console.log(arr instanceof Array); //true
console.log(arr instanceof Object); //true
var obj = {}
console.log(obj instanceof Object); //true
4.注意点
instanceof
的判断是多态的:即子类实例也是父类的实例。A instanceof constructor
本质是检测 构造函数的原型对象(constructor.prototype
)是否存在于参数A
的原型链上。
typeof和instanceof区别
- typeof可以用来判断原始数据的基本类型,其中除了null,其他的原始类型都可以正确的判断出来
- 但是typeof在判断对象的时候除了函数可以正确的判断以外,其他的数据类型都是无法正确
的判断的,返回结果都是object - 所以instanceof可以正确的判断对象数据类型,但是缺点就是没有办法准确的判断出原始数
据类型。
总结:判断基本数据类型和 function 时使用typeof,判引用数据类型使用instanceof
参考:https://www.jianshu.com/p/8107d25f54ac