2. 타입(Type)
1. 키워드
- 원시 타입(Primitive Type)과 객체 타입(Object Type)
- 묵시적 타입 변환(Implicit Type Conversion)과 명시적 타입 변환(Explicit Type Conversion)
- 변수(Variable)
2. 기본 타입
- 타입이란 프로그램에서 다룰 수 있는 값의 종류를 의미한다.
- 자바스크립트에서는 여러 가지 형태의 타입을 미리 정의하여 제공하고 있으며, 이것을 기본 타입이라고 한다.
- 자바스크립트의 기본 타입은 크게 원시 타입과 객체 타입으로 구분할 수 있다.
- 원시 타입은 다음과 같다.
1] 숫자(Number
)
2] 문자열(String
)
3] 불리언(Boolean
)
4] 심볼(Symbol
): ECMAScript 6부터 제공됨
5] undefined
- 객체 타입은 다음과 같다.
6] 객체(Object
)
1) 숫자
- 자바스크립트는 다른 언어와는 달리 정수와 실수를 따로 구분하지 않고, 모든 수를 실수 하나로만 표현한다.
- 또한, 매우 큰 수나 매우 작은 수를 표현할 경우에는
e
표기법을 사용할 수 있다.
var firstNum = 10; // 소수점을 사용하지 않은 표현
var secondNum = 10.0; // 소수점을 사용한 표현
var thirdNum = 10e6; // 10000000
var fourthNum = 10e-6; // 0.00001
2) 문자열
- 자바스크립트에서 문자열은
""
(큰따옴표)나''
(작은따옴표)로 둘러싸인 문자의 집합을 의미한다. ""
는''
로 둘러싸인 문자열에만 포함될 수 있으며,''
는""
로 둘러싸인 문자열에만 포함될 수 있다.
var firstStr = "이것도 문자열입니다."; // 큰따옴표를 사용한 문자열
var secondStr = "이것도 문자열입니다."; // 작은따옴표를 사용한 문자열
// 작은따옴표는 큰따옴표로 둘러싸인 문자열에만 포함될 수 있음.
var thirdStr = "나의 이름은 '홍길동'이야.";
// 큰따옴표는 작은따옴표로 둘러싸인 문자열에만 포함될 수 있음.
var fourthStr = '나의 이름은 "홍길동"이야.';
- 자바스크립트에서 숫자와 문자열을 더할 수도 있다.
- 이럴 경우에 자바스크립트는 숫자를 문자열로 자동 변환하여, 두 문자열을 연결하는 연산을 수행한다.
var num = 10;
var str = "JavaScript";
document.getElementById("result").innerHTML = num + str;
// 10JavaScript
3) 불리언
- 불리언 값은 참과 거짓을 표현한다.
- 자바스크립트에서 불리언 값은 예약어인
true
와false
를 사용하여 나타낼 수 있다.
var firstNum = 10;
var secondNum = 11;
document.getElementById("result").innerHTML = firstNum == secondNum;
// false
4) 심볼
- 심볼 타입은 ECMAScript 6부터 새롭게 추가된 타입이다.
- 심볼은 유일하고 변경할 수 없는 타입으로, 객체의 프로퍼티를 위한 식별자로 사용할 수 있다.
5) typeof
연산자
typeof
연산자는 피연산자의 타입을 반환하는 피연산자가 단 하나뿐인 연산자이다.
typeof 10; // number 타입
typeof "문자열"; // string 타입
typeof true; // boolean 타입
typeof undefined; // undefined 타입
typeof null; // object 타입
6) null
과 undefined
- 자바스크립트에서
null
이란object
타입이며, 아직 '값'이 정해지지 않은 것을 의미한다. - 또한,
undefined
란null
과 달리 '타입'이 정해지지 않은 것을 의미한다. - 따라서 자바스크립트에서
undefined
는 초기화되지 않은 변수나 존재하지 않는 값에 접근할 때 반환된다.
var num; // 초기화하지 않았으므로 undefined 값을 반환함.
var str = null; // object 타입의 null 값
typeof secondNum; // 정의되지 않은 변수에 접근하면 undefined 값을 반환함.
null
과undefined
는==
(동등 연산자)와===
(일치 연산자)로 비교할 때 그 결괏값이 다르므로 주의해야 한다.null
과undefined
는 타입을 제외하면 같은 의미지만, 타입이 다르므로 일치하지는 않는다.
7) 객체
- 자바스크립트의 기본 타입은 객체이다.
- 객체란 실생활에서 우리가 인식할 수 있는 사물로 이해할 수 있다.
- 객체는 여러 프로퍼티나 메서드를 같은 이름으로 묶어놓은 일종의 집합체이다.
var dog = { name: "해피", age: 3 }; // 객체의 생성
// 객체의 프로퍼티 참조
document.getElementById("result").innerHTML =
"강아지의 이름은 " + dog.name + "이고, 나이는 " + dog.age + "살 입니다.";
3. 타입 변환(Type Conversion)
- 자바스크립트는 타입 검사가 매우 유연한 언어이다.
- 자바스크립트의 변수는 타입이 정해져 있지 않으며, 같은 변수에 다른 타입의 값을 다시 대입할 수도 있다.
var num = 20; // Number 타입의 20
num = "이십"; // String 타입의 "이십"
// 한 변수에 여러 번 대입할 수는 있지만, 변수의 재선언은 할 수 없음.
var num;
1) 묵시적 타입 변환
- 자바스크립트는 특정 타입의 값을 기대하는 곳에 다른 타입의 값이 오면, 자동으로 타입을 변환하여 사용한다.
- 즉, 문자열 값이 오길 기대하는 곳에 숫자가 오더라도 자바스크립트는 알아서 숫자를 문자열로 변환하여 사용한다.
10 + "문자열"; // 문자열 연결을 위해 숫자 10이 문자열로 변환됨.
"3" * "5"; // 곱셈 연산을 위해 두 문자열이 모두 숫자로 변환됨.
1 - "문자열"; // NaN
- 위의 세 번째 예제에서 뺄셈 연산을 위해 문자열이 숫자로 변환되어야 하나, 해당 문자열은 두 번째 예제의 문자열과는 달리 숫자로 변환될 수 없는 문자열이다.
- 따라서 의미에 맞게 자동으로 타입을 변환할 수 없으므로, 자바스크립트는
NaN
값을 반환한다.
Note
NaN
은 Not a Number의 축약형으로, 정의되지 않은 값이나 표현할 수 없는 값이라는 의미를 가진다.- 이러한
NaN
은Number
타입의 값으로0
을0
으로 나누거나, 숫자로 변환될 수 없는 피연산자로 산술 연산을 시도하는 경우에 반환되는 읽기 전용 값이다.
2) 명시적 타입 변환
- 자바스크립트에서는 묵시적 타입 변환을 많이 사용하지만, 명시적으로 타입을 변환할 방법도 제공한다.
- 명시적 타입 변환을 위해 자바스크립트가 제공하는 전역 함수는 다음과 같다.
1] Number()
2] String()
3] Boolean()
4] Object()
5] parseInt()
6] parseFloat()
Number("10"); // 숫자 10
String(true); // 문자열 "true"
Boolean(0); // 불리언 false
Object(3); // new Number(3)와 동일한 결과로 숫자 3
(1) 숫자를 문자열로 변환
- 숫자를 문자열로 변환하는 가장 간단한 방법은
String()
함수를 사용하는 것이다. - 또한,
null
과undefined
를 제외한 모든 타입의 값이 가지고 있는toString()
메서드를 사용할 수도 있다.
- 숫자(
Number
) 객체는 숫자를 문자열로 변환하는 다음과 같은 메서드를 별도로 제공한다.
메서드 | 설명 |
---|---|
toExponential() |
정수 부분은 1자리, 소수 부분은 입력받은 수만큼 e 표기법을 사용하여 숫자를 문자열로 변환함. |
toFixed() |
소수 부분을 입력받은 수만큼 사용하여 숫자를 문자열로 변환함. |
toPrecision() |
입력받은 수만큼 유효 자릿수를 사용하여 숫자를 문자열로 변환함. |
- 메서드란 객체의 프로퍼티 값으로 함수를 가지는 프로퍼티를 의미한다.
(2) 불리언 값을 문자열로 변환
- 불리언 값을 문자열로 변환하는 방법에는
String()
함수와toString()
메서드를 사용하는 방법이 있다.
(3) 날짜를 문자열이나 숫자로 변환
- 날짜를 문자열로 변환하는 방법에는
String()
함수와toString()
메서드를 사용하는 방법이 있다. - 자바스크립트에서 날짜(
Date
) 객체는 문자열과 숫자로 모두 변환할 수 있는 유일한 타입이다.
- 날짜(
Date
) 객체는 날짜를 숫자로 변환하는 다음과 같은 메서드를 별도로 제공한다.
메서드 | 설명 |
---|---|
getDate() |
날짜 중 일자를 숫자로 반환함. (1 ~ 31 ) |
getDay() |
날짜 중 요일을 숫자로 반환함. (일요일: 0 ~ 토요일: 6 ) |
getFullYear() |
날짜 중 연도를 4자리 숫자로 반환함. (yyyy 년) |
getMonth() |
날짜 중 월을 숫자로 반환함. (1월: 0 ~ 12월: 11 ) |
getTime() |
1970년 1월 1일부터 현재까지의 시간을 밀리초(millisecond) 단위의 숫자로 반환함. |
getHours() |
시간 중 시를 숫자로 반환함. (0 ~ 23 ) |
getMinutes() |
시간 중 분을 숫자로 반환함. (0 ~ 59 ) |
getSeconds() |
시간 중 초를 숫자로 반환함. (0 ~ 59 ) |
getMilliseconds() |
시간 중 초를 밀리초(millisecond) 단위의 숫자로 반환함. (0 ~ 999 ) |
String(Date()); // Mon May 16 2016 19:35:25 GMT+0900
Date().toString(); // Mon May 16 2016 19:35:25 GMT+0900
var date = new Date(); // Date 객체 생성
date.getFullYear(); // 2016
date.getTime(); // 1463394925632 -> 1970년 1월 1일부터 현재까지의 시간을 밀리초 단위의 숫자로 반환함.
(4) 문자열을 숫자로 변환
- 문자열을 숫자로 변환하는 가장 간단한 방법은
Number()
함수를 사용하는 것이다.
- 자바스크립트는 문자열을 숫자로 변환해 주는 두 개의 전역 함수를 별도로 제공한다.
함수 | 설명 |
---|---|
parseInt() |
문자열을 파싱하여 특정 진법의 정수를 반환함. |
parseFloat() |
문자열을 파싱하여 부동 소수점 수를 반환함. |
(5) 불리언 값을 숫자로 변환
- 불리언 값을 숫자로 변환하는 방법에는
Number()
함수를 방법이 있다.
4. 변수
1) 변수의 선언과 초기화
- 변수란 데이터를 저장할 수 있는 메모리 공간을 의미하며, 그 값이 변경될 수 있다.
- 자바스크립트에서는
var
키워드를 사용하여 변수를 선언한다.
- 자바스크립트에서는 선언되지 않은 변수를 사용하려고 하거나 접근하려고 하면 오류가 발생한다.
- 단, 선언되지 않은 변수를 초기화할 경우에는 자동으로 선언을 먼저 한 후 초기화를 진행한다.
- 선언된 변수는 나중에 초기화할 수도 있고, 선언과 동시에 초기화할 수도 있다.
,
(쉼표) 연산자를 이용하여 여러 변수를 동시에 선언하거나 초기화할 수도 있다.
var month, date; // 여러 변수를 한 번에 선언
var hours = 7,
minutes = 15; // 여러 변수를 선언과 동시에 초기화
(month = 10), (date = 5); // 여러 변수를 한 번에 초기화
2) 변수의 타입과 초깃값
- 자바스크립트의 변수는 타입이 정해져 있지 않으며, 같은 변수에 다른 타입의 값을 다시 대입할 수도 있다.
- 이렇게 한 변수에 다른 타입의 값을 여러 번 대입할 수는 있지만, 한 번 선언된 변수를 재선언할 수는 없다.
- 배열(Array)이란 여러 값들로 이루어진 하나의 집합을 의미한다.
- 자바스크립트에서 선언만 되고 초기화하지 않은 변수는
undefined
값을 가진다.
3) 변수의 이름
- 자바스크립트에서 변수는 이름을 가지고 식별하므로, 변수의 이름은 식별자(Identifier)이다.
- 변수의 이름은 영문자(대소문자), 숫자,
_
(언더스코어) 또는$
(달러)로만 구성된다. - 또한, 숫자와의 구분을 빠르게 하려고 숫자로는 시작할 수 없다.
- 이러한 변수의 이름은 대소문자를 구분하며, 자바스크립트에서 예약된 키워드는 이름으로 사용할 수 없다.