JavaScript的类型检查与验证

目录

  • 一、 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

你可能感兴趣的:(JavaScript的类型检查与验证)