UNPKG

6.55 kBJavaScriptView Raw
1"use strict";
2/**
3 * Object 对象扩展
4 */
5/**
6 * 获取对象数据类型
7 *
8 * @param obj 对象变量
9 * @return 对象数据类型
10 */
11Object.type = function (obj) {
12 return typeof obj;
13};
14/**
15 * 获取对象数据类型
16 *
17 * @param obj 对象变量
18 * @return 对象数据类型
19 */
20Object.rawType = function (obj) {
21 return Object.prototype.toString.call(obj).slice(8, -1);
22};
23/**
24 * 判断对象是否为 object 类型
25 *
26 * @param obj 任意对象
27 * @return boolean
28 */
29Object.isObject = function (obj) {
30 return obj !== null && typeof obj === "object";
31};
32/**
33 * 判断对象是否为 object 类型
34 *
35 * @param obj 任意对象
36 * @return boolean
37 */
38Object.isPlainObject = function (obj) {
39 return Object.prototype.toString.call(obj) === "[object Object]";
40};
41/**
42 * 判断对象是否为 Map 类型
43 *
44 * @param obj 任意对象
45 * @return boolean
46 */
47Object.isMap = function (obj) {
48 return Object.prototype.toString.call(obj) === "[object Map]";
49};
50/**
51 * 判断对象是否为 Set 类型
52 *
53 * @param obj 任意对象
54 * @return boolean
55 */
56Object.isSet = function (obj) {
57 return Object.prototype.toString.call(obj) === "[object Set]";
58};
59/**
60 * 判断对象是否为函数
61 *
62 * @param obj 任意对象
63 * @return boolean
64 */
65Object.isFunction = function (obj) {
66 return Object.type(obj) === "function";
67};
68/**
69 * 判断对象是否为 Symbol
70 *
71 * @param obj 任意对象
72 * @return boolean
73 */
74Object.isSymbol = function (obj) {
75 if (typeof obj === "symbol") {
76 return true;
77 }
78 try {
79 var toString_1 = Symbol.prototype.toString;
80 if (typeof obj.valueOf() !== "symbol") {
81 return false;
82 }
83 return /^Symbol\(.*\)$/.test(toString_1.call(obj));
84 }
85 catch (e) {
86 return false;
87 }
88};
89/**
90 * 判断对象是否为 Promise
91 *
92 * @param obj 任意对象
93 * @return boolean
94 */
95Object.isPromise = function (obj) {
96 return Object.isUndefinedOrNull(obj) === false && Object.isFunction(obj.then) && Object.isFunction(obj.catch);
97};
98/**
99 * 判断对象是否为原始类型
100 *
101 * @param obj 任意对象
102 * @return boolean
103 */
104Object.isPrimitive = function (obj) {
105 return Object.isBoolean(obj) || Object.isString(obj) || Object.isNumber(obj);
106};
107/**
108 * 判断对象是否为数组
109 *
110 * @param obj 任意对象
111 * @return boolean
112 */
113Object.isArray = function (obj) {
114 return Array.isArray(obj);
115};
116/**
117 * 判断对象是否为字符串对象
118 *
119 * @param obj 任意对象
120 * @return boolean
121 */
122Object.isString = function (obj) {
123 return Object.type(obj) === "string";
124};
125/**
126 * 判断对象是否为数字对象
127 *
128 * @param obj 任意对象
129 * @return boolean
130 */
131Object.isNumber = function (obj) {
132 return Object.type(obj) === "number";
133};
134/**
135 * 判断对象是否为布尔对象
136 *
137 * @param obj 任意对象
138 * @return boolean
139 */
140Object.isBoolean = function (obj) {
141 return Object.type(obj) === "boolean";
142};
143/**
144 * 判断对象是否为正则对象
145 *
146 * @param obj 任意对象
147 * @return boolean
148 */
149Object.isRegExp = function (obj) {
150 return Object.rawType(obj) === 'RegExp';
151};
152/**
153 * 判断对象是否为文件对象
154 *
155 * @param obj 任意对象
156 * @return boolean
157 */
158Object.isFile = function (obj) {
159 return obj instanceof File;
160};
161/**
162 * 判断对象是否为 windows 对象
163 *
164 * @param obj 任意对象
165 * @return boolean
166 */
167Object.isWindow = function (obj) {
168 return Object.isUndefinedOrNull(obj) && obj == obj.window;
169};
170/**
171 * 判断对象是否为 Element
172 *
173 * @param obj 任意对象
174 * @return boolean
175 */
176Object.isElement = function (obj) {
177 if (Object.isUndefinedOrNull(obj)) {
178 return false;
179 }
180 return !!(obj.nodeType == 1);
181};
182/**
183 * 判断对象是否为事件对象
184 *
185 * @param obj 任意对象
186 * @return boolean
187 */
188Object.isEvent = function (obj) {
189 return obj instanceof Event;
190};
191/**
192 * 判断对象是否为 null 对象
193 *
194 * @param obj 任意对象
195 * @return boolean
196 */
197Object.isNull = function (obj) {
198 return obj === null;
199};
200/**
201 * 判断对象是否为未定义
202 *
203 * @param obj 任意对象
204 * @return boolean
205 */
206Object.isUndefined = function (obj) {
207 return obj === undefined;
208};
209/**
210 * 判断对象是否为未定义或 null
211 *
212 * @param obj 任意对象
213 * @return boolean
214 */
215Object.isUndefinedOrNull = function (obj) {
216 return Object.isUndefined(obj) || Object.isNull(obj);
217};
218/**
219 * 判断两个对象是否相等
220 *
221 * @param obj1 一个对象
222 * @param obj2 用于和 obj1 比较的对象
223 * @return 当两个对象相等时,返回 true;否则,返回 false
224 */
225Object.equals = function (obj1, obj2) {
226 if (obj1 === obj2) {
227 return true;
228 }
229 else if (!(obj1 instanceof Object) || !(obj2 instanceof Object)) {
230 return false;
231 }
232 else if (obj1.constructor !== obj2.constructor) {
233 return false;
234 }
235 else if (Object.isArray(obj1) && Object.isArray(obj2) && obj1.length === obj2.length) {
236 for (var i = 0; i < obj1.length; i++) {
237 if (Object.equals(obj1[i], obj2[i]) === false) {
238 return false;
239 }
240 }
241 }
242 else if (Object.isObject(obj1) && Object.isObject(obj2) && Object.keys(obj1).length === Object.keys(obj2).length) {
243 for (var key in obj1) {
244 if (obj1.hasOwnProperty.call(key)) {
245 if (Object.equals(obj1[key], obj2[key]) === false) {
246 return false;
247 }
248 }
249 }
250 }
251 else {
252 return false;
253 }
254 return true;
255};
256/**
257 * 克隆对象
258 *
259 * @param obj 任意对象
260 * @return 新对象实例
261 */
262Object.clone = function (obj) {
263 if (Object.isString(obj)) {
264 return String(obj);
265 }
266 else if (Object.isArray(obj)) {
267 return Array.prototype.slice.apply(obj);
268 }
269 else if (Object.isPlainObject(obj)) {
270 var result_1 = Object.create(null);
271 Object.keys(obj).forEach(function (key) {
272 result_1[key] = Object.clone(obj[key]);
273 });
274 return result_1;
275 }
276 return obj;
277};
278/**
279 * 克隆对象,但需要删除指定属性
280 *
281 * @param obj 任意对象
282 * @param fields 需要删除的属性
283 * @return 新对象实例
284 */
285Object.omit = function (obj) {
286 var fields = [];
287 for (var _i = 1; _i < arguments.length; _i++) {
288 fields[_i - 1] = arguments[_i];
289 }
290 var result = Object.clone(obj);
291 for (var i = 0; i < fields.length; i++) {
292 var key = fields[i];
293 delete result[key];
294 }
295 return result;
296};
297//# sourceMappingURL=object.js.map
\No newline at end of file