[JS, TS] self-compare 자기자신비교(?)

리액트에서 불변성에 대해 알아보다가,

shallowEqual 코드를 살펴보고 있었다.

https://github.com/facebook/react/blob/v16.8.6/packages/shared/shallowEqual.js


그중 is라는 함수를 좀더 살펴봤는데

https://github.com/facebook/react/blob/v16.8.6/packages/shared/objectIs.js


그중에 눈에 띄는 코드가 있었다.

1
(x !== x && y !== y) // eslint-disable-line no-self-compare
cs


x !== x 라는 코드는 항상 false라고 생각했기 때문에 

if 조건절안에서 의미없는 코드라고 생각했다.

사실 거의 대부분 false이다.


https://eslint.org/docs/latest/rules/no-self-compare

위 docs를 살펴보니,

값이 NaN일 경우엔

1
2
3
let a = NaN
=== a // false
!== a // true
cs

이렇다고 한다.


하지만 가독성을 위해선 아래와 같이 더 좋은방법이라고 한다.

1
typeof x === 'number' && isNaN(x)
cs


No comments:

Post a Comment