개발자가 변수에 값이 없다는 것을 명시하고 싶다면 undefined
대신 null
을 할당한다.
undefined
는 자바스크립트 엔진이 변수를 초기화 하는데 사용하므로, 본래 취지와 어긋나고 혼란을 야기한다.
또한 프로그래밍 언어에서 null
은 변수에 값이 없다는 것을 의도적으로 명시할 때 사용된다.
변수에 null
을 할당하는 것은 변수가 이전에 참조하던 값을 더 이상 참조하지 않겠다는 의미이다. (이전에 할당되어 있던 값에 대한 참조를 명시적으로 제거하는 것을 의미한다.)
변경 불가능한 원시 타입. 다른 값과 중복되지 않는 유일무이한 값.
let a = Symbol('abc')
let b = Symbol('abc')
a === b // -> false
데이터 타입 = 값의 종류
자바스크립트 엔진은 데이터 타입에 따라 정해진 크기의 메모리 공간을 확보 한다. 즉, 변수에 할당되는 값의 데이터 타입에 따라 확보해야 할 메모리 공간의 크기가 결정된다.
값의 저장과 참조
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을 보고 있다.
데이터 타입이 필요한 이유
정적 타입 언어
변수의 타입을 변경할 수 없고, 선언한 타입에 맞는 값만 할당 할 수 있는 언어.
컴파일 시점에 타입 체크를 수행해, 통과하지 못했다면 에러를 발생시키고 실행을 막는다.
이를 통해 타입의 일관성을 강제해 런타임에서 발생하는 에러를 줄이고 안정적인 코드를 구현할 수 있도록 한다.
자바스크립트에서는 값을 할당하는 시점에 변수의 타입이 동적으로 결정되고, 타입을 언제든지 변경할 수 있다.
기본적으로 변수는 타입을 갖지 않고, 값은 타입을 갖는다.
따라서 자바스크립트 변수는 선언이 아닌 할당에 의해 타입이 결정 된다.
즉, 할당되어 있는 값에 의해 타입이 결정된다.
이항 산술 연산자(+, -, *, /, %): 피연산자의 값을 변경하지 않고 언제나 새로운 값을 만든다
단항 산술 연산자(++, --, +, - ): 피연산자의 값을 변경한다
숫자 타입이 아닌 피연산자에 + 단항 연산자를 사용하면 피연산자를 숫자 타입으로 변환하여 반환한다.
이때 피연산자를 변경하지 않고, 숫자 타입으로 변환한 값을 생성하여 반환한다.
숫자타입으로 변환한 수 없다면 `NaN` 을 반환한다.
할당문은 값으로 평가되는 표현식인 문이므로 할당된 값으로 평가된다.
true
를 반환한다.단, NaN
은 유일하게 자신과 일치하지 않는다.
NaN === NaN // -> false
숫자가 NaN
인지 조사하기 위해선 Number.isNaN
함수나 Object.is
함수를 사용한다.
삼항 조건 연산자는 조건식의 평가 결과에 따라 반환할 값을 결정한다.
삼항 조건 연산자 표현식은 조건문이지만 값처럼 사용할 수 있다.
if ... else 문은 표현식이 아닌 문이기 때문에 값처럼 사용할 수 없지만, 삼항 조건 연산자 표현식은 값으로 평가할 수 있는 표현식인 문이다. 따라서 값처럼 다른 표현식의 일부가 될 수 있다.
typeof null // -> "object"
null
의 타입은 object
이므로 null
타입을 체크할때는 일치 연산자(===)를 사용한다.
FE재남 님의 유튜브: https://www.youtube.com/watch?v=rPVrtODy9P0&list=PLjQV3hketAJnP_ceUiPCc8GnNQ0REpCqr&index=2