@@ -196,11 +196,9 @@ function innerDeepEqual(val1, val2, mode, memos) {
196
196
}
197
197
} else {
198
198
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 ) ) ) ;
204
202
}
205
203
if ( val2 === null || typeof val2 !== 'object' ) {
206
204
return false ;
@@ -384,9 +382,7 @@ function keyCheck(val1, val2, mode, memos, iterationType, keys2) {
384
382
}
385
383
} else if ( keys2 . length !== ObjectKeys ( val1 ) . length ) {
386
384
return false ;
387
- }
388
-
389
- if ( mode === kStrict ) {
385
+ } else if ( mode === kStrict ) {
390
386
const symbolKeysA = getOwnSymbols ( val1 ) ;
391
387
if ( symbolKeysA . length !== 0 ) {
392
388
let count = 0 ;
@@ -761,9 +757,9 @@ function sparseArrayEquiv(a, b, mode, memos, i) {
761
757
if ( keysA . length !== keysB . length ) {
762
758
return false ;
763
759
}
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 ) ) {
767
763
return false ;
768
764
}
769
765
}
@@ -785,17 +781,14 @@ function objEquiv(a, b, mode, keys2, memos, iterationType) {
785
781
return partialArrayEquiv ( a , b , mode , memos ) ;
786
782
}
787
783
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 ) ) {
794
790
return false ;
795
791
}
796
- if ( isSparseA ) {
797
- return sparseArrayEquiv ( a , b , mode , memos , i ) ;
798
- }
799
792
}
800
793
} else if ( iterationType === kIsSet ) {
801
794
if ( ! setEquiv ( a , b , mode , memos ) ) {
0 commit comments