자바스크립트의 값은 원시 타입(Primitive Type)과 객체(참조형)으로 나뉜다.
📍 원시 타입
하나의 값만 가지며, 불변 데이터이다.
종류로는 Number, String, Boolean, Null, Undefined, Symbol, BigInt 타입이 있다.
Number
숫자를 표현하는 타입
정수, 실수 구분 없이 숫자 타입 하나만 존재
cf) NaN (Not a Number)
: 숫자로 변환할 수 없는 값을 숫자로 변환하려고 하거나, 산술 결과가 숫자가 아닌 경우 반환
String
텍스트를 표현하는 타입
홑따옴표(''), 쌍따옴표(""), 백틱(``)을 이용해 표현
- 이스케이프
: 텍스트 데이터로 홑따옴표, 쌍따옴표를 사용할때 역슬래시( \ ) 문자로 이스케이프 처리해 사용
const message = 'I\'m a test message';
- 템플릿 리터럴
: ES2015 이후 등장
: 변수나 상수 조합에 사용 `${}`
const lang = 'JavaScript';
const sentence = `Hello, ${lang}`;
Boolean
true, false 값만 가지며, 참과 거짓을 표현할 때 사용
Null 과 Undefined
- null : 값이 없음
- undefined : 값이 할당되지 않음
값이 비어있다 == 값이 없다, 할당되지 않았다
Symbol
ES2015에서 도입된 원시 타입으로, 데이터의 유일함을 나타낼 때 사용
Symbol() 함수를 호출해 생성 (단, 원시 타입이므로 new 키워드 붙이지 않음)
객체나 클래스에서 유일한 프로퍼티 만들때 사용
const sym1 = Symbol('foo');
const sym2 = Symbol('foo');
console.log(sym1 === sym2); // false
- 전역 심볼
: Symbol.for() 메서드
: 인자로 전달받은 키를 갖는 심볼을 전역 심볼 레지스트리에서 탐색 후 반환
: 탐색 실패시, 해당 키로 심볼 생성 후, 전역 심볼 레지스트리에 저장
BigInt
ES2020에서 추가된 타입
기존 숫자 범위보다 큰 정수를 표현하기 위해 등장
정수 뒤에 n 또는 BigInt() 함수 호출
❗️숫자 타입이나 Math 객체의 메서드를 함께 사용해 연산할 수 없음 → 명시적으로 타입 변환 필요
const bigNum = 1n;
const num = 2;
console.log(bigNum + num); // TypeError: Cannot mix BigInt and other types, use explicit conversions
📍 객체
원시 타입을 제외한 나머지 타입
함수, 배열, 정규식 등도 객체에서 파생된 특수한 타입이다.
생성 방법
- Object 생성자 함수
: 객체를 생성하도록 자바스크립트에 내장된 생성자 함수
const obj = new Object();
- 객체 리터럴
: 중괄호 {} 사용하여 객체 생성 → 가장 많이 쓰임
const obj = {};
- 생성자 함수
: 함수를 선언하고 new 키워드로 호출하여 생성자 함수로 동작 → 새로운 객체 생성
function Animal(type) {
this.type = type;
}
const dog = new Animal('Dog');
(단, 화살표 함수는 생성자 함수로 사용할 수 없다.)
객체 프로퍼티 접근
자바스크립트 객체는 생성된 후에도 동적으로 프로퍼티 추가하거나 갱신 가능
- 점 표기법 또는 대괄호 표기법으로 접근
const obj = {};
obj.name = 'test'; // 점 표기법
obj['age'] = '23'; // 대괄호 표기법
❗️단, 변수를 사용해 프로퍼티에 접근하거나, 프로퍼티 명에 연산자가 포함된 경우는 반드시 대괄호 표기법 사용
const obj = {};
const prop = 'name';
obj[prop] = 'test';
obj['test-age'] = '23';
- getter와 setter 접근자 프로퍼티
: 어떤 프로퍼티에 접근할 때마다 동적인 계산이 필요하거나 별도의 처리 코드가 필요할 때 사용
1. 객체 리터럴 문법 사용 → get / set 문법
: 메서드 안에서 this키워드가 객체 자신을 가리키므로 객체의 프로퍼티에 접근 가능
2. Object.defineProperty()
: 객체에 직접 새로운 프로퍼티 정의하거나 수정 후, 그 객체 반환
: 프로퍼티 서술자
// 객체 리터럴 - get/set 문법 사용
const obj = {
myCount: 0,
get getCount() {
return this.myCount;
},
// value가 null이 아니고 0보다 클 경우 값을 갱신
set setCount(value) {
if(value && value > 0){
this.myCount = value;
}
}
}
obj.setCount = -2;
console.log(obj.getCount); // 0
// Object.defineProperty() 사용
const obj = { myCount : 0 };
Object.defineProperty(obj, 'count', {
get(){
return this.myCount;
},
set(value){
if(value && value > 0) {
this.myCount = value;
}
},
});
obj.count = 10;
console.log(obj.count); // 10
++ 참고
'Language > JavaScript' 카테고리의 다른 글
[JS] 이미지 전송; base64와 FormData (0) | 2024.04.13 |
---|---|
[JS] 변수 선언 (0) | 2024.02.26 |
[JS] JavaScript 역사 (0) | 2024.02.26 |
JavaScript 기초와 활용(feat. 조코딩) (0) | 2023.02.18 |