리액트에서 불변성에 대해 알아보다가,
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 === a // false a !== a // true | cs |
이렇다고 한다.
하지만 가독성을 위해선 아래와 같이 더 좋은방법이라고 한다.
1 | typeof x === 'number' && isNaN(x) | cs |
No comments:
Post a Comment