데이터 타입은 프로그래밍 언어에서 사용할 수 있는
데이터의 종류를 말한다.
자바스크립트의 모든 값은 데이터 타입을 가지며
자바스크립트 ES6은 7개의 데이터 타입을 제공한다.
자바스크립트에서 제공하는 7개의 데이터 타입은 크게
원시 타입(primitive data type)과 객체 타입(object / reference type)으로 구분할 수 있다.
자바스크립트의 number type은 모든 수를 실수로 처리한다.
정수로 표시된다해도 사실은 실수다. 따라서 정수로 표시되는 수 끼리
나누더라도 실수가 나올 수 있다.
정수만을 표현하기 위한 특별한 자료형은 없다.
(java를 공부할 때 있던 int, long, float, double과 같은 타입은 없었다)
소수점을 표현할 수 있단 것 외에도, Number 타입은
세 가지 특이한 값들도 표현할 수 있다.
+Infinity(양의 무한대), -Infinity(음의 무한대),
and NaN ("Not a Number", 산술 연산 불가)이 있다.
ex)
const count = 30; // > 정수
const size = 30.1; // > 실수
console.log(`value: ${count}, type: ${typeof count}`);// > number type 출력
console.log(`value: ${size}, type: ${typeof size}`);// > number type 출력
// 특이한 값: infinity, -infinity, NaN
const infinity = 3 / 0;
const negativeInfinity = -3 / 0;
const nAn = `not a number` / 3;
console.log(infinity); // > Infinity
console.log(negativeInfinity); // > -Infinity
console.log(nAn); // > NaN
문자열(string) 타입은 텍스트 데이터를 나타내는데 사용.
자바스크립트의 문자열은 변경 불가능 (immutable) 하다.
한 번 문자열이 생성되면, 그 문자열을 수정할 수 없다는 것.
그러나 원래 문자열에서 일부가 수정된 다른 문자열을 만드는건 가능하다
(예시를 드는 게 이해가 잘 되었다.)
ex)
let name = 'kang';
name = 'jiwon';
// 코드 첫 줄의 문자열 kang이 생성되었으므로 앞으로 kang은 재사용 x
// 변수 str은 문자열 ‘kang’을 가리키고 있다가
//문자열 ‘jiwon’을 가리키도록 변경되었다.
논리적인 데이터 유형으로 참(true) 혹은 거짓(false) 값만을 가질 수 있다
어떤 코드 부문을 실행하거나 반복이 필요할 때 사용된다.
ex)
function findGreaterNum(num1, num2) {
if(num1 > num2) {
return "Big one";
} else if(num1 < num2) {
return "Big two";
} else if(num1 === num2) {
return "equal num" ;
}
}
const result = findGreaterNum(1,2);
console.log(result);
// 결과값으론 big two가 출력되었다.
// if 함수 안의 값이 true라면(= 조건이 맞다면)
// 해당 return 값을 돌려주겠다는 의미의 코드였다.
// 코드를 짜며 어디에 쓸 수 있을까 잠깐 고민해봤는데
// 웹 실행 시 다크 모드에 쓸 수 있겠다는 생각이 들었다.
undefined 타입의 값은 undefined가 유일
값을 할당하지 않은 변수는 undefined 자료형입니다.
메서드와 선언도 평가할 변수가 값을 할당받지 않은 경우에 undefine 반환
ex)
let k ;
console.log(k);// 변수 k에 대한 value가 없기 때문에 undefined 출력
null 타입의 값은 null이 유일.
어떤 값이 의도적으로 비어있음을 표현하며
boolean 연산에서는 거짓으로 취급한다.
null은 Null, NULL등과 다르다.(JS는 대소문자를 구분하기 때문)
undefined와 다르게 null은 원시 타입(primitive value)이므로,
JavaScript에서는 구현 버그로 간주한다.
undefined == null은 true이다.
하지만 자료형까지 엄격하게 검사하는 일치 연산자인 ===를 써보면
null과 undefined의 자료형이 다르기 때문에 false가 출력된다
ex)
// symbol은 개체에 대한 고유 식별자를 생성한다.
const symbol1 = Symbol('k');
const symbol2 = Symbol('k');
console.log(symbol1 === symbol2);
// false : 동일한 string을 작성해도 다른 symbol로 만들어짐
// string 이 같을 때 동일한 symbol 만들기
const gSymbol1 = Symbol.for('k');
const gSymbol2 = Symbol.for('k');
console.log(gSymbol1 === gSymbol2); // true
원시 타입(Primitives)을 제외한 나머지 값들(배열, 함수, 정규표현식 등)은 모두 객체이다
객체는 프로퍼티를 변경, 추가, 삭제가 가능하므로 변경 가능(mutable)한 값이라 할 수 있다
let foo = {
val: 10
}
let bar = foo;
console.log(foo.val, bar.val); // 10 10
console.log(foo === bar); // true
bar.val = 20;
console.log(foo.val, bar.val); // 20 20
console.log(foo === bar); // true
let a = {}, b = {}, c = {}; // a, b, c는 각각 다른 빈 객체를 참조
console.log(a === b, a === c, b === c); // false false false
a = b = c = {}; // a, b, c는 모두 같은 빈 객체를 참조
console.log(a === b, a === c, b === c); // true true true
특징은 외우되 예제는 많이 써봐야 한단 걸 깨달았다.
코드는 절대 외우는 게 아니다!
Reference
MDN
PoiemaWeb
25%
Dream coding