@@ -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 ;
@@ -761,9 +757,9 @@ function sparseArrayEquiv(a, b, mode, memos, i) {
761757 if ( keysA . length !== keysB . length ) {
762758 return false ;
763759 }
764- for ( ; i < keysA . length ; i ++ ) {
765- const key = keysA [ i ] ;
766- if ( ! hasOwn ( b , key ) || ! innerDeepEqual ( a [ key ] , b [ key ] , mode , memos ) ) {
760+ for ( ; i < keysB . length ; i ++ ) {
761+ const key = keysB [ i ] ;
762+ if ( ( a [ key ] === undefined && ! hasOwn ( a , key ) ) || ! innerDeepEqual ( a [ key ] , b [ key ] , mode , memos ) ) {
767763 return false ;
768764 }
769765 }
@@ -785,17 +781,14 @@ function objEquiv(a, b, mode, keys2, memos, iterationType) {
785781 return partialArrayEquiv ( a , b , mode , memos ) ;
786782 }
787783 for ( let i = 0 ; i < a . length ; i ++ ) {
788- if ( ! innerDeepEqual ( a [ i ] , b [ i ] , mode , memos ) ) {
789- return false ;
790- }
791- const isSparseA = a [ i ] === undefined && ! hasOwn ( a , i ) ;
792- const isSparseB = b [ i ] === undefined && ! hasOwn ( b , i ) ;
793- if ( isSparseA !== isSparseB ) {
784+ if ( b [ i ] === undefined ) {
785+ if ( ! hasOwn ( b , i ) )
786+ return sparseArrayEquiv ( a , b , mode , memos , i ) ;
787+ if ( a [ i ] !== undefined || ! hasOwn ( a , i ) )
788+ return false ;
789+ } else if ( a [ i ] === undefined || ! innerDeepEqual ( a [ i ] , b [ i ] , mode , memos ) ) {
794790 return false ;
795791 }
796- if ( isSparseA ) {
797- return sparseArrayEquiv ( a , b , mode , memos , i ) ;
798- }
799792 }
800793 } else if ( iterationType === kIsSet ) {
801794 if ( ! setEquiv ( a , b , mode , memos ) ) {
0 commit comments