아니 자바스크립트야 이게 외않되? 😡

Donghun Seol·2022년 9월 21일
0

스프린트 과제로 _.every를 구현하고 있었다..

_.every = function (arr, iteratee) {
  return _.reduce(arr, (acc, cur) => iteratee(cur) && acc, true);
};

iteratee가 undefined 나 0이 되면 acc가 undefined, 0으로 되어버리는 경우가 발생해서.....디버깅 해봤다.

아니 버그가 생겨서 살펴보다가 알게 된 사실

이게 외 false가 않되니?😡😡😡

true && undefined // undefined
true && 0 // 0

undefined && true // undefined
0 && true // undefined

NaN === NaN // false


//convert falshy value to boolean
!!undefined // false
!!0 //false

나는 분노하다가...
내가 자바스크립트를 대체할 언어를 만들 능력이 없다는걸 깨닫고 차분히 이유를 찾아봤다.
stackOverflow 관련글
&&연산자는 내부적으로 표현식의 값들을 불리언으로 변화시킨 뒤 비교를 수행한다. 하지만 &&연산자의 결과값은 실제 불리언으로 변화되기 전의 최초 값이 그대로 반환되는 것.
이 때문에 이런 버그가 발생한 것.

빡침을😠 깨달음으로... 🤩

결국 !!를 활용해서 예쁘게 구현~

_.every = function (arr, iteratee) {
  return _.reduce(arr, (acc, cur) => !!iteratee(cur) && acc, true);
};
profile
I'm going from failure to failure without losing enthusiasm

0개의 댓글