(val1, val2, mode, memos)
| 236 | } |
| 237 | |
| 238 | function innerDeepEqual(val1, val2, mode, memos) { |
| 239 | // All identical values are equivalent, as determined by ===. |
| 240 | if (val1 === val2) { |
| 241 | return val1 !== 0 || ObjectIs(val1, val2) || mode === kLoose; |
| 242 | } |
| 243 | |
| 244 | // Check more closely if val1 and val2 are equal. |
| 245 | if (mode !== kLoose) { |
| 246 | if (typeof val1 === 'number') { |
| 247 | // Check for NaN |
| 248 | // eslint-disable-next-line no-self-compare |
| 249 | return val1 !== val1 && val2 !== val2; |
| 250 | } |
| 251 | if (typeof val2 !== 'object' || |
| 252 | typeof val1 !== 'object' || |
| 253 | val1 === null || |
| 254 | val2 === null) { |
| 255 | return false; |
| 256 | } |
| 257 | } else { |
| 258 | if (val1 === null || typeof val1 !== 'object') { |
| 259 | return (val2 === null || typeof val2 !== 'object') && |
| 260 | // Check for NaN |
| 261 | // eslint-disable-next-line eqeqeq, no-self-compare |
| 262 | (val1 == val2 || (val1 !== val1 && val2 !== val2)); |
| 263 | } |
| 264 | if (val2 === null || typeof val2 !== 'object') { |
| 265 | return false; |
| 266 | } |
| 267 | } |
| 268 | return objectComparisonStart(val1, val2, mode, memos); |
| 269 | } |
| 270 | |
| 271 | function hasUnequalTag(val1, val2) { |
| 272 | return val1[SymbolToStringTag] !== val2[SymbolToStringTag]; |
no test coverage detected
searching dependent graphs…