모던 자바스크립트 Deep Dive #2

SESE·2022년 11월 14일
0
post-thumbnail

1. undefined 타입

개발자가 변수에 값이 없다는 것을 명시하고 싶다면 undefined 대신 null 을 할당한다.

undefined 는 자바스크립트 엔진이 변수를 초기화 하는데 사용하므로, 본래 취지와 어긋나고 혼란을 야기한다.

또한 프로그래밍 언어에서 null 은 변수에 값이 없다는 것을 의도적으로 명시할 때 사용된다.

변수에 null 을 할당하는 것은 변수가 이전에 참조하던 값을 더 이상 참조하지 않겠다는 의미이다. (이전에 할당되어 있던 값에 대한 참조를 명시적으로 제거하는 것을 의미한다.)

2. Symbol 타입

변경 불가능한 원시 타입. 다른 값과 중복되지 않는 유일무이한 값.

let a = Symbol('abc')
let b = Symbol('abc')

a === b  // -> false

3. 데이터 타입의 필요성

데이터 타입 = 값의 종류

자바스크립트 엔진은 데이터 타입에 따라 정해진 크기의 메모리 공간을 확보 한다. 즉, 변수에 할당되는 값의 데이터 타입에 따라 확보해야 할 메모리 공간의 크기가 결정된다.

값의 저장과 참조

let a = 100;
let b = 100;
0x123: 100   					// 100이라는 값은 메모리공간의 0x123에 저장된다.
0x111: 식별자a, 값은 0x123		// 메모리공간의 0x111는 식별자a로 식별되고, 값은 0x123을 보고 있다.
0x112: 식별자b, 값은 0x123
b = 111;
0x124: 111						// 이제 메모리공간의 0x124에 111이 저장된다.
0x112: 식별자b, 값은 0x124		// 메모리 공간의 0x112는 식별자b로 식별되고, 값은 0x124을 보고 있다.

데이터 타입이 필요한 이유

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

4. 동적 타이핑

정적 타입 언어
변수의 타입을 변경할 수 없고, 선언한 타입에 맞는 값만 할당 할 수 있는 언어.
컴파일 시점에 타입 체크를 수행해, 통과하지 못했다면 에러를 발생시키고 실행을 막는다.
이를 통해 타입의 일관성을 강제해 런타임에서 발생하는 에러를 줄이고 안정적인 코드를 구현할 수 있도록 한다.

자바스크립트에서는 값을 할당하는 시점에 변수의 타입이 동적으로 결정되고, 타입을 언제든지 변경할 수 있다.

기본적으로 변수는 타입을 갖지 않고, 값은 타입을 갖는다.

따라서 자바스크립트 변수는 선언이 아닌 할당에 의해 타입이 결정 된다.
즉, 할당되어 있는 값에 의해 타입이 결정된다.

5. 산술 연산자

  • 이항 산술 연산자(+, -, *, /, %): 피연산자의 값을 변경하지 않고 언제나 새로운 값을 만든다

  • 단항 산술 연산자(++, --, +, - ): 피연산자의 값을 변경한다

    	숫자 타입이 아닌 피연산자에 + 단항 연산자를 사용하면 피연산자를 숫자 타입으로 변환하여 반환한다.
    
    	이때 피연산자를 변경하지 않고, 숫자 타입으로 변환한 값을 생성하여 반환한다.
    
    	숫자타입으로 변환한 수 없다면 `NaN` 을 반환한다.

6. 할당 연산자

할당문은 값으로 평가되는 표현식인 문이므로 할당된 값으로 평가된다.

7. 비교 연산자

  • 동등 비교(==) 연산자는 암묵적 타입 변환을 통해 타입을 일치시킨 후, 같은 값인지 비교한다.
  • 일치 비교(===) 연산자는 타입도 같고 값도 같은 경우에 한해 true 를 반환한다.

단, NaN 은 유일하게 자신과 일치하지 않는다.

NaN === NaN   // -> false

숫자가 NaN 인지 조사하기 위해선 Number.isNaN 함수나 Object.is 함수를 사용한다.

8. 삼항 조건 연산자

삼항 조건 연산자는 조건식의 평가 결과에 따라 반환할 값을 결정한다.

삼항 조건 연산자 표현식은 조건문이지만 값처럼 사용할 수 있다.

if ... else 문은 표현식이 아닌 문이기 때문에 값처럼 사용할 수 없지만, 삼항 조건 연산자 표현식은 값으로 평가할 수 있는 표현식인 문이다. 따라서 값처럼 다른 표현식의 일부가 될 수 있다.

9. typeof 연산자

typeof null // -> "object"

null 의 타입은 object 이므로 null 타입을 체크할때는 일치 연산자(===)를 사용한다.


FE재남 님의 유튜브: https://www.youtube.com/watch?v=rPVrtODy9P0&list=PLjQV3hketAJnP_ceUiPCc8GnNQ0REpCqr&index=2

profile
스타트업에서 근무하고 있는 Frontend 개발자 sese

0개의 댓글