美文网首页
[JavaScript基础]类型检测(ES5)

[JavaScript基础]类型检测(ES5)

作者: 向布谷鸟说早安 | 来源:发表于2019-03-07 22:35 被阅读5次

    // 数据类型(6种)
    number,boolean,string,null,undefined,object
    1.typeof非引用类型的判断(7种)
    string,object,number,boolean,function,undefined,typeerror
    // typeof a;(typeerror)
    // let a;

    1. instanceof引用类型的判断
      缺点:
      2.1 不能区分跨frame的Array类型
      2.2 不能检测某个对象是原生类型还是某个库定义的类型

    2. Object.prototype.toString.call()
      3.1 可以跨frame
      3.2 可以区分原生对象和非原生对象

    3. constructor引用类型的判断

    应用:
    判断类型:

            let class2type = {};
            'Boolean Number String Function Array Date RegExp Object Error'.split(' ')
                .map((item, index) => {
                    class2type['[object ' + item + ']'] = item.toLowerCase();
                });
            
            function type(obj) {
               if(obj == null) {
                   return obj + '';
               }
               return typeof obj === 'object' || typeof obj === 'function'?
               class2type[Object.prototype.toString.call(obj)] || 'object' : typeof obj;
            }
    
    

    判断某个对象是否是window:

      function isWindow(obj)   
      { return obj != null && obj === obj.window }
    

    判断某个对象是否是普通对象:

    function isPlainObject(obj) {
      return obj && obj.window !== obj && 
        Object.getPrototypeOf(obj) === Object.prototype;
     }
    

    判断某个对象是否是空对象:

    function isEmpty(obj) {
      let name;
        for(name in obj) {
          return false
        }
        return true;
    }
    

    判断某个对象是否是类数组:

    
    

    判断某个对象是否是数组:

    function isArray(obj) {
      return type(obj) === 'array';
    }
    

    相关文章

      网友评论

          本文标题:[JavaScript基础]类型检测(ES5)

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