@@ -196,11 +196,9 @@ function innerDeepEqual(val1, val2, mode, memos) {
196196 }
197197 } else {
198198 if ( val1 === null || typeof val1 !== 'object' ) {
199- if ( val2 === null || typeof val2 !== 'object' ) {
200- // eslint-disable-next-line eqeqeq
201- return val1 == val2 || ( NumberIsNaN ( val1 ) && NumberIsNaN ( val2 ) ) ;
202- }
203- return false ;
199+ return ( val2 === null || typeof val2 !== 'object' ) &&
200+ // eslint-disable-next-line eqeqeq
201+ ( val1 == val2 || ( NumberIsNaN ( val1 ) && NumberIsNaN ( val2 ) ) ) ;
204202 }
205203 if ( val2 === null || typeof val2 !== 'object' ) {
206204 return false ;
@@ -384,9 +382,7 @@ function keyCheck(val1, val2, mode, memos, iterationType, keys2) {
384382 }
385383 } else if ( keys2 . length !== ObjectKeys ( val1 ) . length ) {
386384 return false ;
387- }
388-
389- if ( mode === kStrict ) {
385+ } else if ( mode === kStrict ) {
390386 const symbolKeysA = getOwnSymbols ( val1 ) ;
391387 if ( symbolKeysA . length !== 0 ) {
392388 let count = 0 ;
@@ -758,9 +754,9 @@ function sparseArrayEquiv(a, b, mode, memos, i) {
758754 if ( keysA . length !== keysB . length ) {
759755 return false ;
760756 }
761- for ( ; i < keysA . length ; i ++ ) {
762- const key = keysA [ i ] ;
763- if ( ! hasOwn ( b , key ) || ! innerDeepEqual ( a [ key ] , b [ key ] , mode , memos ) ) {
757+ for ( ; i < keysB . length ; i ++ ) {
758+ const key = keysB [ i ] ;
759+ if ( ( a [ key ] === undefined && ! hasOwn ( a , key ) ) || ! innerDeepEqual ( a [ key ] , b [ key ] , mode , memos ) ) {
764760 return false ;
765761 }
766762 }
@@ -782,17 +778,14 @@ function objEquiv(a, b, mode, keys2, memos, iterationType) {
782778 return partialArrayEquiv ( a , b , mode , memos ) ;
783779 }
784780 for ( let i = 0 ; i < a . length ; i ++ ) {
785- if ( ! innerDeepEqual ( a [ i ] , b [ i ] , mode , memos ) ) {
786- return false ;
787- }
788- const isSparseA = a [ i ] === undefined && ! hasOwn ( a , i ) ;
789- const isSparseB = b [ i ] === undefined && ! hasOwn ( b , i ) ;
790- if ( isSparseA !== isSparseB ) {
781+ if ( b [ i ] === undefined ) {
782+ if ( ! hasOwn ( b , i ) )
783+ return sparseArrayEquiv ( a , b , mode , memos , i ) ;
784+ if ( a [ i ] !== undefined || ! hasOwn ( a , i ) )
785+ return false ;
786+ } else if ( a [ i ] === undefined || ! innerDeepEqual ( a [ i ] , b [ i ] , mode , memos ) ) {
791787 return false ;
792788 }
793- if ( isSparseA ) {
794- return sparseArrayEquiv ( a , b , mode , memos , i ) ;
795- }
796789 }
797790 } else if ( iterationType === kIsSet ) {
798791 if ( ! setEquiv ( a , b , mode , memos ) ) {
0 commit comments