美文网首页
判断一个变量的数据类型

判断一个变量的数据类型

作者: JosephScript | 来源:发表于2021-05-19 15:20 被阅读0次

    1、typeof

    返回的数据类型:
    string number boolean object function undefined symbol

    缺点
    • typeof null 返回 object
    console.log(typeof null) // object
    
    • 引用类型除了 function ,其余都返回 object
    console.log(typeof []) // object
    console.log(typeof new Date()) // object
    console.log(typeof new RegExp()) // object
    // ...
    

    2、toString (推荐)

    Object.prototype.toString.call('') ;   // [object String]
    Object.prototype.toString.call(0) ;    // [object Number]
    Object.prototype.toString.call(true) ; // [object Boolean]
    Object.prototype.toString.call(Symbol()); //[object Symbol]
    Object.prototype.toString.call(undefined) ; // [object Undefined]
    Object.prototype.toString.call(null) ; // [object Null]
    Object.prototype.toString.call({}); // [object Object]
    Object.prototype.toString.call(new Function()) ; // [object Function]
    Object.prototype.toString.call(new Date()) ; // [object Date]
    Object.prototype.toString.call([]) ; // [object Array]
    Object.prototype.toString.call(new RegExp()) ; // [object RegExp]
    Object.prototype.toString.call(new Error()) ; // [object Error]
    Object.prototype.toString.call(document) ; // [object HTMLDocument]
    Object.prototype.toString.call(window) ; //[object global] window 是 global 的引用
    

    如果对 call 不熟悉的同学,可以查阅一下
    JavaScript 中 call()、apply()、bind() 的用法

    https://www.runoob.com/w3cnote/js-call-apply-bind.html

    3、constructor

    console.log(''.constructor === String) // true
    console.log(new Number(0).constructor === Number) // true
    console.log(true.constructor === Boolean) // true
    console.log(new Function().constructor === Function) // true
    console.log(new Date().constructor === Date) // true
    console.log(new Error().constructor === Error) // true
    console.log(new Array().constructor === Array) // true
    // 或者
    console.log([].constructor === Array) // true
    console.log(document.constructor === HTMLDocument) // true
    console.log(window.constructor === Window) // true
    
    缺点
    • undefined 和 null 没有 constructor
    • 如果 prototype 被无意修改或者覆盖, 可能会失去 constructor

    4、instanceof

    大家应该经常看到或者用到:

    [] instanceof Array // true
    

    instance 的作用是检测原型, 如果后者是前者的原型,返回 true 否则返回 false

    之前的文章 https://www.jianshu.com/p/2f91734532f2 也说过,除了 undefined 和 null,任何数据类型向上查找原型的源头都是 Object。

    所以:

    console.log([] instanceof Array) // true
    console.log([] instanceof Object) // true
    

    注意:instanceof 判断不了一个对象实例和某种类型的关系

    相关文章

      网友评论

          本文标题:判断一个变量的数据类型

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