문자열이 숫자 문맥에 사용되면 자동으로 숫자로 변환된다. 이것은, 예를 들어 다음 코드가 실제로 잘 작동한다는 것을 의미한다.

var product = "21" * "2";   // 두 문자열 곱은 숫자 42가 된다.


이 점을 활용하면 문자열에서 0을 빼는 방법으로 간단히 문자열을 숫자로 변환 할 수 있다.

var number = string_value - 0


(그러나 문자열 값에 0을 더하면 타입 변환이 수행되는 것이 아니라 문자열 이어붙이기가 수행된다는 것을 주의하라.)
위와 같은 편법을 사용하지 않고 문자열을 숫자로 명시적으로 변환하는 방법은 Number() 생성자를 함수처럼 호출하는 것이다.

var number = Number(string_value);


이 문자열/숫자 변환 방법의 문제는 문자열/숫자 변환에 지나치게 엄격한 규칙이 적용된다는 것이다. 이 변환 방법은 10진수만 제대로 변환할 수 있고, 문자열 내에서 앞부분이나 뒷부분에는 스페이스 문자들이 나타날 수 있지만 숫자 다음에는 스페이스 외의 문자들이 나타날 수 없다.
좀 더 융통성 있는 변환 방법이 필요하다면 parseInt()와 parseFloat()를 사용하라. 이 함수들은 문자열 내에 존재하는 어떤 형태의 숫자라도 변환하여 반환하고 숫자 다음에 나오는 숫자가 아닌 문자들은 모두 무시한다. parseInt()는 정수만 변환할 수 있지만 parseFloat()는 정수와 부동소수점 숫자를 모두 변환할 수 있다. 만약 문자열이 '0x'나 '0X'로 시작하면 parseInt()는 문자열을 16진수 숫자로 인식한다.[각주:1] 예를 들어,

parseInt("3 blind mice");          // 3을 반환
parseFloat("3.14 meters");       // 3.14를 반환
parseInt("12.34");                    // 12를 반환
parseInt("0xFF");                    // 255를 반환


parseInt()는 변환하려는 숫자의 기수를 지정하는 두 번째 전달인자를 받기도 한다. 기수 값으로는 2에서 36 사이에 있는 값을 지정할 수 있다. 예를 들어,

parseInt("11", 2);                // 3(1*2 + 1)을 반환
parseInt("ff", 16);                // 255(15*16 + 15)를 반환
parseInt("zz", 36);              // 1295(35*36 + 35)를 반환
parseInt(077", 8);               // 63(7*8 + 7)을 반환
parseInt("077", 10);            // 77(7*10 + 7)을 반환


parseInt()와 parseFloat()는 지정된 문자열을 숫자로 변환하지 못할 경우 NaN을 반환한다.

parseInt("eleven");             // NaN을 반환
parseFloat("$72.47");          // NaN을 반환
  1. ECMAScript 명세에는 문자열이 '0' ('0x'나 '0X'가 아니라)으로 시작하면 parseInt()는 문자열을 8진수나 10진수로 인식할 수 있다고 나와 있다. 명세에는 이 부분에 대한 정확한 작동 방식이 나와 있지 않으므로, 직접 기수를 지정하려는 경우가 아니라면 0으로 시작되는 숫자를 변환하는 데 parseInt()를 절대로 사용하지 말라. [본문으로]