@@ -194,11 +194,9 @@ function innerDeepEqual(val1, val2, mode, memos) {
194194 }
195195 } else {
196196 if ( val1 === null || typeof val1 !== 'object' ) {
197- if ( val2 === null || typeof val2 !== 'object' ) {
198- // eslint-disable-next-line eqeqeq
199- return val1 == val2 || ( NumberIsNaN ( val1 ) && NumberIsNaN ( val2 ) ) ;
200- }
201- return false ;
197+ return ( val2 === null || typeof val2 !== 'object' ) &&
198+ // eslint-disable-next-line eqeqeq
199+ ( val1 == val2 || ( NumberIsNaN ( val1 ) && NumberIsNaN ( val2 ) ) ) ;
202200 }
203201 if ( val2 === null || typeof val2 !== 'object' ) {
204202 return false ;
@@ -380,9 +378,7 @@ function keyCheck(val1, val2, mode, memos, iterationType, keys2) {
380378 }
381379 } else if ( keys2 . length !== ObjectKeys ( val1 ) . length ) {
382380 return false ;
383- }
384-
385- if ( mode === kStrict ) {
381+ } else if ( mode === kStrict ) {
386382 const symbolKeysA = getOwnSymbols ( val1 ) ;
387383 if ( symbolKeysA . length !== 0 ) {
388384 let count = 0 ;
@@ -754,9 +750,9 @@ function sparseArrayEquiv(a, b, mode, memos, i) {
754750 if ( keysA . length !== keysB . length ) {
755751 return false ;
756752 }
757- for ( ; i < keysA . length ; i ++ ) {
758- const key = keysA [ i ] ;
759- if ( ! hasOwn ( b , key ) || ! innerDeepEqual ( a [ key ] , b [ key ] , mode , memos ) ) {
753+ for ( ; i < keysB . length ; i ++ ) {
754+ const key = keysB [ i ] ;
755+ if ( ( a [ key ] === undefined && ! hasOwn ( a , key ) ) || ! innerDeepEqual ( a [ key ] , b [ key ] , mode , memos ) ) {
760756 return false ;
761757 }
762758 }
@@ -778,17 +774,14 @@ function objEquiv(a, b, mode, keys2, memos, iterationType) {
778774 return partialArrayEquiv ( a , b , mode , memos ) ;
779775 }
780776 for ( let i = 0 ; i < a . length ; i ++ ) {
781- if ( ! innerDeepEqual ( a [ i ] , b [ i ] , mode , memos ) ) {
782- return false ;
783- }
784- const isSparseA = a [ i ] === undefined && ! hasOwn ( a , i ) ;
785- const isSparseB = b [ i ] === undefined && ! hasOwn ( b , i ) ;
786- if ( isSparseA !== isSparseB ) {
777+ if ( b [ i ] === undefined ) {
778+ if ( ! hasOwn ( b , i ) )
779+ return sparseArrayEquiv ( a , b , mode , memos , i ) ;
780+ if ( a [ i ] !== undefined || ! hasOwn ( a , i ) )
781+ return false ;
782+ } else if ( a [ i ] === undefined || ! innerDeepEqual ( a [ i ] , b [ i ] , mode , memos ) ) {
787783 return false ;
788784 }
789- if ( isSparseA ) {
790- return sparseArrayEquiv ( a , b , mode , memos , i ) ;
791- }
792785 }
793786 } else if ( iterationType === kIsSet ) {
794787 if ( ! setEquiv ( a , b , mode , memos ) ) {
0 commit comments