1 |
3a515b92
|
cagy
|
var baseKeys = require('./_baseKeys'),
|
2 |
|
|
getTag = require('./_getTag'),
|
3 |
|
|
isArguments = require('./isArguments'),
|
4 |
|
|
isArray = require('./isArray'),
|
5 |
|
|
isArrayLike = require('./isArrayLike'),
|
6 |
|
|
isBuffer = require('./isBuffer'),
|
7 |
|
|
isPrototype = require('./_isPrototype'),
|
8 |
|
|
isTypedArray = require('./isTypedArray');
|
9 |
|
|
|
10 |
|
|
/** `Object#toString` result references. */
|
11 |
|
|
var mapTag = '[object Map]',
|
12 |
|
|
setTag = '[object Set]';
|
13 |
|
|
|
14 |
|
|
/** Used for built-in method references. */
|
15 |
|
|
var objectProto = Object.prototype;
|
16 |
|
|
|
17 |
|
|
/** Used to check objects for own properties. */
|
18 |
|
|
var hasOwnProperty = objectProto.hasOwnProperty;
|
19 |
|
|
|
20 |
|
|
/**
|
21 |
|
|
* Checks if `value` is an empty object, collection, map, or set.
|
22 |
|
|
*
|
23 |
|
|
* Objects are considered empty if they have no own enumerable string keyed
|
24 |
|
|
* properties.
|
25 |
|
|
*
|
26 |
|
|
* Array-like values such as `arguments` objects, arrays, buffers, strings, or
|
27 |
|
|
* jQuery-like collections are considered empty if they have a `length` of `0`.
|
28 |
|
|
* Similarly, maps and sets are considered empty if they have a `size` of `0`.
|
29 |
|
|
*
|
30 |
|
|
* @static
|
31 |
|
|
* @memberOf _
|
32 |
|
|
* @since 0.1.0
|
33 |
|
|
* @category Lang
|
34 |
|
|
* @param {*} value The value to check.
|
35 |
|
|
* @returns {boolean} Returns `true` if `value` is empty, else `false`.
|
36 |
|
|
* @example
|
37 |
|
|
*
|
38 |
|
|
* _.isEmpty(null);
|
39 |
|
|
* // => true
|
40 |
|
|
*
|
41 |
|
|
* _.isEmpty(true);
|
42 |
|
|
* // => true
|
43 |
|
|
*
|
44 |
|
|
* _.isEmpty(1);
|
45 |
|
|
* // => true
|
46 |
|
|
*
|
47 |
|
|
* _.isEmpty([1, 2, 3]);
|
48 |
|
|
* // => false
|
49 |
|
|
*
|
50 |
|
|
* _.isEmpty({ 'a': 1 });
|
51 |
|
|
* // => false
|
52 |
|
|
*/
|
53 |
|
|
function isEmpty(value) {
|
54 |
|
|
if (value == null) {
|
55 |
|
|
return true;
|
56 |
|
|
}
|
57 |
|
|
if (isArrayLike(value) &&
|
58 |
|
|
(isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||
|
59 |
|
|
isBuffer(value) || isTypedArray(value) || isArguments(value))) {
|
60 |
|
|
return !value.length;
|
61 |
|
|
}
|
62 |
|
|
var tag = getTag(value);
|
63 |
|
|
if (tag == mapTag || tag == setTag) {
|
64 |
|
|
return !value.size;
|
65 |
|
|
}
|
66 |
|
|
if (isPrototype(value)) {
|
67 |
|
|
return !baseKeys(value).length;
|
68 |
|
|
}
|
69 |
|
|
for (var key in value) {
|
70 |
|
|
if (hasOwnProperty.call(value, key)) {
|
71 |
|
|
return false;
|
72 |
|
|
}
|
73 |
|
|
}
|
74 |
|
|
return true;
|
75 |
|
|
}
|
76 |
|
|
|
77 |
|
|
module.exports = isEmpty;
|