Page 24 -
P. 24
입력한 값은 $input.value로 가져옵니다. 이때 숫자가 아니라 문자열로 값이 들어온다는 점에
주의하세요! 이 값을 checkInput 함수로 검증합니다. 검증해야 하는 내용은 길이가 4글자인
가, 중복된 숫자는 없는가, 이미 시도했던 값은 아닌가입니다. 이미 시도한 값인지를 검사하는
이유는, 예를 들어, 1234를 시도해서 어떤 결과를 얻었다면 다시 1234를 시도할 이유가 없기
때문입니다. 기회를 한 번 날려 버리는 것이므로 검증 함수에서 걸러 냅니다.
다음으로 checkInput 함수의 내부를 작성합니다.
function checkInput(input) {
if (input.length !== 4) { // 길이는 4가 아닌가
return alert('4자리 숫자를 입력해 주세요.');
}
if (new Set(input).size !== 4) { // 중복된 숫자가 있는가
return alert('중복되지 않게 입력해 주세요.');
}
if (tries.includes(input)) { // 이미 시도한 값은 아닌가
return alert('이미 시도한 값입니다.');
}
return true;
}
검사를 통과하면 true를 반환하고, 실패하면 false를 반환합니다. 반환한 값은 뒤에서 if 문에
넣어 검사가 실패했는지 아닌지 판단할 때 사용합니다. 구현한 코드를 보면 실패하는 경우에
는 return alert(메시지)를 하고 있습니다. alert 함수는 undefined를 반환합니다. 즉 return
undefined와 같고, undefined는 if 문에서는 false로 처리하므로 결과가 같습니다. 이러한 부
분은 언어적인 특성이므로 복잡하다면 alert 한 후에 명시적으로 return false 해도 됩니다.
입력한 값의 길이가 4가 아닌지를 검사하는 부분은 쉽게 이해할 겁니다. 이미 시도한 값이 아
닌지도 기존에 시도했던 값들을 tries 배열에 넣어 두고(이때는 '1234'처럼 하나의 문자열로 넣
습니다) 배열 안에 요소가 존재하는지 알려 주는 tries.includes로 찾으므로 어렵지 않습니다.
그런데 중복된 숫자가 있는지 검사하는 코드는 생소할 겁니다. new Set(input)이라는 코드 때
문인데요. Set은 중복을 허용하지 않는 특수한 배열입니다. new는 예약어인데, 10장에서 설명
250