모던 자바스크립트 Deep Dive(2)

Daon·2023년 3월 20일
0

모던자바스크립트

목록 보기
2/12
post-thumbnail

개발자에게 중요한 것은 글을 작성하는 것이라고 하여
글을 잘써보기 위해 노력해보겠습니다.!

_데이터타입

자브스크립트에서는 데이터 타입을 원시타입 vs 객체 타입 으로 나뉩니다.

원시타입

  • 숫자타입
  • 문자열 타입
  • 불리언 타입
  • undefined타입
  • null 타입
  • 심벌 타입

객체타입

  • 객체
  • 함수
  • 배열

숫자타입

숫자 범위

ECMAScript로 표현할 수 있는 최솟값은 Number 객체의 MIN_VALUE 프로퍼티(Number.MIN_VALUE)에 저장된다
이 값은 브라우저마다 다르지만 보통 5e-324이다.
최대값은 MAX_VALUE 프로퍼티에 저장되며 보통 1.797693138623157e+308이다.
이 범위를 벗어나면 -Infinity, Infinity로 변환된다.

숫자로 표현 할 때 부호비트, 지수, 가수부분으로 나누어서 숫자를 표현하기 때문에
오차가 발생할 수 있다.

NaN

숫자형 값 중 NaN이란 특별한 값이 있는데 숫자를 반환할 것으로 예상되는 조작이 실패 했을 경우 반환하는 값이다.
보통 숫자를 0으로 나누려 할 떄 NaN을 반환한다

  • 특징
    1. NaN이 포함된 조작은 항상 NaN을 반환한다
    1. NaN은 어떤 값과도 일치하지 않는다.
  • 떄문에 isNaN() 이라는 함수를 제공한다.

문자열 타입

문자열은 변경 불가능한 값이며(문자열 생성시 변경 x)

  • ''
  • ""
  • ``

으로 묶어서 사용한다.

템플릿 리터럴

ES6부터 도입된 문법이며 런타임시 일반문자로 변환되어 처리된다.

var template = `Template literal`;
console.log(template); // Template literal

멀티라인 문자열, 표현식 삽입을 할 떄 사용된다.
표현식 같은 경우는 ${value}형식으로 변수를 넣어서 간단하게 사용 가능하다.

불리언 타입

true, false

undefined 타입

--> 개발자가 의도적으로 할당하는 값이 아닌경우 자바크스립트 엔진이 변수를
초기화 할 때 사용하는 값이다.
값이 없다를 할당하고 싶을 때는 undefined보다 null을 사용한다.

선언과 정의

변수같은 경우를 선언한다라고 표현하고
함수같은 경우를 정의한다라고 표현한다.

null타입

변수에 값이 없을을 의도적으로 명시하는 것
null이 할당됨으로써 가비지 컬렉션을 수행하게 한다

심볼 타입

ES6에서 추가된 7번째 타입으로
다른 값과 중복되지 않는 유일 무이한 값이다.

일반적으로 심볼은 객체의 프로퍼티 키로 사용된다

const obj = {};

const sym1 = Symbol();
const sym2 = Symbol('foo');
const sym3 = Symbol('foo');

obj[sym1] = 'propertyValue1';
obj[sym2] = 'propertyValue2';
obj[sym3] = 'propertyValue3';  // no conflict with sym2

console.log(obj);  // {Symbol(): 'propertyValue1', Symbol(foo): 'propertyValue2', Symbol(foo): 'propertyValue3'}

console.log(obj[sym1]);  // propertyValue1
console.log(obj[sym2]);  // propertyValue2
console.log(obj[sym3]);  // propertyValue3

객체 타입

객체란
이름과 값을 가지는 데이터를 의미하는 프로퍼티와 동작을 의미하는 메소드를 포함할 수 있는 독립적 주체이다.
또한 JS는 객체 기반의 언어이며 JS이루는 모든것은 거의 객체이다.

데이터 타입의 필요성

  • 값 저장시, 확보해야 하는 메모리 공간의 크기 결정
  • 값 참조 시, 읽어들어야 하는 메모리 공간 크리 결정
  • 메모리에서 읽은 값을 어떻게 해석할 지 결정

데이터 타입에 의한 메모리 공간의 확보와 참조 라고 할 수 있다.
타입의 중요성은 메모리 크기의 활용과 연관된다.

동적 타이핑

자바스크립트는 동적 타입언어이다.
이것은 값이 할당되는 시점에서 자동으로 타입이 결정된다는 뜻이다.
따라서 한가지 변수에 여러가지 타입을 할당할 수 있다.

이러한 동적타입언어의 구조적 단점은

  • 변화하는 변수 값을 추적하기 어렵다
  • 값을 확인하기 전에는 타입을 확신할 수 없다.
    이로 인해 유연성은 높지만 신뢰성이 떨어진다

변수 호이스팅

변수를 선언하기 전에 참조가 가능한 것을 변수 호이스팅이라 한다.

모든 선언문은 호이스팅된다
호이스팅이란 var 선언문이다 function선언문 등 모든 선언문이
해당 Scope의 선두로 옮겨진 것처럼 동작하는 특성이다.
그렇기에 JS에서 모든 선언문이 선언되기 전에 참조가 가능하다.

변수는 3단계에 걸쳐서 생성된다.

  • 선언단계(Declaration phase)
    변수 객체에 변수를 등록한다. 이 변수객체는 스코프가 참조하는 대상이 된다.
  • 초기화단계(Initalization phase)
    변수객체에 등록된 변수를 메모리에 할당한다. 이 단계에서 변수는 undefined로 초기화.
  • 할당단계(Assignment phase)
    undefined로 초기화된 변수에 실제값을 할당한다.

함수 레벨 스코프
함수 내에서 선언된 변수는 함수 내에서만 유요하며 함수 외부에서는 참조 할 수 없다.

블록 레벨 스코프
코드 블록 내에서 선언된 변수는 코드 블록 내에서만 유요하다.

var 키워드로 선언된 변수의 문제점

ES5에서 변수를 선언하는 유일한 방법은 var키워드였다.

var키워드의 특징
1. 함수 레벨 스코프
- 전역 변수의 남발
- for loop 초기화식에서 사용한 변수를 for loop 밖에서 참조할 수 있다.
2. var 키워드 생략 허용
- 의도하지 않은 변수의 전역화
3. 중복 선언 허용
- 의도하지 않은 변수값 변경
4. 변수 호이스팅
- 변수를 선언하기 전에 참조가 가능하다.

위와 같은 단점을 보완하기 위해 ES6에서 let과 const키워드를 도입하였다.

참조
https://poiemaweb.com/js-data-type-variable
https://velog.io/@hustle-dev/%EB%AA%A8%EB%8D%98-%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-Deep-Dive-69%EC%9E%A5

profile
같이 일하고싶은 그런 개발자!

0개의 댓글