发布于 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;
})();