ECMAScript 원시 유형
- 이전 페이지 ECMAScript 값
- 다음 페이지 ECMAScript 타입 변환
ECMAScript는 5가지 원시 유형(primitive type)을 가지고 있습니다. 즉 Undefined, Null, Boolean, Number, String입니다.
typeof 연산자
typeof 연산자는 확인할 변수나 값을 parameter로 가지고 있습니다. 예를 들어:
var sTemp = "test string"; alert (typeof sTemp); // "string" 출력 alert (typeof 86); // "number" 출력
변수나 값에 typeof 연산자를 호출하면 다음 중 하나의 값을 반환합니다:
- undefined - 변수가 Undefined 유형이면
- boolean - 변수가 Boolean 유형이면
- number - 변수가 Number 유형이면
- string - 변수가 String 유형이면
- object - 변수가 참조형 유형이나 Null 유형이면
주석:너는 물론 이렇게 묻겠지만, typeof 연산자가 null 값에 대해 "Object"를 반환하는 이유는 무엇인가요. 이는 JavaScript의 초기 구현에서 발생한 오류이며, ECMAScript가 이를 이어받았습니다. 현재 null은 객체의 대체자로 간주되어 이러한 모순을 설명하되, 기술적으로는 원시 값입니다.
Undefined 유형
과거에 설명했듯, Undefined 유형은 단 하나의 값, 즉 undefined를 가지고 있습니다. 선언된 변수가 초기화되지 않았을 때, 해당 변수의 기본 값은 undefined입니다.
var oTemp;
위의 코드는 변수 oTemp를 선언하고 초기 값을 부여하지 않습니다. 이 변수는 undefined 값, 즉 undefined 리터럴을 가집니다. 이 변수의 값이 undefined인지 확인할 수 있는 다음 코드를 사용할 수 있습니다:
var oTemp; alert(oTemp == undefined);
이 코드는 "true"을 출력하며, 이 두 가지 값이 정말로 동일하다는 것을 보여줍니다. 또한 typeof 연산자를 사용하여 변수의 값이 undefined인지 확인할 수 있습니다:
var oTemp; alert(typeof oTemp); // "undefined" 출력
힌트:값 undefined는 미정의된 값과 다릅니다. 하지만 typeof 연산자는 이 두 가지 값을 정말로 구분하지 않습니다. 아래의 코드를 고려해 보세요:
var oTemp; alert(typeof oTemp); // "undefined" 출력 alert(typeof oTemp2); // "undefined" 출력
위의 코드는 두 가지 변수에 대해 모두 "undefined"를 출력합니다. 하지만 oTemp2만이 선언되지 않았습니다. oTemp2에 typeof 이외의 다른 연산자를 사용하면 오류가 발생합니다. 이는 다른 연산자가 선언된 변수에만 사용될 수 있기 때문입니다.
예를 들어, 아래의 코드는 오류를 일으킵니다:
var oTemp; alert(oTemp2 == undefined);
함수가 명확한 반환 값을 가지지 않으면, 반환되는 값도 "undefined"입니다. 예를 들어:
function testFunc() { } alert(testFunc() == undefined); // "true" 출력
Null 타입
한 가지 값만 가진 또 다른 타입은 Null입니다. Null은 null이라는 하나의 전용 값만 가집니다. 즉, 그 리터럴입니다. 값 undefined는 실제로는 null 값에서 파생된 값이며, 따라서 ECMAScript는 그들을 동일하게 정의합니다.
alert(null == undefined); // "true" 출력
이 두 가지 값은 같지만 의미가 다릅니다. undefined는 변수를 선언했지만 초기화하지 않은 경우 해당 변수에 부여되는 값입니다. null은 존재하지 않는 객체를 나타내기 위해 사용됩니다. (typeof 연산자에 대해 이야기할 때 간단히 이 점을 설명했습니다). 함수나 메서드가 객체를 반환해야 하는 경우, 해당 객체를 찾지 못하면 보통 null을 반환합니다.
Boolean 타입
Boolean 타입은 ECMAScript에서 가장 많이 사용되는 타입 중 하나입니다. 이 타입은 true와 false 두 가지 값이 있습니다. (즉, 두 개의 Boolean 리터럴입니다).
false가 0과 다르더라도, 필요할 때 0은 false로 변환될 수 있으며, 따라서 Boolean 문장에서 두 가지 모두 안전하게 사용할 수 있습니다.
var bFound = true; var bLost = false;
Number 타입
ECMA-262에서 정의된 가장 특별한 타입은 Number 타입입니다. 이 타입은 32비트 정수와 64비트 부동소수점 수를 나타낼 수 있습니다.
직접 입력된(다른 변수에서 접근하지 않은) 모든 숫자는 Number 타입의 문자面上的로 간주됩니다. 예를 들어, 다음 코드는 정수 값을 저장하는 변수를 선언하며, 이 값은 문자面上的 86으로 정의됩니다:
var iNum = 86;
8진수 수와 16진수 수
정수는 8진수(8의 기수로)나 16진수(16의 기수로)의 문자面上的로 표현될 수 있습니다. 8진수 문자面上的는 첫 번째 숫자가 0이어야 하며, 그 뒤의 숫자는 어떤 8진수 숫자(0부터 7까지)일 수 있습니다. 다음 코드를 참고하세요:
var iNum = 070; //070은 십진수 56과 같습니다
16진수 문자面上的를 생성하려면, 첫 번째 숫자는 0이어야 하며, 그 뒤에는 대문자 또는 소문자 x를 추가한 후, 어떤 16진수 숫자(0부터 9과 A부터 F까지)를 추가할 수 있습니다. 이 문자는 대문자 또는 소문자일 수 있습니다. 예를 들어:
var iNum = 0x1f; //0x1f는 십진수 31와 같습니다 var iNum = 0xAB; //0xAB은 십진수 171와 같습니다
힌트:모든 정수는 8진수나 16진수의 문자面上的로 표현될 수 있지만, 모든 수학 연산은 십진수 결과를 반환합니다.
부동소수점 수
부동소수점 값을 정의하려면 반드시 소수점과 소수점 뒤의 한 자릿수를 포함해야 합니다(예를 들어, 1.0을 사용하지 않고 1을 사용합니다). 이는 부동소수점 문자面上的로 간주됩니다. 예를 들어:
var fNum = 5.0;
부동소수점 문자面上的 흥미로운 점은, 계산 전에 실제로 저장되는 것은 문자열이라는 것입니다.
과학적 기수법
매우 크거나 매우 작은 수를 나타내기 위해 과학적 기수법으로 표현할 수 있습니다. 수를 숫자(십진수 숫자 포함)와 e(또는 E)를 추가하여 10의 배수로 나타낼 수 있습니다. 예를 들어:
var fNum = 5.618e7
이 기호는 수 56180000을 나타냅니다. 과학적 기수법을 계산식으로 변환하면 이 값을 얻을 수 있습니다: 5.618 x 107。
매우 작은 수를 과학적 기수법으로 표현할 수 있습니다. 예를 들어, 0.00000000000000008은 8-e로 표현될 수 있습니다.17여기서 10이 -17번째冥으로 들어가는 것을 의미합니다. 즉, 10을 17번 나누어야 합니다). ECMAScript는 6개 이상의 전두 0을 가진 부동소수점 수를 기본적으로 과학적 표기법으로 변환합니다.
힌트:64비트 IEEE 754 형식으로 부동소수점 값을 저장할 수도 있습니다. 이는 십진수 값이 최대 17개의 십진자리를 가질 수 있다는 것을 의미합니다. 17자리 이후의 값은 잘려져서, 일부 수학적 오차가 발생합니다.
특수 Number 값
몇 가지 특수 값이 Number 타입으로 정의되어 있습니다. 최초 두 가지는 Number.MAX_VALUE와 Number.MIN_VALUE입니다. 이들은 Number 값 집합의 외경을 정의합니다. 모든 ECMAScript 수는 이 두 값 사이에 있어야 합니다. 그러나 계산된 수는 이 두 값 사이에 위치하지 않을 수 있습니다.
계산된 수가 Number.MAX_VALUE보다 크면, Number.POSITIVE_INFINITY 값으로 할당되어 더 이상 숫자 값이 없다는 의미입니다. 마찬가지로, Number.MIN_VALUE보다 작은 계산된 값도 Number.NEGATIVE_INFINITY 값으로 할당되어 더 이상 숫자 값이 없다는 의미입니다. 계산이 무한대 값을 반환하면, 생성된 결과는 다른 계산에 사용할 수 없습니다.
실제로, 무한대를 나타내는 특수 값이 있습니다. (추측했듯) Infinity입니다. Number.POSITIVE_INFINITY의 값은 Infinity입니다. Number.NEGATIVE_INFINITY의 값은 -Infinity입니다.
무한대 수는 양수와 음수 모두일 수 있으므로, 수가 유한인지 여부를 판단할 수 있는 방법을 하나 사용할 수 있습니다. (또는 각 무한대 수를 단독으로 테스트하지 않습니다). 어떤 수에도 isFinite() 메서드를 호출하여 수가 무한대가 아니라는 것을 확인할 수 있습니다. 예를 들어:
var iResult = iNum * some_really_large_number; if (isFinite(iResult)) { alert("finite"); } else { alert("infinite"); }
최종 특수 값은 NaN입니다. NaN은 이상한 특수 값입니다. 일반적으로, 이러한 상황은 타입(String, Boolean 등) 변환 실패 시 발생합니다. 예를 들어, 단어 blue를数值로 변환하려고 할 때 실패합니다. 이는 그와 동일한数值가 없기 때문입니다. 무한대와 마찬가지로, NaN은 계산에 사용할 수 없습니다. NaN의 또 다른 이상한 점은 자신과 다르다는 것입니다. 이는 다음 코드가 false를 반환한다는 것을 의미합니다:
alert(NaN == NaN); //출력 "false"
이 이유로, NaN 값 자체를 사용하는 것을 권장하지 않습니다. isNaN() 함수는 매우 잘 작동합니다:
alert(isNaN("blue")); //출력 "true" alert(isNaN("666")); //출력 "false"
String 타입
String 타입의 독특한 점은, 그것이 유일한 고정 크기를 가지지 않는 원시 타입임입니다. Unicode 문자(Unicode는 국제 문자 집합으로, 이 강의의 후반부에서 논의됩니다)를 0개나 많이 저장할 수 있습니다. 16비트 정수로 표현됩니다.
문자열의 각 문자는 특정 위치를 가지며, 첫 번째 문자는 위치 0에서 시작하고, 두 번째 문자는 위치 1에서 시작하며, 이를 계속하여 문자열의 마지막 문자의 위치는 문자열의 길이에서 1을 뺀 위치입니다:

