회고/Techit Frontend School 10기

[멋쟁이 사자처럼 프론트엔드 스쿨] 26일차 TIL - 데이터 타입

kelly09 2024. 5. 30. 20:40

🍰 오늘도 자바스크립트 진도를 잔뜩.

🍴 자료형

: 총 여덟 가지 자료형. 동적 타입(dynamicallyt typed) - 자료의 타입은 있지만 변수에 저장되는 값은 언제든지 바꿀 수 있음.

1️⃣ 숫자형(Number)

: 정수부동 소수점 숫자 나타냄

  • 2**53 -1(9007199254740991)까지 안전하게 사용 가능

  • 관련된 연산: +, -, *, /
  • 특수 숫자 값(special numeric value) : Infinity, -Infinity, NaN

2️⃣ BigInt

: 일반 숫자 뒤에 n 붙이기

3️⃣ 문자형(String)

: string을 따옴표로 묶음

  • " "
  • ' '
  • ` `(백틱) => 변수가 들어올 여지 있을 때 사용
let nickName = '뫄뫄';
let age = 20;

`안녕 나는 ${nickName}이야. 내 나이는 ${age}이야.` 
// 안에 변수 집어넣는 형태가 보간법

4️⃣ 불린형(Boolean)

: truefalse 두 가지 값이 있는 자료형

  • 긍정 - true
  • 부정 - false
let isBigger = 5 < 1;
console.log(isBigger); // false

5️⃣ null 

: 어느 자료형에도 속하지 않는 값.

  • 의도적으로 비워둔 값
  • 비어있거나 알 수 없는 상태 => null 할당

6️⃣ undefined

: null처럼 자신만의 자료형 형성

  • 값이 할당되지 않은 상태
  • undefined를 직접 할당하는 건 권장 X

7️⃣ 객체(Object)

: 키-값 쌍의 집합 나타내는 자료형

  • 배열, 함수, 날짜, 정규 표현식 등도 객체의 특별한 형태
  • 객체를 제외한 나머지 자료형은 원시 타입(primitive type) - 한 가지만 표현
const user = {
  name: 'lee',
  age: 20,
  sum: function (a, b) { // 키가 함수의 이름. sum이라는 메서드
    a + b;
  },
};

메서드

: 객체 안에 함수를 포함하고 있는 형태

  • 객체 내에서 함수를 정의하는 방법 세 가지
const user = {
  sayHi: function () { // 1: normal function 제일 무거움
    return 'hello';
  },
  sayHi2: () => { // 2: arrow function
    return 'hi'; // 메서드 안에서 함수 쓸 때는 arrow 주로 사용
  },
  sayHi3() {
    return 'hola'; // 3: concise method(간결한) 제일 가벼움
  },
};
  • 3번째 버전을 가장 많이 사용. 왜?

=> 1번은 프로토타입을 내부적으로 포함하고 있어서 무거움.

=> this 사용 시 2번은 window가 나옴. 3번은 자기 자신이 나옴.

요약: 간결하고 가볍고 this가 내가 선택한 대상을 뜻해서 3번째 함수 형태를 사용함.

8️⃣ 심볼(Symbol)

: 고유하고 변경 불가능한 값을 나타내는 자료형

  • 주로 객체의 고유한 식별자 만들 때 사용
const id = Symbol('uuid');
const id2 = Symbol('uuid');
// 둘은 완전히 다름
// 새로운 메모리를 계속 쌓아올림

 

🍴 Typeof 연산자

: 인수의 자료형 반환

  • 연산자: typeof x
  • 함수: typeof(x)

🍴 함수(Function) - 객체형

: 주로 재사용을 위해

  • return하지 않으면 undefined(어떤 값도 내보내지 않음)

🍴 자바스크립트는 객체로 시작해서 객체로 끝남

: 여덟 가지 자료형 모두 객체로부터 파생. 

생성자 함수(Constructor Function)

: new 키워드를 사용하여 새로운 객체 생성

const str = new String('hello'); // constructor function
const hello = 'hello'; // string literal

const object = new Object({ name: 'lee' }); // constructor function
const obj = { // object literal
  name: 'lee',
};

const newArray = new Array(1, 2, 3); // constructor function
const arr = [1, 2, 3]; // array literal
  • null과 undefined는 어디에도 속하지 않음.
  • null과 undefined를 제외한 모든 데이터 타입은 객체이고, 생성자 방식으로 만들어지지만 편의를 위해 literal로 사용됨

🍴  형 변환(Type Conversion)

: 함수와 연산자에 전달되는 값 - 적절한 자료형으로 자동 변환됨

  • 암시적 형 변환 - 컴파일러나 인터프리터가 자동으로 데이터 타입을 변환하는 것
/* 문자열과 숫자 간 변환 */
const result1 = "5" + 2;  // 문자열 "5"와 숫자 2를 더하면 문자열로 변환됩니다.
console.log(result1); // "52"

const result2 = "5" - 2;  // 문자열 "5"에서 숫자 2를 빼면 숫자로 변환됩니다.
console.log(result2); // 3

/* 불리언과 숫자 간 변환 */
const result3 = true + 1; // true는 숫자 1로 변환됩니다.
console.log(result3); // 2

const result4 = false + 1; // false는 숫자 0으로 변환됩니다.
console.log(result4); // 1

/* null과 undefined의 변환 */
const result5 = null + 1; // null은 숫자 0으로 변환됩니다.
console.log(result5); // 1

const result6 = undefined + 1; // undefined는 NaN(Not-a-Number)으로 변환됩니다.
console.log(result6); // NaN

/* 비교 연산 시의 형 변환 */
console.log("5" == 5); // true, 문자열 "5"가 숫자 5로 변환되어 비교됩니다.
console.log("5" === 5); // false, ===는 타입을 비교하므로 변환이 일어나지 않습니다.

console.log(null == undefined); // true, 둘 다 값이 없음을 의미하므로 true
console.log(null === undefined); // false, 타입이 다르므로 false
  • 명시적 형 변환 - 코드에서 명시적으로 데이터 타입을 변환하도록 지시하는 것
let value = true;
alert(typeof value); // boolean

console.log(parseInt('123abc')); // 123
console.log(parseInt('abc123')); // NaN

value = String(value); // 변수 value엔 문자열 "true"가 저장
alert(typeof value); // string

alert(Boolean("hello")); // 문자열(true)
alert(Boolean("")); // 빈 문자열(false)

🍴 값 반환 여부

  • 식 - 반환함
  • 문 - 반환하지 않음(정확하게는 undefined를 반환)
  • 할당 연산자 => 값을 반환함
let a = 1;
let b = 2;

let c = 3 - (a = b + 1); // 괄호 안에서 할당 연산자기 때문에 3 반환
// 만약 괄호에서 식이 끝나서 undefined가 나왔으면 3-undefined=NaN

alert( a ); // 3
alert( c ); // 0