[221121] 알고리즘 문제풀이 TIL

뜨개발자·2022년 11월 21일
0

TIL

목록 보기
10/75

비밀지도

https://school.programmers.co.kr/learn/courses/30/lessons/17681

문제 자체가 그렇게 어렵지 않았어서 코드는 금방 작성했다.
그런데, 출력 결과가 항상 #을 붙여져 있었다.

if(a1[j] || a2[j] 1) set += '#';

콘솔에 a1[j], a2[j]를 출력해보면, 확실히 둘 다 0일때에도 해당 조건문이 실행됐다.
어째서인지 한참 고민했는데 바보였었다ㅠㅠㅠ

불 자료형으로 변환될 때에는 0, NaN, ' ', " " (공백문자열), null, undefined의 5가지만 false가 되는데, 숫자 0처럼 "0"도 false가 나오길 기대했다.

console.log("0" == true);  //false

위를 실행했을 때, 콘솔에 false가 찍혀서 더 헷갈렸었다.
false로 변환되는 5가지를 다시 확인해보고, 아래를 실행해보았다.

console.log("String" == true); //false

문자열은 전부 false인 모양이었다. 이걸 확인해봤더라면 더 빨리 해결했을텐데..


++ 추가로 확인해보니, 아래같은 결과가 나왔다.

console.log("1" == true); //true

이렇게 되면 문자열이라고 전부 false가 아닌 것 같은데? 하고 혼란스러웠다.
그래서 팀원한테 물어보니 하단 링크를 보내주었다.

https://developer.mozilla.org/ko/docs/Glossary/Falsy

해당 문서의 처음에, 조건절 (en-US), 반복문 (en-US) 등 불리언 값이 필요한 곳에서 형 변환 (en-US)을 이용해 특정 값을 불리언 값으로 변환한다고 설명되어 있다.
아마 내가 콘솔에 찍어본 값들은 단순 비교일 뿐이라 Num(문자열) 형변환이 이루어졌고, "0", "1"은 각각 숫자 0, 1로, 나머지 문자열들은 NaN으로 변환되어 비교 결과가 true/false로 출력되지 않았을까 한다.
조건문 내에서는 false 취급되는 5가지 조건에 부합하지 못해 모두 true가 되었겠지?

아직 완벽하게 납득하지는 못했지만, 내일, 일주일 뒤, 한달 뒤에 다시 보면 그때는 더 잘 이해할 수 있지 않을까 한다.

profile
뜨개질하는 개발자

0개의 댓글