자바스크립트의 데이터 타입은 크게 원시 타입, 객체 타입으로 또 나뉜다.
구분 | 데이터 타입 | 설명 |
---|---|---|
원시 타입 | string | 문자열 |
number | 숫자, 정수와 실수 구분 없이 하나의 숫자 타입만 존해 | |
boolean | 논리적 참(true), 거짓(false) | |
null | 값이 없다는 것을 의도적으로 명시할 때 사용하는 값 | |
undefined | var키워드로 선언된 변수에 암묵적으로 할당되는 값 | |
symbol | ES6에서 추가된 7번째 타입 | |
객체 타입 | 객체 함수, 배열 등 |
텍스트 데이터를 나타내는 데 사용한다.
문자열은 작은 따옴표(''), 큰따폼표(""), 백틱(``) 으로 텍스트를 감싼다.
가장 일반적인 표기법은 작은 따옴표를 사용하는 것이다.
const name = "yeon";
const age = 30;
const msg = `My name is ${name}`;
const msg1 = `제 나이는 ${age + 1}입니다.`
console.log(msg); // "My name is yeon"
console.log(msg1); //"제 나이는 31입니다."
❓ 문자열은 왜 따옴표로 감쌀까?
키워드나 식별가 같은 토큰과 구분하기 위해서다.
만약 문자열을 따옴표로 감싸지 않으면 자바스크립트 엔진은 키워드나 식별 같은 토큰으로 인식한다.
만약 따옴표로 문자열을 감싸지 않는다면 스페이스와 같은 공백 문자도 포함시킬 수 없다.
ES6 부터 새로운 문자열 표기법이 도입되었다.
일반 문자열과 차이점은 일반적인 따옴표 ('', "") 대신 백틱(``) 을 사용해 표현한다.
일반 문자열에서는 줄바꿈이 허용되지 않기 때문에 줄바꿈 등의 공백 (white space) 를 표현하려면 백슬래시(\
)로 시작하는 이스케이프 시퀀스 (escape sequence) 를 사용해야 했다.
string
줄바꿈을 해 보자.let name = "my name is
uoah"; // Uncaught SyntaxError: Unexpected end of input
string
이스케이프 시퀀스를 사용해 보자.let name = "my name is\
uoah";
console.log(name); //"my name is uoah"
템플릿 리터럴 내에서는 이스케이프 시퀀스를 사용하지 않고도 줄바꿈이 허용되며, 모든 공백도 있는 그대로 적용된다.
let name = `my name is
uoah`;
console.log(name); //"my name is uoah"
string
은 문자열 연산자 + 를 사용해 연결할 수 있다.
+ 연산자는 피연산자 중 하나 이상이 문자열인 경우 문자열 연결 연산자 로 동작한다. (그 외 덧셈 연산자로 동작)
let name = "uoah";
console.log('안녕하세요. 제 이름은 ' + name + ' 입니다.');
// "안녕하세요. 제 이름은 uoah 입니다."
템플릿 리터럴 내에서는 표현식 삽입 을 통해 보다 가독성 좋고 간단하게 문자열을 삽입할 수 있다.
let name = "uoah";
let address = "seoul";
console.log(`안녕하세요. 제 이름은 ${name} 입니다.
저는 ${address} 에 삽니다.`);
// "안녕하세요. 제 이름은 uoah 입니다.
// 저는 seoul 에 삽니다."
표현시을 삽입하려면 ${ } 으로 표현식을 감싼다. 이때 표현식의 평가 결과가 문자열이 아니더라도 문자열로 타입이 강제 변환되어 삽입된다.
console.log(`1 + 2 = ${1 + 2}`); // "1 + 2 = 3"
표현식 삽입은 반드시 템플릿 리터럴 내에서 사용 해야 한다. 일반 문자열에서 사용시 문자열로 취급된다.
console.log('1 + 2 = ${1 + 2}'); // "1 + 2 = ${1 + 2}"
자바스크립트의 숫자 타입은 모든 수를 실수로 처리하며, 정수만 표현하기 위한 데이터 타입은 별도로 존재하지 않는다.
즉, 2진수, 8진수, 16진수를 표현하기 위한 데이터 타입을 제공하지 않기 때문에 이들 값을 참조하면 모두 10진수로 해석된다.
숫자 타입은 추가적으로 세 가지 특별한 값도 표현할 수 있다.
const age = 30; // 숫자형 Number
const PI = 3.14;
console.log(1 + 2); // 더하기 3
console.log(10 - 3); // 빼기 7
console.log(3 * 2); // * 곱하기 6
console.log(6 / 3); // / 나누기 2
console.log(6 % 4); // 나머지 2
const x = 1/0;
console.log(x); //Infinity
const name = 'yeon';
const y = name/2;
console.log(y);
// NaN = Not a number
// NaN은 숫자가 아니라는 뜻으로 숫자와 관련된 작업시 NaN이 아닌지 항상 염두하여야 한다.
불리언 타입의 참과 거짓으로 구분되는 조건에 의해 프로그램의 흐름을 제어하는 조건문에서 자주 사용한다.
const a = true; // 참
const b = false; // 거짓
const name = "yeon";
const age = 30;
console.log(name === "yeon"); // true
console.log(age > 40); // false
추후 조건문에서 더 자세히 살펴보자.
let age;
console.log (age); // 변수를 선언만 하고 아무것도 할당하지 않으면 undefined
let user = null; // 값이 존재하지 않음
그 외 객체형과 심볼형은 나중에 자세히 보자.
const name = "yeon";
const a = "저는";
const b = "입니다";
console.log(a + name + b); // "저는yeon입니다"
const age = 30; // 숫자형
console.log(a + age + b); // "저는30입니다"
다른 개발자가 작성한 변수의 타입을 알아야 하거나 api 통신 등을 통해 받아온 데이터를 타입에 따라 다르게 처리 해야 할 때 많이 사용한다.
연산자 뒤에 위치한 피연산자의 데이터 타입을 문자열로 반환환다.
아래의 예시 중 typeof null; // "object" 객체형으로 나오지만 null 은 객체가 아님 (!) 초기 자바스크립트의 오류이나 하위 호환성 유지를 위해 수정하지 않고 있다고 한다.
const name = "yeon";
console.log(typeof 3); // number
console.log(typeof name); // string
console.log(typeof true); // boolean
console.log(typeof "xxx"); // string
console.log(typeof null); // object
console.log(typeof undefined); // undefined