[javascript] 왜 NaN (“”) (공백이있는 문자열)이 거짓입니까?

자바 스크립트에서, 왜 않는 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 비교를 다루는 다음의 포괄적 인 답변을 확인하고 싶을 수도 있습니다.

JavaScript 변수가 있는지 테스트하는 방법 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);
}