데이터 타입은 값의 종류를 말함. 자바스크립트(ES6)는 7개의 데이터 타입을 제공. 크게 원시 타입과 객체 타입으로 분류.
// 모두 숫자 타입
var integer = 10; // 정수
var double = 10.12; // 실수
var negative = -20; // 음의 정수
var binary = 0b01000001; // 2진수
var octal = 0o101; // 8진수
var hex = 0x41; // 16진수
// 표기법만 다를 뿐 모두 같은 값이다.
console.log(binary); // Output: 65
console.log(octal); // Output: 65
console.log(hex); // Output: 65
console.log(binary === octal); // Output: true
console.log(octal === hex); // Output: true
// 숫자 타입은 모두 실수로 처리된다.
console.log(1 === 1.0); // Output: true
console.log(4 / 2); // Output: 2
console.log(3 / 2); // Output: 1.5
console.log(10 / 0); // Output: Infinity
console.log(10 / -0); // Output: -Infinity
console.log(1 * 'String'); // Output: NaN
// 문자열 타입
var string;
string = '문자열'; // 작은따옴표
string = '문자열'; // 큰따옴표
string = `문자열`; // 백틱 (ES6)
string = '작은따옴표로 감싼 문자열 내의 "큰따옴표"는 문자열로 인식된다.';
string = "큰따옴표로 감싼 문자열 내의 '작은따옴표'는 문자열로 인식된다.";
var template = `Template literal`;
console.log(template); // Template literal
// 일반 문자열
var str = 'Hello
world.';
// Output: SyntaxError: Invalid or unexpected token
// 템플릿 리터럴
var template = `Hello
world`;
console.log(template);
// Output: Hello
// Output: world
var first = 'Ung-mo';
var last = 'Lee';
// ES5: 문자열 연결
console.log('My name is ' + first + ' ' + last + '.'); // Output: My name is Ung-mo Lee.
// ES6: 표현식 삽입
console.log(`My name is ${first} ${last}.`); // Output: My name is Ung-mo Lee.
// 템플릿 리터럴 표현식 강제 타입 변환
console.log(`1 + 2 = ${1 + 2}`); // Output: 1 + 2 = 3
// 템플릿 리터럴이 아닌 일반 문자열
console.log('1 + 2 = ${1 + 2}'); // Output: 1 + 2 = ${1 + 2}
var foo = true;
console.log(foo); // Output: true
foo = false;
console.log(foo); // Output: false
var foo;
console.log(foo); // Output: undefined
var foo = 'Lee';
// 이전에 할당되어 있던 값에 대한 참조를 제거. foo 변수는 더 이상 'Lee'를 참조하지 않는다.
// 유용해 보이지는 않는다. 변수의 스코프를 좁게 만들어 변수 자체를 재빨리 소멸시키는 편이 낫다.
foo = null;
// 심벌 값 생성
var key = Symbol('key');
console.log(typeof key); // Output: symbol
// 객체 생성
var obj = {};
// 이름이 충돌할 위험이 없는 유일무이한 값인 심벌을 프로퍼티 키로 사용한다.
obj[key] = 'value';
console.log(obj[key]); // Output: value
// 같은 형태로 생성해도 다른 값이다
console.log(Symbol(
자바스크립트를 이루고 있는 거의 모든 것이 객체
임. 지금까지 살펴본 6가지 타입 이외의 값은 모두 객체 타입.메모리 공간의 크기
를 결정하기 위해.메모리 공간의 크기
를 결정하기 위해.2진수를 어떻게 해석할지
결정하기 위해.// c 변수에는 1바이트 정수 타입의 값(-128 ~ 127)만을 할당할 수 있다.
char c;
// num 변수에는 4바이트 정수 타입의 값(-2,124,483,648 ~ 2,124,483,647)만을 할당할 수 있다.
int num;
// typeof 연산자는 연산자 뒤에 위치한 피연산자의 데이터 타입을 문자열로 반환.
var foo;
console.log(typeof foo); // Output: undefined
foo = 3;
console.log(typeof foo); // Output: number
foo = 'Hello';
console.log(typeof foo); // Output: string
foo = true;
console.log(typeof foo); // Output: boolean
foo = null;
console.log(typeof foo); // Output: object
foo = Symbol(); // 심벌
console.log(typeof foo); // Output: symbol
foo = {}; // 객체
console.log(typeof foo); // Output: object
foo = []; // 배열
console.log(typeof foo); // Output: object
foo = function () {}; // 함수
console.log(typeof foo); // Output: function
자바스크립트의 변수는 선언이 아닌 할당에 의해 타입이 결정됨.(타입 추론) 그리고 재할당에 의해 변수의 타입은 언제든지 동적으로 변할 수 있음.
정적 타입 언어와 구별하기 위해 이를 동적 타입 언어라 함.변수 값은 언제든지 변경될 수 있기 때문에 복잡한 프로그램에서는 변화하는 변수 값을 추적하기 어려울 수 있음.
변수 값을 확인하기 전에 타입을 확신할 수 없음.
개발자의 의도와는 상관 없이 자바스크립트 엔진에 의해 암묵적으로 타입이 자동 변환되어 예기치 못한 오류를 마주할 수 있음.
이러한 이유로 안정적인 프로그램을 만들기 위해 변수 사용 전 데이터 타입을 체크해야 하는 경우가 있는데 매우 번거로울뿐더러 코드량도 증가함.