Ensure _.isEqual works with objects created by Object.create(null).

This commit is contained in:
John-David Dalton
2013-10-17 22:53:40 -07:00
parent 0b4fe85b33
commit 31e86a36f8
8 changed files with 124 additions and 94 deletions

View File

@@ -505,10 +505,10 @@
var ctorA = a.constructor,
ctorB = b.constructor;
if (ctorA != ctorB && !(
isFunction(ctorA) && ctorA instanceof ctorA &&
isFunction(ctorB) && ctorB instanceof ctorB
)) {
if (ctorA != ctorB &&
!(isFunction(ctorA) && ctorA instanceof ctorA && isFunction(ctorB) && ctorB instanceof ctorB) &&
(!nativeCreate || ('constructor' in a && 'constructor' in b))
) {
return false;
}
}
@@ -922,15 +922,15 @@
* @returns {Object} Returns the destination object.
* @example
*
* _.assign({ 'name': 'fred' }, { 'age': 40 });
* // => { 'name': 'fred', 'age': 40 }
* _.assign({ 'name': 'fred' }, { 'employer': 'slate' });
* // => { 'name': 'fred', 'employer': 'slate' }
*
* var defaults = _.partialRight(_.assign, function(a, b) {
* return typeof a == 'undefined' ? b : a;
* });
*
* var person = { 'name': 'barney' };
* defaults(person, { 'name': 'fred', 'employer': 'slate' });
* var object = { 'name': 'barney' };
* defaults(object, { 'name': 'fred', 'employer': 'slate' });
* // => { 'name': 'barney', 'employer': 'slate' }
*/
function assign(object) {
@@ -1010,8 +1010,8 @@
* @returns {Object} Returns the destination object.
* @example
*
* var person = { 'name': 'barney' };
* _.defaults(person, { 'name': 'fred', 'employer': 'slate' });
* var object = { 'name': 'barney' };
* _.defaults(object, { 'name': 'fred', 'employer': 'slate' });
* // => { 'name': 'barney', 'employer': 'slate' }
*/
function defaults(object) {
@@ -1277,13 +1277,13 @@
* @returns {boolean} Returns `true` if the values are equivalent, else `false`.
* @example
*
* var fred = { 'name': 'fred', 'age': 40 };
* var copy = { 'name': 'fred', 'age': 40 };
* var object = { 'name': 'fred' };
* var copy = { 'name': 'fred' };
*
* fred == copy;
* object == copy;
* // => false
*
* _.isEqual(fred, copy);
* _.isEqual(object, copy);
* // => true
*
* var words = ['hello', 'goodbye'];
@@ -1947,6 +1947,10 @@
* (value, index|key, collection). Callbacks may exit iteration early by
* explicitly returning `false`.
*
* Note: As with other "Collections" methods, objects with a `length` property
* are iterated like arrays. To avoid this behavior `_.forIn` or `_.forOwn`
* may be used for object iteration.
*
* @static
* @memberOf _
* @alias each
@@ -4107,8 +4111,8 @@
* @returns {*} Returns `value`.
* @example
*
* var fred = { 'name': 'fred' };
* fred === _.identity(fred);
* var object = { 'name': 'fred' };
* object === _.identity(object);
* // => true
*/
function identity(value) {