자바 스크립트에서, 왜 않는 isNaN(" ")
로 평가 false
하지만, isNaN(" x")
하는 평가 true
?
나는 텍스트 입력 필드에 숫자 작업을 수행하고있어, 나는 필드가있는 경우 확인하고있어 null
, ""
나 NaN
. 누군가 필드에 소수의 공백을 입력하면 세 가지 모두에 대한 유효성 검사가 실패하고 왜 isNaN
검사를 통과했는지 혼란 스럽습니다 .
답변
JavaScript는 빈 문자열을 0으로 해석하여 isNAN 테스트에 실패합니다. 빈 문자열을 0으로 변환하지 않는 문자열에 먼저 parseInt를 사용할 수 있습니다. 그런 다음 isNAN이 실패합니다.
답변
놀랍거나 그렇지 않을 수도 있지만 JavaScript 엔진의 괴짜를 보여주는 테스트 코드가 있습니다.
document.write(isNaN("")) // false
document.write(isNaN(" ")) // false
document.write(isNaN(0)) // false
document.write(isNaN(null)) // false
document.write(isNaN(false)) // false
document.write("" == false) // true
document.write("" == 0) // true
document.write(" " == 0) // true
document.write(" " == false) // true
document.write(0 == false) // true
document.write(" " == "") // false
그래서 이것은
" " == 0 == false
과
"" == 0 == false
그러나
"" != " "
재미있게 보내세요 🙂
답변
더 잘 이해하려면 43 페이지의 Ecma-Script spec pdf 를여십시오. “문자열 유형에 적용된 ToNumber”
문자열에 숫자 구문이 있고, 공백 문자를 포함 할 수있는 경우 숫자 형식으로 변환 할 수 있습니다. 빈 문자열은 0으로 평가됩니다. 또한 문자열 ‘무한대’는
isNaN('Infinity'); // false
답변
다음을 사용하십시오.
alert(isNaN(parseInt(" ")));
또는
alert(isNaN(parseFloat(" ")));
답변
에서 MDN
이 문제에 대한 이유 당신이 직면하고있다
isNaN 함수의 인수가 Number 유형이 아닌 경우 값은 먼저 Number로 강제됩니다. 그런 다음 결과 값을 테스트하여 값이 NaN인지 확인합니다.
평등에 대한 NaN 비교를 다루는 다음의 포괄적 인 답변을 확인하고 싶을 수도 있습니다.
답변
: 나는 그것 때문에 자바 스크립트의 입력하는 생각 ' '
제로로 변환되고, 반면 'x'
되지 않습니다 :
alert(' ' * 1); // 0
alert('x' * 1); // NaN
답변
정확한 isNumber 함수를 구현하려는 경우 다음은 Javascript 에서 수행하는 한 가지 방법입니다 . Douglas Crockford 의 좋은 부분 [페이지 105]
var isNumber = function isNumber(value) {
return typeof value === 'number' &&
isFinite(value);
}