const age = parseInt(prompt("How old are you?"));
//isNaN : 값이 NaN(Not a Number)인지 확인하는 함수.
//age값이 숫자 > return false 숫자가 아니면 > return true
if (isNaN(age)) { //condition has to be a boolean
//condition === true이면 NaN 이므로 아래 문장 실행
console.log(isNaN(age));
console.log("Please write a number.");
} else {
console.log(isNaN(age));
console.log("Thank you for writing your age.");
}
위 코드를 실행하다가 궁금한 점이 생겼다.
1. 숫자만 입력한 경우
2. 문자만 입력한 경우
3. 숫자와 문자를 입력한 경우
4. 문자와 숫자를 입력한 경우
< 원인 >
parseInt() 동작방식 때문이다.
- parseInt() : 문자열을 정수로 변환하는 함수
- 문자열의 처음부터 숫자로 해석할 수 있는 부분을 변환 후, 그 값을 반환한다.
parseInt(string); //값을 문자열로 입력 받는다.
parseInt(string, radix);
숫자로 해석할 수 있는 부분까지만 숫자로 변환하고,
첫 문자가 나오는 즉시 변환을 멈추고,
해석된 부분만 반환한다.
3번째 '12ab' 경우
1. parseInt("12ab")는 숫자로 변환할 수 있는 '12'까지 정수로 변환
2. 'a' 는 숫자가 아니므로 변환 멈춤
3. '12' 정수 반환 (숫자)
4. isNaN(age)는 return false 이므로 else문 실행
4번째 'ab12' 경우
1. parseInt('ab12')는 첫 글자가 숫자가 아니므로 변환하지 않음
2. parseInt는 'NaN' 반환
3. isNaN(age)는 return true 이므로 if문 실행
< 해결 방법 >
function isValidNumber(str){ //입력된 값이 숫자로만 이루어져 있는지 검사하는 함수
if (/^\d+$/.test(str)) {
return parseInt(str, 10); //10진수 숫자로 변환하여 반환.
} else {
return NaN; //문자가 포함된 경우, NaN 반환
}
}
const age = strictParseInt(prompt("How old are you?"));
if (isNaN(age)) {
console.log("Please write a valid number.");
} else {
console.log("Thank you for writing your age.");
}
정규 표현식 (/^\d+$/)
: 입력된 문자열이 오직 숫자 \d 로만 이루어져 있는지 검사
- ^ : 문자열의 시작을 의미함.
- \d+ : 하나 이상의 숫자(0~9)를 의미함.
- $ : 문자열의 끝을 의미함.
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/parseInt
parseInt() - JavaScript | MDN
parseInt() 함수는 문자열 인자를 파싱하여 특정 진수(수의 진법 체계에서 기준이 되는 값)의 정수를 반환합니다.
developer.mozilla.org
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/isNaN
isNaN() - JavaScript | MDN
isNaN() 함수는 어떤 값이 NaN인지 판별합니다. isNaN 함수는 몇몇 혼란스러운 케이스을 가지고 있으므로, ECMAScript 2015에서 추가한 Number.isNaN()으로 바꾸는 편이 좋을 수도 있습니다.
developer.mozilla.org
https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Regular_expressions
정규 표현식 - JavaScript | MDN
정규 표현식, 또는 정규식은 문자열에서 특정 문자 조합을 찾기 위한 패턴입니다. JavaScript에서는 정규 표현식도 객체로서, RegExp의 exec()와 test() 메서드를 사용할 수 있습니다. String의 match(), matchA
developer.mozilla.org
'Web' 카테고리의 다른 글
[Web] favicon.ico 404 (Not Found) 해결 방법 (3) | 2024.08.23 |
---|