mirror of
https://github.com/whoisclebs/lodash.git
synced 2026-02-08 18:17:48 +00:00
Add internal isObjectLike.
This commit is contained in:
49
lodash.js
49
lodash.js
@@ -726,6 +726,17 @@
|
|||||||
return value > -1 && value % 1 == 0 && (length == null || value < length);
|
return value > -1 && value % 1 == 0 && (length == null || value < length);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if `value` is object-like.
|
||||||
|
*
|
||||||
|
* @private
|
||||||
|
* @param {*} value The value to check.
|
||||||
|
* @returns {boolean} Returns `true` if `value` is object-like, else `false`.
|
||||||
|
*/
|
||||||
|
function isObjectLike(value) {
|
||||||
|
return (value && typeof value == 'object') || false;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Used by `trimmedLeftIndex` and `trimmedRightIndex` to determine if a
|
* Used by `trimmedLeftIndex` and `trimmedRightIndex` to determine if a
|
||||||
* character code is whitespace.
|
* character code is whitespace.
|
||||||
@@ -1066,7 +1077,7 @@
|
|||||||
* // => true
|
* // => true
|
||||||
*/
|
*/
|
||||||
function lodash(value) {
|
function lodash(value) {
|
||||||
if (value && typeof value == 'object' && !isArray(value)) {
|
if (isObjectLike(value) && !isArray(value)) {
|
||||||
if (value instanceof LodashWrapper) {
|
if (value instanceof LodashWrapper) {
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
@@ -2032,8 +2043,7 @@
|
|||||||
while (++index < length) {
|
while (++index < length) {
|
||||||
var value = array[index];
|
var value = array[index];
|
||||||
|
|
||||||
if (value && typeof value == 'object' && typeof value.length == 'number'
|
if (isObjectLike(value) && isLength(value.length) && (isArray(value) || isArguments(value))) {
|
||||||
&& (isArray(value) || isArguments(value))) {
|
|
||||||
// Recursively flatten arrays (susceptible to call stack limits).
|
// Recursively flatten arrays (susceptible to call stack limits).
|
||||||
if (isDeep) {
|
if (isDeep) {
|
||||||
value = baseFlatten(value, isDeep, isStrict);
|
value = baseFlatten(value, isDeep, isStrict);
|
||||||
@@ -3343,7 +3353,7 @@
|
|||||||
* @returns {boolean} Returns `true` if `value` is an array-like object, else `false`.
|
* @returns {boolean} Returns `true` if `value` is an array-like object, else `false`.
|
||||||
*/
|
*/
|
||||||
function isArrayLike(value) {
|
function isArrayLike(value) {
|
||||||
return (value && typeof value == 'object' && isLength(value.length) &&
|
return (isObjectLike(value) && isLength(value.length) &&
|
||||||
(arrayLikeClasses[toString.call(value)] || (!lodash.support.argsClass && isArguments(value)))) || false;
|
(arrayLikeClasses[toString.call(value)] || (!lodash.support.argsClass && isArguments(value)))) || false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3571,8 +3581,7 @@
|
|||||||
support = lodash.support;
|
support = lodash.support;
|
||||||
|
|
||||||
// Exit early for non `Object` objects.
|
// Exit early for non `Object` objects.
|
||||||
if (!(value && typeof value == 'object' &&
|
if (!(isObjectLike(value) && toString.call(value) == objectClass && !isHostObject(value)) ||
|
||||||
toString.call(value) == objectClass && !isHostObject(value)) ||
|
|
||||||
(!hasOwnProperty.call(value, 'constructor') &&
|
(!hasOwnProperty.call(value, 'constructor') &&
|
||||||
(Ctor = value.constructor, typeof Ctor == 'function' && !(Ctor instanceof Ctor))) ||
|
(Ctor = value.constructor, typeof Ctor == 'function' && !(Ctor instanceof Ctor))) ||
|
||||||
(!support.argsClass && isArguments(value))) {
|
(!support.argsClass && isArguments(value))) {
|
||||||
@@ -7343,13 +7352,13 @@
|
|||||||
* // => false
|
* // => false
|
||||||
*/
|
*/
|
||||||
function isArguments(value) {
|
function isArguments(value) {
|
||||||
var length = (value && typeof value == 'object') ? value.length : undefined;
|
var length = isObjectLike(value) ? value.length : undefined;
|
||||||
return (isLength(length) && toString.call(value) == argsClass) || false;
|
return (isLength(length) && toString.call(value) == argsClass) || false;
|
||||||
}
|
}
|
||||||
// Fallback for environments without a `[[Class]]` for `arguments` objects.
|
// Fallback for environments without a `[[Class]]` for `arguments` objects.
|
||||||
if (!support.argsClass) {
|
if (!support.argsClass) {
|
||||||
isArguments = function(value) {
|
isArguments = function(value) {
|
||||||
var length = (value && typeof value == 'object') ? value.length : undefined;
|
var length = isObjectLike(value) ? value.length : undefined;
|
||||||
return (isLength(length) && hasOwnProperty.call(value, 'callee') &&
|
return (isLength(length) && hasOwnProperty.call(value, 'callee') &&
|
||||||
!propertyIsEnumerable.call(value, 'callee')) || false;
|
!propertyIsEnumerable.call(value, 'callee')) || false;
|
||||||
};
|
};
|
||||||
@@ -7372,8 +7381,7 @@
|
|||||||
* // => false
|
* // => false
|
||||||
*/
|
*/
|
||||||
var isArray = nativeIsArray || function(value) {
|
var isArray = nativeIsArray || function(value) {
|
||||||
return (value && typeof value == 'object' && typeof value.length == 'number' &&
|
return (isObjectLike(value) && isLength(value.length) && toString.call(value) == arrayClass) || false;
|
||||||
toString.call(value) == arrayClass) || false;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -7393,8 +7401,7 @@
|
|||||||
* // => false
|
* // => false
|
||||||
*/
|
*/
|
||||||
function isBoolean(value) {
|
function isBoolean(value) {
|
||||||
return (value === true || value === false || value && typeof value == 'object' &&
|
return (value === true || value === false || isObjectLike(value) && toString.call(value) == boolClass) || false;
|
||||||
toString.call(value) == boolClass) || false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -7414,7 +7421,7 @@
|
|||||||
* // => false
|
* // => false
|
||||||
*/
|
*/
|
||||||
function isDate(value) {
|
function isDate(value) {
|
||||||
return (value && typeof value == 'object' && toString.call(value) == dateClass) || false;
|
return (isObjectLike(value) && toString.call(value) == dateClass) || false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -7434,13 +7441,13 @@
|
|||||||
* // => false
|
* // => false
|
||||||
*/
|
*/
|
||||||
function isElement(value) {
|
function isElement(value) {
|
||||||
return (value && typeof value == 'object' && value.nodeType === 1 &&
|
return (value && value.nodeType === 1 && isObjectLike(value) &&
|
||||||
(lodash.support.nodeClass ? toString.call(value).indexOf('Element') > -1 : isHostObject(value))) || false;
|
(lodash.support.nodeClass ? toString.call(value).indexOf('Element') > -1 : isHostObject(value))) || false;
|
||||||
}
|
}
|
||||||
// Fallback for environments without DOM support.
|
// Fallback for environments without DOM support.
|
||||||
if (!support.dom) {
|
if (!support.dom) {
|
||||||
isElement = function(value) {
|
isElement = function(value) {
|
||||||
return (value && typeof value == 'object' && value.nodeType === 1 && !isPlainObject(value)) || false;
|
return (value && value.nodeType === 1 && isObjectLike(value) && !isPlainObject(value)) || false;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -7477,7 +7484,7 @@
|
|||||||
}
|
}
|
||||||
var length = value.length;
|
var length = value.length;
|
||||||
if (isLength(length) && (isArray(value) || isString(value) || isArguments(value) ||
|
if (isLength(length) && (isArray(value) || isString(value) || isArguments(value) ||
|
||||||
(typeof value == 'object' && isFunction(value.splice)))) {
|
(isObjectLike(value) && isFunction(value.splice)))) {
|
||||||
return !length;
|
return !length;
|
||||||
}
|
}
|
||||||
return !keys(value).length;
|
return !keys(value).length;
|
||||||
@@ -7547,7 +7554,7 @@
|
|||||||
* // => false
|
* // => false
|
||||||
*/
|
*/
|
||||||
function isError(value) {
|
function isError(value) {
|
||||||
return (value && typeof value == 'object' && toString.call(value) == errorClass) || false;
|
return (isObjectLike(value) && toString.call(value) == errorClass) || false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -7699,7 +7706,7 @@
|
|||||||
if (toString.call(value) == funcClass) {
|
if (toString.call(value) == funcClass) {
|
||||||
return reNative.test(fnToString.call(value));
|
return reNative.test(fnToString.call(value));
|
||||||
}
|
}
|
||||||
return (typeof value == 'object' &&
|
return (isObjectLike(value) &&
|
||||||
(isHostObject(value) ? reNative : reHostCtor).test(value)) || false;
|
(isHostObject(value) ? reNative : reHostCtor).test(value)) || false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -7746,8 +7753,7 @@
|
|||||||
* // => false
|
* // => false
|
||||||
*/
|
*/
|
||||||
function isNumber(value) {
|
function isNumber(value) {
|
||||||
var type = typeof value;
|
return typeof value == 'number' || (isObjectLike(value) && toString.call(value) == numberClass) || false;
|
||||||
return type == 'number' || (value && type == 'object' && toString.call(value) == numberClass) || false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -7830,8 +7836,7 @@
|
|||||||
* // => false
|
* // => false
|
||||||
*/
|
*/
|
||||||
function isString(value) {
|
function isString(value) {
|
||||||
return typeof value == 'string' || (value && typeof value == 'object' &&
|
return typeof value == 'string' || (isObjectLike(value) && toString.call(value) == stringClass) || false;
|
||||||
toString.call(value) == stringClass) || false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user