- 데이터 타입(data type): 값의 종류를 말한다.
자바스크립트의 모든 값은 데이터 타입을 갖는다.
자바스크립트는 7개의 데이터 타입을 제공한다. 원시 타입(primitive type)과 객체 타입(object/reference type)으로 분류된다.
구분 | 데이터 타입 | 설명 |
원시 타입 | 숫자(number) 타입 | 숫자. 정수와 실수 구분 없이 하나의 숫자 타입만 존재 |
문자열(string) 타입 | 문자열 | |
불리언(boolean) 타입 | 논리적 참(true)과 거짓(false) | |
undefind 타입 | var 키워드로 선언된 변수에 암묵적으로 할당되는 값 | |
null 타입 | 값이 없다는 것을 의도적으로 명시할 때 사용하는 값 | |
심볼(symbol) 타입 | ES6에서 추가된 7번째 타입 | |
객체 타입 | 객체, 함수, 배열 등 |
숫자 타입
자바스크립트는 하나의 숫자 타입만 존재한다.
숫자 타입의 값은 배정밀도 64비트 부동소수점 형식을 따른다.
자바스크립트는 모든 수를 실수로 처리한다.
//모두 숫자 타입이다
var integer = 10;
var double = 10.12;
var negative = -20;
// 숫자 타입은 모두 실수로 처리된다
console.log(1 === 1.0); // true
console.log(4/2); // 2
console.log(3/2); // 1.5
정수, 실수, 2진수, 8진수, 16진수 리터럴은 모두 2진수로 저장된다.
2진수, 8진수, 16진수를 표현하기 위한 데이터 타입을 제공하지 않기 때문에 이들 값을 참조하면 모두 10진수로 해석된다.
var binary = 0b01000001; // 2진수
var octal = 0o101; // 8진수
var hex = 0x41; // 16진수
console.log(binary); // 65
console.log(octal); // 65
console.log(hex); // 65
console.log(binary === octal); //true
console.log(octal === hex); // true
숫자 타입은 추가적으로 세가지 특별한 값도 표현할 수 있다
- Infinity : 양의 무한대
- -Infinity : 음의 무한대
- NaN : 산술 연산 불가 (not-a-number)
console.log(1 / 0); // Infinity
console.log(1 / -0); // -Infinity
console.log(1 * 'String'); // NaN
문자열 타입
문자열 타입은 텍스트 데이터를 나타내는 데 사용한다.
var string
string = '문자열'; // 작은따옴표
string = "문자열"; // 큰따옴표
string = `문자열`; // 백틱
//문자열 안에 큰따옴표를 넣고 싶다면
string = '작은따옴표로 감싼 문자열 내의 "큰따옴표"는 문자열로 인식된다.';
//문자열 안에 작은 따옴표를 넣고 싶다면
string = "큰따옴표로 감싼 문자열 내의 '작은따옴표'는 문자열로 인식된다.";
string = 문자열; // 따옴표로 감싸지 않은 문자열을 식별자로 인식한다
따옴표로 감싼 일반 문자열 내에서는 줄바꿈(개행)이 허용되지 않는다.
var str = 'Hello
world.'; // SyntaxError
문자열은 +를 사용해 연결할 수 있다.
var first = 'bear soo';
var last = 'Kim';
console.log('My name is ' + first + ' ' + last + '.'); // My name is bear soo Kim;
템플릿 리터럴
백틱( ` `)을 사용해 표현하면 문자열 내에서 줄바꿈이 가능하다 -> 멀티라인 문자열
var template = `<ul>
<li><a href="#">Home</a></li>
<ul>`;
console.log(template);
/*
<ul>
<li><a href="#">Home</a></li>
<ul>
*/
문자열을 연결할 때 ${ }로 표현식을 감싸 삽입할 수 있다.
var first = 'bear soo';
var last = 'Kim';
console.log(`My name is ${first} ${last}.`); // My name is bear soo Kim
표현식의 평가 결과가 문자열이 아니더라도 문자열로 타입이 강제로 변환되어 삽입 된다.
console.log(`1 + 2 = ${1 + 2}`); // 1 + 2 = 3
불리언 타입
불리언 타입의 값은 논리적 참, 거짓을 나타내는 true와 false뿐이다.
var foo = true;
console.log(foo); // true
foo = false;
console.log(foo); // false
undefind 타입
변수 선언에 의해 확보된 메모리 공간을 처음 할당이 이뤄질 때까지 빈 상태로 내버려 두지않고 자바스크립트 엔진이 undefined로 초기화 한다.
변수가 undefined면 값이 할당된 적이 없는, 초기화되지 않은 변수이다.
var foo
console.log(foo); // undefined
변수에 값이 없다고 의도적으로 명시해 주고 싶으면 undefined가 아닌 null을 할당 해 준다.
null 타입
변수에 값이 없다는것을 의도적으로 명시할 때 사용한다.
var foo = "kim";
//이전 참조를 제거하여 foo가 'kim'을 더이상 참조하지 않게 만들고 싶다면
foo = null;
심벌 타입
- 심볼타입: 변경 불가능한 원시 타입이다.
심벌은 Symbol 함수를 호출해 생성한다.
//심벌 값 생성
var key = Symbol('key');
console.log(typeof key); // symbol
//객체 생성
var obj = {};
//심벌을 프로퍼티 키로 사용
obj[key] = 'value';
console.log(obj[key]); // value
데이터 타입의 필요성
1. 데이터 타입에 의한 메모리 공간의 확보와 참조
메모리에 값을 저장하려면 먼저 확보해야할 메모리 공간의 크기를 결정해야 한다.
변수에 할당되는 값의 데이터 타입에 따라 확보해야 할 메모리 공간의 크기가 결정된다.
2. 데이터 타입에 의한 값의 해석
메모리에서 읽어드린 2진수를 어떻게 해석하는지 데이터 타입에 따라 결정된다.
동적 타이핑
자바스크립트의 변수는 정적 타입 언어와 같이 미리 선언한 데이터 타입의 값만 할당할 수 있는 것이 아니고 어떠한 데이터 타입의 값이라도 자유롭게 할당할 수 있다.
- 동적 타이핑: 변수의 타입이 동적으로 변하는 것을 말한다.
자바스크립트 변수는 선언이 아닌 할당에 의해 타입이 결정된다 그리고 재할당에 의해 변수의 타입은 언제든지 동적으로 변할 수 있다. 이러한 특징을 동적 타이핑이라 한다.
변수를 사용할 때 주의할 사항
- 변수는 꼭 필요한 경우에 한해 제한적으로 사용한다.
- 변수의 유효 범위(스코프)는 최대한 좁게 만들어 변수의 부작용을 억제해야 한다.
- 전역 변수는 최대한 사용하지 않도록 한다.
- 변수보다는 상수를 사용해 값의 변경을 억제한다.
- 변수 이름은 변수의 목적이나 의미를 파악할 수 있도록 네이밍한다.
참고
모던 자바스크립트 Deep Dive : 네이버 도서
네이버 도서 상세정보를 제공합니다.
search.shopping.naver.com
'Javascript' 카테고리의 다른 글
[모던 자바스크립트 Deep Dive] 09장 - 타입 변환과 단축 평가 (0) | 2024.11.04 |
---|---|
[모던 자바스크립트 Deep Dive] 08장 - 제어문 (0) | 2024.11.04 |
[모던 자바스크립트 Deep Dive] 07장 - 연산자 (1) | 2024.10.30 |
[모던 자바스크립트 Deep Dive] 05장 - 표현식과 문 (0) | 2024.10.24 |
[모던 자바스크립트 Deep Dive] 04장 - 변수 (1) | 2024.10.24 |