JavaScript에서 -, *, /, ==, != 등의 연산을 수행할 때 연산자의 왼쪽과 오른쪽에 있는 값 유형이 예상 유형과 일치하지 않으면 JavaScript는 해당 값을 변환합니다. 연산자의 양쪽을 예상되는 유형으로 다시 작업하십시오. 예상 값 유형이 문자열인 경우 JavaScript는 값을 문자열로 변환하고, 예상 값 유형이 숫자인 경우 JavaScript는 값을 숫자로 변환합니다(예를 들어 숫자 값으로 변환할 수 없는 경우 NaN이 반환됩니다). :
값 유형 변환 규칙
JavaScript의 값 변환 규칙은 "JavaScript – The Definitive Guide" 책의 표 3-2 JavaScript 유형 변환을 참조하세요. 주목할만한 장소는 다음과 같습니다.
1. undefine을 숫자로 변환한 후의 결과는 NaN입니다.
2. null을 숫자로 변환한 결과는 0입니다.
3. 빈 문자열 ""을 숫자로 변환한 결과는 0입니다.
4. -0을 문자열로 변환한 결과는 "0"입니다.
5. 빈 배열 []을 숫자로 변환한 결과는 0입니다.
6. 숫자 멤버가 하나만 있는 배열(예: [9])을 숫자로 변환하면 결과는 숫자 값(9)입니다.
JavaScript가 문자열을 숫자로 변환할 때 두 가지 흥미로운 규칙이 있습니다.
1. JavaScript는 문자열을 변환하기 전에 문자열의 시작과 끝 부분에 있는 공백 문자를 삭제하므로 "42"와 같은 문자열이 숫자 42로 성공적으로 변환될 수 있습니다.
2. 시작과 끝의 공백 문자를 제거한 후에도 문자열에 여전히 숫자가 아닌 문자가 포함되어 있으면 문자열이 NaN으로 변환됩니다. 예를 들어 "3m"는 NaN으로 변환됩니다.
예:
값 유형 변환 및 비교
JavaScript에서 등호 연산자(==)를 사용하려면 값 유형 변환이 필요합니다. == 연산자 양쪽의 값 유형이 일치하지 않으면 JS는 판단을 내리기 전에 이를 일관된 유형으로 변환합니다. 유형 변환 후 서로 다른 유형의 두 값이 동일할 수 있지만 이것이 해당 값에 == 연산자를 사용한 결과가 반드시 true라는 의미는 아닙니다. 간단한 예는 정의되지 않음과 거짓입니다. 정의되지 않음을 부울 유형으로 변환한 후 결과는 거짓이 되지만 실제로는 정의되지 않음==false의 결과는 거짓입니다.
명시적 유형 변환
JavaScript의 자동 유형 변환을 사용하면 매우 편리하지만 코드 유지 관리 등의 문제가 쉽게 발생할 수도 있습니다. 프로그램 코드를 더 명확하게 만들고 모호성을 줄이기 위해 JS 프로그램에서는 때때로 명시적인 유형 변환이 사용됩니다.
자동 유형 변환 사용
JS에서는 값 유형의 자동 변환을 사용하고 연산자를 사용하여 다음과 같이 명시적 변환과 동일한 효과를 얻을 수 있습니다.