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

2019-03-07  本文已影响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';
}
上一篇下一篇

猜你喜欢

热点阅读