JS에서 == 와 === 가 다르다는 사실은 누구나 알고 있다.
이에 대한 글은 무수하게 많으니 간단 요약을 하자면
== 는 값만 비교하고 === 는 타입까지 비교한다.
라고 알고 들어가면 되겠다.
Modern Javascript DeepDive 를 공부할 때
아 자바스크립트의 비교는 이렇군요? 오케이, 알겠습니다!
하고 넘어갔었다.
그리고 교수님께서 JS에서는 웬만하면 ===로 쓰세요, 라고 하셔서 ===로 풀다가 위 개념을 한번 더 복습하게 되어서 포스팅한다.
문제는 이해하기 어렵지 않다.
다트게임을 하는데, 점수가 문자열로 주어지고 문자열의 조건에 맞게 로직을 작성하면 된다.
처음에는 문자열을 슬라이싱해서 각 회차에 맞게 로직을 작성하려고 했다.
그런데 여기서 보너스 옵션으로 와 #이 주어지는데 이게 있을수도 있고 없을수도 있어서 각 기회마다 이게 일 경우, #일 경우를 나누고 각 회차에 두 경우를 모두 작성해야 하므로
각 기회마다 S인지 D인지 T인지 + *인지 #인지를 3번 써야되니까 더 나은게 없을까 고민하다가, 정규표현식 생각을 했는데 정규식은 내가 쓸줄을 모르고, 그래서 그냥 무식하게 문자열 하나씩 돌면서 else-if를 쓰기로 했다.
여기서 주의할 건 10번라인의 if문이다.
점수가 10일 경우에는 문자열의 인덱스와 그 다음 인덱스가 1과 0일 때 10으로 설정하고 다음 인덱스인 0을 건너뛰기 위해 i++을 했다.
여기서는 == 을 썼다. 따라서, dartResult 가 문자 형태지만 == 를 써서 숫자로 참거짓을 판단할 수 있게 했다.
처음에는 이걸 ===로 썼다가 통과못한 테스트 케이스가 생겼다.
역시나 제출도 불통이었다.
=== 1 의 형태로 쓰면 점수가 10일 경우 점수 합산을 할 수 없어 틀리는 케이스가 생긴 것이다.
==1로 비교하거나, === ’1’ 처럼 문자열 타입으로 비교하면 문제 없다.
신기한 자바스크립트 세상