diff --git a/lodash.src.js b/lodash.src.js index 4d6d9edb2..40ff37888 100644 --- a/lodash.src.js +++ b/lodash.src.js @@ -1829,8 +1829,9 @@ */ function baseAt(collection, props) { var index = -1, - isArr = isArrayLike(collection), - length = collection.length, + isNil = collection == null, + isArr = !isNil && isArrayLike(collection), + length = isArr && collection.length, propsLength = props.length, result = Array(propsLength); @@ -1839,7 +1840,7 @@ if (isArr) { result[index] = isIndex(key, length) ? collection[key] : undefined; } else { - result[index] = collection[key]; + result[index] = isNil ? undefined : collection[key]; } } return result; @@ -2711,7 +2712,7 @@ * @returns {Array} Returns `array`. */ function basePullAt(array, indexes) { - var length = indexes.length; + var length = array ? indexes.length : 0; while (length--) { var index = parseFloat(indexes[length]); if (index != previous && isIndex(index)) { @@ -5476,7 +5477,6 @@ * // => [10, 20] */ var pullAt = restParam(function(array, indexes) { - array || (array = []); indexes = baseFlatten(indexes); var result = baseAt(array, indexes); diff --git a/test/test.js b/test/test.js index a111b9708..a521d33ac 100644 --- a/test/test.js +++ b/test/test.js @@ -1219,11 +1219,11 @@ }); test('should work with a falsey `collection` argument when keys are provided', 1, function() { - var expected = _.map(falsey, _.constant([undefined, undefined])); + var expected = _.map(falsey, _.constant(Array(4))); var actual = _.map(falsey, function(value) { try { - return _.at(value, 0, 1); + return _.at(value, 0, 1, 'pop', 'push'); } catch(e) {} }); @@ -4456,7 +4456,7 @@ var array = [1, 2, 3], actual = _.fill(array); - deepEqual(actual, [undefined, undefined, undefined]); + deepEqual(actual, Array(3)); ok(_.every(actual, function(value, index) { return index in actual; })); }); @@ -12467,7 +12467,7 @@ var values = _.reject(empties, function(value) { return value === 0 || _.isArray(value); - }).concat(-1, 1.1); + }).concat(-1, 1.1, 'pop', 'push'); var expected = _.map(values, _.constant(undefined)), actual = _.pullAt(array, values); @@ -12506,11 +12506,11 @@ }); test('should work with a falsey `array` argument when keys are provided', 1, function() { - var expected = _.map(falsey, _.constant([undefined, undefined])); + var expected = _.map(falsey, _.constant(Array(4))); var actual = _.map(falsey, function(value) { try { - return _.pullAt(value, 0, 1); + return _.pullAt(value, 0, 1, 'pop', 'push'); } catch(e) {} });