From 0a2dd2a3302fe85d3cff0a8387bf179c4d66d507 Mon Sep 17 00:00:00 2001 From: John-David Dalton Date: Sat, 15 Mar 2014 00:33:55 -0700 Subject: [PATCH] Avoid returning `assignDefaults` if no `object` is provided to `_.defaults`. --- lodash.js | 11 +++++++---- test/test.js | 4 ++++ 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/lodash.js b/lodash.js index 2d9e93281..28bbbf374 100644 --- a/lodash.js +++ b/lodash.js @@ -5440,11 +5440,11 @@ * // => { 'name': 'barney', 'employer': 'slate' } */ function assign(object, source, guard) { - if (!object) { + var args = arguments; + if (!object || args.length < 2) { return object; } - var args = arguments, - argsIndex = 0, + var argsIndex = 0, argsLength = args.length, type = typeof guard; @@ -5636,7 +5636,10 @@ * _.defaults({ 'name': 'barney' }, { 'name': 'fred', 'employer': 'slate' }); * // => { 'name': 'barney', 'employer': 'slate' } */ - function defaults() { + function defaults(object) { + if (!object || arguments.length < 2) { + return object; + } var args = slice(arguments); args.push(assignDefaults); return assign.apply(null, args); diff --git a/test/test.js b/test/test.js index 005112327..bd4a4d625 100644 --- a/test/test.js +++ b/test/test.js @@ -2983,6 +2983,10 @@ _.forEach(['assign', 'defaults', 'merge'], function(methodName) { var func = _[methodName]; + test('`_.' + methodName + '` should return `undefined` when no destination object is provided', 1, function() { + strictEqual(func(), undefined); + }); + test('`_.' + methodName + '` should return the existing wrapper when chaining', 1, function() { if (!isNpm) { var wrapper = _({ 'a': 1 });