发布于 1年前

JS 检测一个对象是不是纯对象,检测数据类型

// 检测数据类型的方法封装
(function () {
  var getProto = Object.getPrototypeOf; // 获取实列的原型对象。
  var class2type = {};
  var toString = class2type.toString;
  var hasOwn = class2type.hasOwnProperty;
  var fnToString = hasOwn.toString;
  var ObjectFunctionString = fnToString.call(Object);

  [
    "Boolean",
    "Number",
    "String",
    "Symbol",
    "Function",
    "Array",
    "Date",
    "RegExp",
    "Object",
    "Error",
  ].forEach(function (name) {
    class2type["[object " + name + "]"] = name.toLowerCase();
  });

  function toType(obj) {
    if (obj == null) {
      return obj + "";
    }
    return typeof obj === "object" || typeof obj === "function"
      ? class2type[toString.call(obj)] || "object"
      : typeof obj;
  } // 判断是不是存对象。
  function isPlainObject(obj) {
    var proto,
      Ctor,
      type = toType(obj);
    if (!obj || type !== "object") {
      // 如果类型检测不是对象直接返回。-+
      return false;
    }
    proto = getProto(obj); // 获取实列对象的原型对象。
    if (!proto) {
      return true;
    }
    Ctor = hasOwn.call(proto, "constructor") && proto.constructor;
    return (
      typeof Ctor === "function" &&
      fnToString.call(Ctor) === ObjectFunctionString
    );
  }

  window.toType = toType;
  window.isPlainObject = isPlainObject;
})();
js
©2020 edoou.com   京ICP备16001874号-3