@buession/prototype
Version:
A native object extension framework for Javascript.
297 lines • 6.55 kB
JavaScript
/**
* Object 对象扩展
*/
/**
* 获取对象数据类型
*
* @param obj 对象变量
* @return 对象数据类型
*/
Object.type = function (obj) {
return typeof obj;
};
/**
* 获取对象数据类型
*
* @param obj 对象变量
* @return 对象数据类型
*/
Object.rawType = function (obj) {
return Object.prototype.toString.call(obj).slice(8, -1);
};
/**
* 判断对象是否为 object 类型
*
* @param obj 任意对象
* @return boolean
*/
Object.isObject = function (obj) {
return obj !== null && typeof obj === "object";
};
/**
* 判断对象是否为 object 类型
*
* @param obj 任意对象
* @return boolean
*/
Object.isPlainObject = function (obj) {
return Object.prototype.toString.call(obj) === "[object Object]";
};
/**
* 判断对象是否为 Map 类型
*
* @param obj 任意对象
* @return boolean
*/
Object.isMap = function (obj) {
return Object.prototype.toString.call(obj) === "[object Map]";
};
/**
* 判断对象是否为 Set 类型
*
* @param obj 任意对象
* @return boolean
*/
Object.isSet = function (obj) {
return Object.prototype.toString.call(obj) === "[object Set]";
};
/**
* 判断对象是否为函数
*
* @param obj 任意对象
* @return boolean
*/
Object.isFunction = function (obj) {
return Object.type(obj) === "function";
};
/**
* 判断对象是否为 Symbol
*
* @param obj 任意对象
* @return boolean
*/
Object.isSymbol = function (obj) {
if (typeof obj === "symbol") {
return true;
}
try {
var toString_1 = Symbol.prototype.toString;
if (typeof obj.valueOf() !== "symbol") {
return false;
}
return /^Symbol\(.*\)$/.test(toString_1.call(obj));
}
catch (e) {
return false;
}
};
/**
* 判断对象是否为 Promise
*
* @param obj 任意对象
* @return boolean
*/
Object.isPromise = function (obj) {
return Object.isUndefinedOrNull(obj) === false && Object.isFunction(obj.then) && Object.isFunction(obj.catch);
};
/**
* 判断对象是否为原始类型
*
* @param obj 任意对象
* @return boolean
*/
Object.isPrimitive = function (obj) {
return Object.isBoolean(obj) || Object.isString(obj) || Object.isNumber(obj);
};
/**
* 判断对象是否为数组
*
* @param obj 任意对象
* @return boolean
*/
Object.isArray = function (obj) {
return Array.isArray(obj);
};
/**
* 判断对象是否为字符串对象
*
* @param obj 任意对象
* @return boolean
*/
Object.isString = function (obj) {
return Object.type(obj) === "string";
};
/**
* 判断对象是否为数字对象
*
* @param obj 任意对象
* @return boolean
*/
Object.isNumber = function (obj) {
return Object.type(obj) === "number";
};
/**
* 判断对象是否为布尔对象
*
* @param obj 任意对象
* @return boolean
*/
Object.isBoolean = function (obj) {
return Object.type(obj) === "boolean";
};
/**
* 判断对象是否为正则对象
*
* @param obj 任意对象
* @return boolean
*/
Object.isRegExp = function (obj) {
return Object.rawType(obj) === 'RegExp';
};
/**
* 判断对象是否为文件对象
*
* @param obj 任意对象
* @return boolean
*/
Object.isFile = function (obj) {
return obj instanceof File;
};
/**
* 判断对象是否为 windows 对象
*
* @param obj 任意对象
* @return boolean
*/
Object.isWindow = function (obj) {
return Object.isUndefinedOrNull(obj) && obj == obj.window;
};
/**
* 判断对象是否为 Element
*
* @param obj 任意对象
* @return boolean
*/
Object.isElement = function (obj) {
if (Object.isUndefinedOrNull(obj)) {
return false;
}
return !!(obj.nodeType == 1);
};
/**
* 判断对象是否为事件对象
*
* @param obj 任意对象
* @return boolean
*/
Object.isEvent = function (obj) {
return obj instanceof Event;
};
/**
* 判断对象是否为 null 对象
*
* @param obj 任意对象
* @return boolean
*/
Object.isNull = function (obj) {
return obj === null;
};
/**
* 判断对象是否为未定义
*
* @param obj 任意对象
* @return boolean
*/
Object.isUndefined = function (obj) {
return obj === undefined;
};
/**
* 判断对象是否为未定义或 null
*
* @param obj 任意对象
* @return boolean
*/
Object.isUndefinedOrNull = function (obj) {
return Object.isUndefined(obj) || Object.isNull(obj);
};
/**
* 判断两个对象是否相等
*
* @param obj1 一个对象
* @param obj2 用于和 obj1 比较的对象
* @return 当两个对象相等时,返回 true;否则,返回 false
*/
Object.equals = function (obj1, obj2) {
if (obj1 === obj2) {
return true;
}
else if (!(obj1 instanceof Object) || !(obj2 instanceof Object)) {
return false;
}
else if (obj1.constructor !== obj2.constructor) {
return false;
}
else if (Object.isArray(obj1) && Object.isArray(obj2) && obj1.length === obj2.length) {
for (var i = 0; i < obj1.length; i++) {
if (Object.equals(obj1[i], obj2[i]) === false) {
return false;
}
}
}
else if (Object.isObject(obj1) && Object.isObject(obj2) && Object.keys(obj1).length === Object.keys(obj2).length) {
for (var key in obj1) {
if (obj1.hasOwnProperty.call(key)) {
if (Object.equals(obj1[key], obj2[key]) === false) {
return false;
}
}
}
}
else {
return false;
}
return true;
};
/**
* 克隆对象
*
* @param obj 任意对象
* @return 新对象实例
*/
Object.clone = function (obj) {
if (Object.isString(obj)) {
return String(obj);
}
else if (Object.isArray(obj)) {
return Array.prototype.slice.apply(obj);
}
else if (Object.isPlainObject(obj)) {
var result_1 = Object.create(null);
Object.keys(obj).forEach(function (key) {
result_1[key] = Object.clone(obj[key]);
});
return result_1;
}
return obj;
};
/**
* 克隆对象,但需要删除指定属性
*
* @param obj 任意对象
* @param fields 需要删除的属性
* @return 新对象实例
*/
Object.omit = function (obj) {
var fields = [];
for (var _i = 1; _i < arguments.length; _i++) {
fields[_i - 1] = arguments[_i];
}
var result = Object.clone(obj);
for (var i = 0; i < fields.length; i++) {
var key = fields[i];
delete result[key];
}
return result;
};
//# sourceMappingURL=object.js.map
;