변수라는 저장소에 값을 저장하기 위해서는 메모리 공간을 확보해야할 메모리 크기를 알아야하는데 값의 종류에 따라 확보해야할 메모리의 크기가 다릅니다. 이 때 값의 종류를 data type
이라고 한다.
원시 타입의 값은 변경 불가능한 값이고 값에 의한 전달만 가능한 data type
이다.
let integer = 10; // 정수
let double = 10.12; // 실수
let negative = -20; // 음의 정수
let binary = 0b01000001; // 2진수
let octal = 0o101; // 8진수
let hex = 0x41; // 16진수
var pInf = 10 / 0; // 양의 무한대
console.log(pInf); // Infinity
var nInf = 10 / -0; // 음의 무한대
console.log(nInf); // -Infinity
var nan = 1 * 'string'; // 산술 연산 불가
console.log(nan); // NaN
number
는 숫자를 나타내는 data type
이며 모든 수를 실수로 처리하며 정수를 표현하기 위한 데이터 타입은 없다.
var str = "string"; // 큰 따옴표
str = 'string'; // 작은 따옴표
str = `string`; // 백틱(ES6 템플릿 리터럴)
string
은 문자를 나타내는 data type
으로 값에 큰,작은,백틱 따옴표를 이용하여 string
타입을 선언할 수 있다.
const bread = 'bread'
const eat = 'eat' + bread
console.log(`value: ${eat}, type: ${typeof eat}`) //value: eatbread, type: string
템플릿 리터럴
나오기전에는 문자열 연결을
console.log('My name is' + '' + '')
처럼 +
로 연결해 주어야 했다.
템플릿 리터럴
을 이용하면 백틱 안에 있는 ${ } 안의 내용들은 모두 문자열로 강제 타입 변환되어 코드를 작성하기 쉬워지고 깔끔해 진다.
// false: 0, -0 , ''
// true: -1 , 'string' , []
let a = ture
let b = false
console.log(typeof a) // boolean
console.log(typeof b) // boolean
------------------------------------------------------------------>
// false: 0, -0 , ''
// true: -1 , 'string' , []
let num; //undefined
num = 9;
if (num) {
console.log('true!');
}
//let num
num && console.log(num); // 값 없음
//num = 9
num && console.log(num); // true! 9
//&& 연산자는 앞에가 true가 되어야만 뒤에가 실행된다.
boolean
은 참과 거짓을 구분하는 타입으로
''
, NaN , null
, undefined
, 0
은 false 로 확정된다.
let a;
console.log(a) // undefined
undefined 타입은 선언 이후 값을 할당하지 않으면 자바스크립트 엔진에서 자동으로 undefined를 할당하는 타입이다.
만약 변수를 참조했을 때 undefined
가 반환된다면 할당되지 않은 변수라는 것을 알 수 있다.
하지만 자바스크립트 엔진이 자동적으로 값이 할당되지 않으면 undefined
로 할당을 해주는데
할당되지 않은 변수라는 것을 알리기 위해 개발자가 의도하여 undefined
를 주게되면 엔진에 혼란을 줄 수 있기 때문에 할당하면 안된다.
let not = null
console.log(`value: ${not}, type: ${not}`) // value: null, type: null
변수에 값을 할당하지 않으면 자동적으로 undefined
가 할당되는 것과 다르게 null
은 개발자가 의도하여 텅텅 비어있는 값이다 라는 것을 명시하기 위한 타입이다.
// 심볼 key는 이름의 충돌 위험이 없는 유일한 객체의 프로퍼티 키
var key = Symbol('key');
console.log(typeof key); // symbol
var obj = {};
obj[key] = 'value';
console.log(obj[key]); // value
심볼 (symbol)은 이름의 충돌 위험이 없는 유일한 객체의 프로퍼티 키(property key)를 만들기 위해 사용한다.
심볼은 (Symbol) 함수를 호출해 생성한다. 이때 생성된 심볼 값은 다른 심볼 값들과 다른 유일한 심볼 값이다.
객체는 데이터와 그 데이터에 관련한 동작(절차, 방법, 기능)을 모두 포함할 수 있는 개념적 존재이다. 달리 말해, 이름과 값을 가지는 데이터를 의미하는 프로퍼티(property)와 동작을 의미하는 메소드(method)를 포함할 수 있는 독립적 주체이다.
자바스크립트는 객체(object) 기반의 스크립트 언어로서 자바스크립트를 이루고 있는 거의 “모든 것”이 객체이다. 원시 타입(Primitives)을 제외한 나머지 값들(배열, 함수, 정규표현식 등)은 모두 객체이다. 그리고 객체는 pass-by-reference(참조에 의한 전달) 방식으로 전달된다.
참고자료
데이터 타입과 변수