[JavaScript] 자바스크립트의 자료형

sion·2022년 3월 19일
0

javascript

목록 보기
1/1

Javascript의 자료형

동적타입

Javascript는 느슨한 타입의 동적 언어이다. 즉 변수는 어떤 특정 타입과 연결되지 않으며, 모든 타입의 값으로 할당이 가능하다.

let x = 42;
x = 'bar';
x = true;

원시타입 vs 객체타입

자바스크립트는 크게 원시타입과 객체타입으로 나뉜다.

  • 원시타입
    - Boolean, Null, Undefined, Number, BigInt, String, Symbol
  • 객체타입 (속성의 컬렉션)

원시타입

객체를 제외한 모든 타입은 불변 값을 정의한다. (변경할 수 없는 값)

Boolean

  • Boolean타입은 논리 요소를 나타내며 true, false 두 가지의 값을 가질 수 있다.
  • 0, -0, null, false, NaN, undeifined, "" 이라면 객체의 초기값은 false이다.
  • 위의 예시 이외의 값은 true로 설정한다.
  • 값이 undefined, null이 아닌 모든 객체는 조건문에서 true로 계산된다.
  • 이는 값이 false인 Boolean객체도 포함된다.
const x = new Boolean(false);
if (x) {
	// 코드 실행 가능
}
const x = false;
if (x) {
	// 코드 실행 불가능.
}

Null

  • Null은 어떤 값이 의도적으로 비어있음을 표현한다.
  • Boolean 연산에서는 false로 취급한다.
  • 특정 경우에, null은 원시적이지 않다. 모든 객체는 null값으로부터 파생되며 따라서 typeof 연산자에서는 object를 반환한다.
typeof null === 'object' // true

Undefined

  • 변수를 선언한 후 값을 할당하지 않은 변수 혹은 값이 주어지지 않는 인수에 자동으로 할당된다.
function test(x) {
	let y;
  	console.log(x); // undefined
  	console.log(y); // undefined
}
test();

Number

  • Number 타입은 -(2^53 - 1) ~ (2^53 - 1) 까지의 값을 가질 수 있다.
  • 부동소수점 숫자 외에도 +Infinity, -Infinity, Nan("Not a Number") 값을 가질 수 있다.
  • 0, -0으로도 표현 가능하며 +0 === -0 은 참이다.
> 42 / +0
Infinity
> 42 / -0
-Infinity

BigInt

  • 임의 정밀도로 정수를 나타낼 수 있다.
  • Number의 안전 한계를 넘어서는 큰 정수도 저장과 연산을 할 수 있다.
  • BigInt는 정수 끝에 n을 추가하거나 생성자를 호출해 생성할 수 있다.
  • BigInt는 Number와 혼합해 연산할 수 없으며, 이때 TypeError가 발생한다.
> const x = 2n ** 53n;
9007199254740992n
> const y = x + 1n;
9007199254740993n

String

  • String은 문자열을 나타내는 타입이며 인덱스 0 ~ 시작하게된다.
  • C언어와 달리 Javascript 문자열은 불변하다.
  • 따라서 문자열 연산이 필요하다면 원본 문자열을 사용해 새로운 문자열을 생성해야한다.

Symbol

  • 변경 불가능하며 다른 값과 중복되지 않는 고유한 값이다.
  • 충돌 위험이 없는 오브젝트의 유일한 프로퍼티 키를 만들기 위해서 사용할 수 있다.
  • 심볼 값은 외부로 노출되지 않아 확인할 수 없다. (고유 심볼 값)
  • ECMAScript 2015 (ES6)에 추가되었다.

객체타입

  • 다양한 데이터를 담을 수 있다.
  • 키(key)와 값(value) 쌍으로 구성된 프로퍼티를 여러 개 넣을 수 있는데 키(key)에는 문자형이 들어가야하며 값(value)에는 모든 타입이 들어갈 수 있다.
let user = new Object(); // 객체 생성자 문법
let user = {}; // 객체 리터럴 문법

예제

let user = {
 	name: "sion", // 키: name, 값: "sion"
  	age: 42,
  	printInfo: function() {
		console.log("제 이름은 : " + this.name + " 나이는 : " + this.age + "입니다." );
    }
};

console.log(user.name); // sion
console.log(user["name"]); // sion
user.printInfo(); // 제 이름은 : sion 나이는 : 42입니다.

참고자료

mdn JavaScript docs
모던자바스크립트

profile
공부한 것을 글로 저장하자!

0개의 댓글