美文网首页
Javascript 类型判断

Javascript 类型判断

作者: 菜鸟很浮夸 | 来源:发表于2019-10-11 19:10 被阅读0次

    基本类型

    typeof

    一般使用 typeof 操作符,可以判断出:

    • boolean
    • number
    • string
    • undefined
    • symbol

    和引用类型:

    • function

    特别的是,typeof null 结果是 object。
    所以,用 === nulltypeof 就可以判断出所有基本类型。

    内置类型

    Javascript 内置类型有:

    • Object
    • Array
    • Date
    • RegExp
    • Function

    和基本包装类型:

    • Boolean
    • Number
    • String

    对于这些类型,通常使用下面方法判断:

     Object.prototype.toString.call()
    

    如:

    var _toString = Object.prototype.toString;
    
    // 判断是否是简单对象
    function isPlainObject (obj) {
      return _toString.call(obj) === '[object Object]'
    }
    
    // 判断是否是正则表达式对象
    function isRegExp (v) {
      return _toString.call(v) === '[object RegExp]'
    }
    

    另外

    • 类似 new String(),这种使用 new 基本包装类型得到的 字符串对象,使用 typeof 运算得到的结果是 object。
    • 对于 Array 类型,普遍使用 Array.isArray() 来判断
    • Function 类型,可以使用 typeof 判断

    用户自定义类型

    用户自定类型判断,一般使用 instanceof 运算符。
    如:

    class A {}
    var a = new A()
    var arr = []
    
    console.log(a instanceof A)  // true
    console.log(arr instanceof Array) // true
    

    上面对于 Array 内置类型使用 instanceof 效果也很好。但一般不这么干,因为 instanceof 相对上面介绍的方法,不怎么靠谱:

    但是

    instanceof 的定义是:

    object instanceof constructor
    instanceof 运算符用来检测 constructor.prototype是否存在于参数 object 的原型链上。

    也就是说,手动改变对象的原型链或修改构造函数的原型对象,instanceof 就不灵了。

    class A {}
    
    var a = new A()
    var arr = []
    
    console.log(a instanceof A)  // true
    console.log(arr instanceof Array)  // true
    
    // 修改原型链
    a.__proto__ = null
    Object.setPrototypeOf(arr, null)
    
    console.log(a instanceof A)  // false
    console.log(arr instanceof Array)  // false
    

    相关文章

      网友评论

          本文标题:Javascript 类型判断

          本文链接:https://www.haomeiwen.com/subject/vxpxmctx.html