mirror of
https://github.com/whoisclebs/lodash.git
synced 2026-02-05 01:17:50 +00:00
Align _.keys with ES6 and coerce primitives to objects.
This commit is contained in:
17
dist/lodash.js
vendored
17
dist/lodash.js
vendored
@@ -6799,14 +6799,16 @@
|
||||
* // => ['x', 'y'] (property order is not guaranteed across environments)
|
||||
*/
|
||||
var keys = !nativeKeys ? shimKeys : function(object) {
|
||||
var Ctor = object && object.constructor,
|
||||
length = object ? object.length : 0;
|
||||
object = Object(object);
|
||||
|
||||
var Ctor = object.constructor,
|
||||
length = object.length;
|
||||
|
||||
if ((Ctor && object === Ctor.prototype) ||
|
||||
(typeof length == 'number' && length > 0)) {
|
||||
return shimKeys(object);
|
||||
}
|
||||
return isObject(object) ? nativeKeys(object) : [];
|
||||
return nativeKeys(object);
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -6830,9 +6832,8 @@
|
||||
* // => ['x', 'y', 'z'] (property order is not guaranteed across environments)
|
||||
*/
|
||||
function keysIn(object) {
|
||||
if (!isObject(object)) {
|
||||
return [];
|
||||
}
|
||||
object = Object(object);
|
||||
|
||||
var length = object.length;
|
||||
length = (typeof length == 'number' && length > 0 &&
|
||||
(isArray(object) || (support.nonEnumArgs && isArguments(object))) && length) >>> 0;
|
||||
@@ -8461,10 +8462,8 @@
|
||||
lodash.map = map;
|
||||
lodash.mapValues = mapValues;
|
||||
lodash.matches = matches;
|
||||
lodash.max = max;
|
||||
lodash.memoize = memoize;
|
||||
lodash.merge = merge;
|
||||
lodash.min = min;
|
||||
lodash.mixin = mixin;
|
||||
lodash.negate = negate;
|
||||
lodash.omit = omit;
|
||||
@@ -8559,6 +8558,8 @@
|
||||
lodash.isUndefined = isUndefined;
|
||||
lodash.kebabCase = kebabCase;
|
||||
lodash.lastIndexOf = lastIndexOf;
|
||||
lodash.max = max;
|
||||
lodash.min = min;
|
||||
lodash.noConflict = noConflict;
|
||||
lodash.noop = noop;
|
||||
lodash.now = now;
|
||||
|
||||
13
lodash.js
13
lodash.js
@@ -6990,15 +6990,17 @@
|
||||
* // => ['x', 'y'] (property order is not guaranteed across environments)
|
||||
*/
|
||||
var keys = !nativeKeys ? shimKeys : function(object) {
|
||||
var Ctor = object && object.constructor,
|
||||
length = object ? object.length : 0;
|
||||
object = Object(object);
|
||||
|
||||
var Ctor = object.constructor,
|
||||
length = object.length;
|
||||
|
||||
if ((Ctor && object === Ctor.prototype) ||
|
||||
(typeof length == 'number' && length > 0) ||
|
||||
(support.enumPrototypes && typeof object == 'function')) {
|
||||
return shimKeys(object);
|
||||
}
|
||||
return isObject(object) ? nativeKeys(object) : [];
|
||||
return nativeKeys(object);
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -7022,9 +7024,8 @@
|
||||
* // => ['x', 'y', 'z'] (property order is not guaranteed across environments)
|
||||
*/
|
||||
function keysIn(object) {
|
||||
if (!isObject(object)) {
|
||||
return [];
|
||||
}
|
||||
object = Object(object);
|
||||
|
||||
var length = object.length;
|
||||
length = (typeof length == 'number' && length > 0 &&
|
||||
(isArray(object) || (support.nonEnumStrings && isString(object)) ||
|
||||
|
||||
11
test/test.js
11
test/test.js
@@ -5721,6 +5721,11 @@
|
||||
deepEqual(actual.sort(), ['a', 'b']);
|
||||
});
|
||||
|
||||
test('`_.' + methodName + '` should coerce primitives to objects', 1, function() {
|
||||
var actual = func('abc');
|
||||
deepEqual(actual.sort(), ['0', '1', '2']);
|
||||
});
|
||||
|
||||
test('`_.' + methodName + '` should treat sparse arrays as dense', 1, function() {
|
||||
var array = [1];
|
||||
array[2] = 3;
|
||||
@@ -5729,7 +5734,7 @@
|
||||
deepEqual(actual.sort(), ['0', '1', '2']);
|
||||
});
|
||||
|
||||
test('`_.' + methodName + '` should custom properties on arrays', 1, function() {
|
||||
test('`_.' + methodName + '` should return keys for custom properties on arrays', 1, function() {
|
||||
var array = [1];
|
||||
array.a = 1;
|
||||
|
||||
@@ -5755,7 +5760,7 @@
|
||||
}
|
||||
});
|
||||
|
||||
test('`_.' + methodName + '` should custom properties on `arguments` objects', 1, function() {
|
||||
test('`_.' + methodName + '` should return keys for custom properties on `arguments` objects', 1, function() {
|
||||
if (!(isPhantom || isStrict)) {
|
||||
args.a = 1;
|
||||
var actual = func(args);
|
||||
@@ -5785,7 +5790,7 @@
|
||||
deepEqual(actual.sort(), ['0', '1', '2']);
|
||||
});
|
||||
|
||||
test('`_.' + methodName + '` should custom properties on string objects', 1, function() {
|
||||
test('`_.' + methodName + '` should return keys for custom properties on string objects', 1, function() {
|
||||
var object = Object('a');
|
||||
object.a = 1;
|
||||
|
||||
|
||||
@@ -110,7 +110,8 @@
|
||||
'Died on test #63'
|
||||
],
|
||||
'keys': [
|
||||
'is not fooled by sparse arrays; see issue #95'
|
||||
'is not fooled by sparse arrays; see issue #95',
|
||||
'[]'
|
||||
],
|
||||
'omit': [
|
||||
'can accept a predicate'
|
||||
|
||||
Reference in New Issue
Block a user