문자열 문자面上的는 양쪽 쌍 빈 공간(")나 단 quotes(')로 선언됩니다. Java는 양쪽 쌍 빈 공간으로 문자열을 선언하고, 단 quotes로 문자를 선언합니다. 하지만 ECMAScript는 문자 타입이 없기 때문에 이 두 가지 표현법 중 하나를 사용할 수 있습니다. 예를 들어, 아래 두 줄의 코드는 모두 유효합니다:
var sColor1 = "red"; var sColor2 = 'red';
String 타입은 몇 가지 문자 문자面上的도 포함하고 있으며, Java, C, Perl 개발자는 이를 매우 잘 알고 있어야 합니다.
아래는 ECMAScript의 문자 문자面上的를 나열합니다:
문자面上的 | 의미 |
---|---|
\n | 줄 바꿈 |
\t | 탭 |
\b | 공백 |
\r | 리턴 |
\f | 페이지 이동 |
\\\ | 반대 기호 |
\' | 단 quotes |
\" | 빈 공간 |
\0nnn | 8진 코드 nnn 표시하는 문자(n 0에서 7 사이의 8진수 숫자 중 하나입니다) |
\xnn | 16진 코드 nn 표시하는 문자(n 0에서 F 사이의 16진수 숫자 중 하나입니다) |
\unnnn | 16진 코드 nnnn 표시하는 유니코드 문자(n 0에서 F 사이의 16진수 숫자 중 하나입니다) |
- 이전 페이지 ECMAScript 값
- 다음 페이지 ECMAScript 타입 변환