다음을 통해 공유


형식 변환

업데이트: 2007년 11월

형식 변환은 한 가지 형식에서 다른 형식으로 값을 변경하는 프로세스입니다. 예를 들어, 문자열 "1234"를 숫자로 변환할 수 있습니다. 또한 어떤 형식의 데이터나 String 형식으로 변환할 수 있습니다. 그러나 성공적으로 수행될 수 없는 형식 변환도 있습니다. 예를 들어, Date 개체는 ActiveXObject 개체로 변환될 수 없습니다.

형식 변환에는 확장 변환과 축소 변환이 있습니다. 확장 변환은 오버플로되는 일 없이 항상 성공적으로 이루어지지만 축소 변환을 하면 정보가 손실되고 오류가 발생할 수 있습니다.

이 두 가지 종류의 형식 변환은 데이터 형식 식별자를 사용하여 명시적으로 수행되거나 데이터 형식 식별자 없이 암시적으로 수행됩니다. 유효한 명시적 변환은 정보가 손실되더라도 항상 성공적으로 이루어집니다. 암시적 변환은 데이터 손실이 없는 경우에만 성공합니다. 그렇지 않은 경우에는 런타임 또는 컴파일 타임 오류가 발생합니다.

원래의 데이터 형식이 대상 변환 형식과 뚜렷한 유사점이 없으면 변환할 때 정보가 손실될 수 있습니다. 예를 들어, 문자열 "Fred"는 숫자로 변환할 수 있습니다. 이러한 경우에는 형식 변환 함수에서 기본값이 반환됩니다. Number 형식의 경우 기본값은 NaN이고 int 형식의 경우 기본값은 숫자 0입니다.

문자열에서 숫자로 변환하는 등 일부 변환의 경우에는 시간이 많이 걸립니다. 따라서 변환을 적게 사용하는 프로그램이 더 효율적인 프로그램입니다.

암시적 변환

변수에 값을 할당하는 것과 같은 대부분의 형식 변환은 자동으로 이루어집니다. 변수의 데이터 형식에 따라 식 변환의 대상 데이터 형식이 결정됩니다.

다음 예제에서는 int 값, String 값 및 double 값 사이에서 데이터가 암시적으로 변환되는 방법을 보여 줍니다.

var i : int;
var d : double;
var s : String;
i = 5;
s = i;  // Widening: the int value 5 coverted to the String "5".
d = i;  // Widening: the int value 5 coverted to the double 5.
s = d;  // Widening: the double value 5 coverted to the String "5".
i = d;  // Narrowing: the double value 5 coverted to the int 5.
i = s;  // Narrowing: the String value "5" coverted to the int 5.
d = s;  // Narrowing: the String value "5" coverted to the double 5.

이 코드를 컴파일하면 축소 변환이 실패하거나 축소 변환 속도가 느려질 수 있다는 컴파일 타임 경고가 발생할 수 있습니다.

변환할 때 정보가 손실되는 경우에는 암시적인 축소 변환이 제대로 이루어지지 않을 수 있습니다. 예를 들어, 다음 코드는 제대로 수행되지 않습니다.

var i : int;
var f : float;
var s : String;
f = 3.14;
i = f;  // Run-time error. The number 3.14 cannot be represented with an int.
s = "apple";
i = s;  // Run-time error. The string "apple" cannot be converted to an int.

명시적 변환

식을 특정 데이터 형식으로 명시적으로 변환하려면 데이터 형식 식별자 뒤에 변환할 식을 괄호로 묶어 사용합니다. 명시적 변환을 수행하면 암시적 변환보다 결과가 확실하며 손실 변환을 처리할 수 있습니다.

다음 예제에서는 int 값, String 값 및 double 값 사이에서 데이터가 명시적으로 변환되는 방법을 보여 줍니다.

var i : int;
var d : double;
var s : String;
i = 5;
s = String(i);  // Widening: the int value 5 coverted to the String "5".
d = double(i);  // Widening: the int value 5 coverted to the double 5.
s = String(d);  // Widening: the double value 5 coverted to the String "5".
i = int(d);     // Narrowing: the double value 5 coverted to the int 5.
i = int(s);     // Narrowing: the String value "5" coverted to the int 5.
d = double(s);  // Narrowing: the String value "5" coverted to the double 5.

명시적인 축소 변환은 변환할 때 정보가 손실되는 경우라도 대부분 성공적으로 이루어집니다. 호환할 수 없는 데이터 형식들을 변환할 때는 명시적 변환을 사용할 수 없습니다. 예를 들어, Date 데이터를 RegExp 데이터로 변환하거나 그 반대로 변환할 수 없습니다. 또한 의미 있는 값으로 변환할 수 없는 값도 있습니다. 예를 들어, double 값인 NaNdecimal로 명시적으로 변환하려고 하면 NaN과 일치하는 일반 decimal 값이 없기 때문에 오류가 발생합니다.

다음 예제에서는 소수 부분이 있는 숫자와 문자열이 각각 정수로 변환됩니다.

var i : int;
var d : double;
var s : String;
d = 3.14;
i = int(d);
print(i);
s = "apple";
i = int(s);
print(i);

다음과 같이 출력됩니다.

3
0

명시적 변환의 동작은 원본 데이터 형식과 대상 데이터 형식에 따라 달라집니다.

참고 항목

개념

형식 주석

참조

undefined 속성

기타 리소스

JScript 데이터 형식