目录
- 一、 typeof
- 二、 instanceof
- 三、 typeof 与 instanceof 区别
- 四、 获取对象类型的具体类型信息
内容
一、 typeof
语法:
typeof运算符后跟操作数:
typeof operand
或者
typeof (operand)
参数:
- operand 是一个表达式,表示对象或原始值,其类型将被返回;
- 括号是可选的。
说明:
typeof 操作符返回一个字符串,表示操作数的基本类型。
下表总结了typeof可能的返回值:
类型 | 结果 |
---|---|
Undefined | "undefined" |
Null | "object" |
Boolean | "boolean" |
Number | "number" |
String | "string" |
Symbol | "symbol" |
宿主对象(由JS环境提供) | Implementation-dependent |
函数对象 | "function" |
任何其他对象 | "object" |
二、 instanceof
语法:
object instanceof constructor
参数:
- object : 要检测的对象
- constructor : 某个构造函数
说明:
instanceof 运算符用来检测 constructor.prototype 是否存在于参数 object 的原型链上。
机制:
instanceof 的等效函数如下:
function instanceof(object,constructor){
let nextProto = object.__proto__;
while (constructor !== null) {
if (nextProto === constructor.prototype) {
return true;
}
nextProto = nextProto.__proto__;
}
return false;
}
或者
function instanceof(object,constructor){
let nextProto = Object.getPrototypeOf(object);
while (constructor !== null) {
if (nextProto === constructor.prototype) {
return true;
}
nextProto = Object.getPrototypeOf(nextProto);
}
return false;
}
三、 typeof 与 instanceof 区别
- typeof 是用来检查类型的,而 instanceof 是用来验证类型的;
- typeof 返回的是字符串,而 instanceof 返回的是布尔值;
- typeof 检查的是基本类型,而 instanceof 验证的是对象类型;
四、 获取对象类型的具体类型信息
typeof 操作符只能返回操作数的基本类型,对于任何自定义的对象类型, typeof 操作符只会返回 "object" ,而 instanceof 是用来验证对象类型的,不是用来获取对象类型的;若想获取对象的具体类型信息,可通过访问对象的 constructor 属性,该属性会返回该对象的构造函数;若只想获取对象的具体类型的名字,则可通过访问对象的构造函数 constructor 的 name 属性;如下:
获取对象的类型:
object.constructor
获取对象的类型的名字:
object.constructor.name
网友评论