개발 알다가도 모르겠네요

데이터 타입과 연산자 본문

학습일지/모던 자바스크립트 Deep Dive

데이터 타입과 연산자

이재빵 2022. 6. 16. 14:11
728x90

undefined 타입

변수를 선언한 이후 값을 할당하지 않은 변수를 참조하면 undefined가 반환된다.

자바스크립트 엔진이 변수를 초기화하는데 사용하는 undefined를 의도적으로 변수에 할당한다면 undefined의 본래 취지와 어긋난다.

따라서 변수에 값이 없다는 것을 명시하고 싶을 때는 null을 할당하면 된다.

 

null 타입

변수에 null값을 할당하는 것은 변수가 이전에 참조하던 값을 더 이상 참조하지 않겠다는 의미.

이는 이전에 할당되어 있던 값에 대한 참조를 명시적으로 제거하는 것을 의미하며, 자바스크립트 엔진은 누구도 참조하지 않은 메모리 공간에 대해 가비지 콜렉션을 수행할 것이다.

null은 함수가 유효한 값을 반환할 수 없는 경우에도 명시적으로 null을 반환한다.

*null의 타입은 object

<!DOCTYPE html>
<html>
<body>
  <script>
    var element = document.querySelector('.myClass');

    // HTML 문서에 myClass 클래스를 갖는 요소가 없다면 null을 반환한다.
    console.log(element); // null
  </script>
</body>
</html>

 

심벌 타입

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

주로 이름이 충돌할 위험이 없는 객체의 유일한 프로퍼티 키를 만들기 위해 사용된다.

// 심벌 값 생성
var key = Symbol('key');
console.log(typeof key); // symbol

// 객체 생성
var obj = {};

// 이름이 충돌할 위험이 없는 유일무이한 값인 심벌을 프로퍼티 키로 사용한다.
obj[key] = 'value';
console.log(obj[key]); // value

 

자바스크립트의 값 참조

var a = 100;
var b = 100;

주소 0x123: 100
    0x111: 식별자 a, 값은 0x123
    0x112: 식별자 b, 값은 0x123
    
b = 111;
    
주소 0x124: 111
    0x112: 식별자 b, 값은 0x124

 

동적 타이핑

C나 자바같은 정적타입언어는 변수를 선언할 때 데이터 타입을 사전에 선언해야하는 명시적 타입 선언.

자바스크립트는 값을 할당하는 시점에 변수의 타입이 동적으로 결정되고 변수의 타입을 자유롭게 변경이 가능.

선언이 아닌 할당에 의해 타입이 결정되고 재할당하면 언제든지 타입이 동적으로 바뀌는 동적타이핑.

 

이로 인해 유연성은 높지만 신뢰성은 떨어지게 된다.

 

따라서 다음과 같은 유의가 필요하다.

  1. 변수의 무분별한 남발은 금물이며 필요한 만큼 최소한으로 유지한다.
  2. 변수의 유효 범위(스코프)는 최대한 좁게 만들어 변수의 부작용을 억제해야한다.
  3. 전역 변수는 최대한 사용하지 않는다.
  4. 변수보다는 상수를 사용해 값의 변경을 억제한다.
  5. 변수 이름은 변수의 목적이나 의미를 파악할 수 있도록 네이밍한다.

 

컴퓨터가 이해하는 코드는 어떤 바보도 쓸 수 있다. 하지만 훌륭한 프로그래머는 사람이 이해할 수 있는 코드를 쓴다.

-마틴 파울러

'학습일지 > 모던 자바스크립트 Deep Dive' 카테고리의 다른 글

원시 값과 객체의 비교  (0) 2022.07.05
객체 리터럴  (0) 2022.06.29
연산자  (0) 2022.06.17
타입 변환과 단축 평가  (0) 2022.06.16
모던 자바스크립트 공부 시작  (0) 2022.06.16