자바스크립트

[JS]기본 문법(데이터 타입)

민ズl 2024. 10. 2. 15:46

데이터 타입은🤔

자바스크립트의 모든 값은 데이터 타입을 갖고, 7가지 데이터 타입을 제공함

👇7개의 데이터 타입은 원시타입(primitive type)과 객체타입(object/reference type)으로 분류할 수 있음

*원시타입의 6가지를 제외하곤 객체타입이다.

 

원시타입

🔸숫자 타입

const num = 20;

[mdn공식문서]

 

Number - JavaScript | MDN

Number 생성자는 숫자를 다루기 위해 상수와 메소드를 가지고 있습니다. 다른 타입의 값은 Number() 함수를 사용하여 숫자로 바꿀 수 있습니다.

developer.mozilla.org

 

 

🔸 문자열 타입

*템플릿 리터럴 : es6에 도입된 새로운 문자열 표기법

let hi = "문자열"
let string = hello; // hello is not defined , error
let template = `Template literal`;

[mdn공식문서]

 

String - JavaScript | MDN

String 전역 객체는 문자열(문자의 나열)의 생성자입니다.

developer.mozilla.org

 

 

🔸 불리언 타입

논리적 참(true) 과 거짓(false), 조건문에서 자주 사용

조건문에서 자주 사용

*!!(느낌표두개)를 값앞에 붙이면 불리언값으로 변환해줌

let foo = true;
console.log(foo); // true
foo = false;
console.log(foo); // false
!!foo; // false

 

[mdn공식문서]

 

Boolean - JavaScript | MDN

Boolean 객체는 불리언 값을 감싸고 있는 객체입니다.

developer.mozilla.org

 

 

🔸 undefined 타입

개발자가 의도적으로 할당하기 위한 값이 이니라 자바스크립트 엔진이 변수를 초기화할 때 사용하는 값

let foo;
console.log(foo) // undefined

[mdn공식문서]

 

 

🔸 null 타입

값이 없다는 것을 의도적으로 명시할 때 사용하는 값

*함수가 유효한 값을 반환할 수 없는 경우 명시적으로 null을 반환하기도 함

*자바스크립트는 대소문자를 구별하므로 NULL,Null등과 다름!

let foo = 'Lee';
foo = null;

 

*텅텅 비어있는 undefined타입과 null타입이 헷갈리다면🤔 밑에 그림 참고!

 

*undefined와 null을 typeof 연산자로 변수의 타입을 비교하면 null타입은 object로 나옴! (초기 자바스크립트 버그)

let a;
let b = null;
typeof a; // undefined
typeof b; // object

mdn 공식문서

[mdn공식문서]

 

Null - MDN Web Docs Glossary: Definitions of Web-related terms | MDN

In computer science, a null value represents a reference that points, generally intentionally, to a nonexistent or invalid object or address. The meaning of a null reference varies among language implementations.

developer.mozilla.org

 

 

🔸 symbol 타입

  • ES6에서 추가된 변경 불가능한 원시 타입의 값
  • 고유한 식별자
  • 주로 이름의 충돌 위험이 없는 유일한 프로퍼티 키를 만들기 위해 사용

*문자열을 key로 사용하면 키의 값이 노출되므로 캡슐화(정보 은닉)차원에서 장점!

// 심볼 mySymbol은 이름의 충돌 위험이 없는 유일한 프로퍼티 키
let mySymbol = Symbol();

console.log(mySymbol);        // Symbol()
console.log(typeof mySymbol); // symbol

// 전역 Symbol 레지스트리에 foo라는 키로 저장된 Symbol이 없으면 새로운 Symbol 생성
const s1 = Symbol.for('foo');
// 전역 Symbol 레지스트리에 foo라는 키로 저장된 Symbol이 있으면 해당 Symbol을 반환
const s2 = Symbol.for('foo');

console.log(s1 === s2); // true

[mdn공식문서]

 

Symbol - JavaScript | MDN

Symbol 은 생성자가 symbol 원시 값을 반환하는 내장 객체입니다. symbol 원시 값은 심볼 값, 혹은 짧게 심볼이라고만 부르며 고유함이 보장됩니다. 심볼은 객체에 속성을 추가할 때 고유한 키를 부여

developer.mozilla.org

 

 

[참고]mdn 공식문서

 

JavaScript의 타입과 자료구조 - JavaScript | MDN

모든 프로그래밍 언어에는 내장된 자료구조가 존재하지만, 보통 그 내용은 언어마다 다릅니다. 이 글에서는 JavaScript에서 사용할 수 있는 내장 자료구조와 그 속성에 대해 알아보겠습니다. 그러

developer.mozilla.org

 

객체타입

여러가지 데이터를 묶어둘 수 있음, {key와 value}로 이루어져 있음 

let apple = {
   name : '사과',
   color : 'red'
};

⭐자바스크립트는 객체 기반의 언어이며, 자바스크립트를 이루고 있는 거의 모든것이 객체!

 

 


자바스크립트의 모든 값은 데이터 타입을 갖는데 데이터 타입이 필요한 이유🤔

  • 값을 저장할 때 확보해야 하는 메모리 공간의 크기를 결정하기 위해
  • 값을 참조할 때 한 번에 읽어 들여야 할 메모리 공간의 크기를 결정하기 위해
  • 메모리에서 읽어 들인 2진수를 어떻게 해석할지 결정하기 위해

값은 메모리에 저장하고 참조할 수 있어야 한다! 그러면 확보해야 할 메모리 공간의 크기를 결정해야 함🟨

 

 

전에 작성글에서 메모리 구조는 Code / Data / Stack / Heap으로 되어 있다고 했는데

https://bom-na.tistory.com/9

 

컴퓨터의 구성요소🖥️, 메모리

컴퓨터의 구성요소🖥️🔸하드디스크(저장장치)🔸연산(읽고계산)🔸메모리(임시)메모리🟨어플리케이션을 열고 무언가를 처리하는데는 메모리상에 데이터를 보관, 읽기, 쓰기 메모리 구조

bom-na.tistory.com

 

원시타입은 Stack, 객체는 Heap에 저장됨!

* 원시 타입 값은 고정된 크기를 가지며, 크기가 작아 스택 메모리에서 빠르게 접근할 수 있음

* 힙은 크기가 가변적인 데이터를 저장하는데 적합하며, 객체는 크기가 가변적이기 때문에 힙 메모리에 저장

* 다만, 객체에 대한 "참조"는 스택에 저장됨

  =>즉, 스택에는 힙에 있는 객체의 주소를 가리키는 참조 값이 저장 

let num = 10;         
let obj = { name: "John" }; 
let obj2 = obj;

 

혼자 이해하려고 그렸는데 똥손... 참고만 해주세용,,,,😭(0x0000주소는 예시)