1
|
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;
|