자바스크립트 교과서 - 5. 기타 타입

Seoyong Lee·2023년 10월 1일
0

개발 공부

목록 보기
7/21
post-thumbnail

다음 책들과 MDN의 내용을 모아 자바스크립트 핵심 위주로 정리해 보았습니다. 여러 권의 책을 한 글로 훑어볼 수 있도록 최대한 간결하게 정리하겠습니다.

모던 자바스크립트 Deep Dive - 이웅모
You Don’t Know JS - Kyle Simson
자바스크립트는 왜 그 모양일까?(How JavaScript Works) - Douglas Crockford
자바스크립트 완벽 가이드(JavaScript: The Definitive Guide 7/E) - David Flanagan


불리언 타입

  • 참 또는 거짓을 표현하는 타입으로 두 가지 예약어 값 true, false 만 존재한다.
  • 주로 제어문에서 자주 사용된다.
  • 자바스크립트의 모든 값은 truthy, falsy로 나타낼 수 있다.

자바스크립트 값은 모두 불 값으로 변환될 수 있습니다.

데이비드 플래너건 , 『자바스크립트 완벽 가이드』, 인사이트(2022), p43.

  • false, 그리고 false로 변환되는 여섯 가지 값을 묶어서 false같은(falsy) 값이라고 부른다.
    • undefined
    • null
    • 0
    • -0
    • NaN
    • ""
  • 나머지 값을 true 같은(truthy) 값이라 부른다.

null과 undefined

  • undefined의 경우 자바스크립트 엔진이 변수를 초기화 할 때 사용하는 값으로 시스템 레벨에서 값이 없는 것이라고 볼 수 있다. 변수를 참조했을 때 undefined가 반환된다면 참조한 변수가 선언 이후 값이 할당된 적이 없는 변수라는 점을 알 수 있다.

    undefined를 직역하면 “정의되지 않은”이다. 일반적으로 정의란 개념은 어떤 대상을 명확하게 규정하는 것을 의미한다. 자바스크립트의 undefined에서 말하는 정의란 변수에 값을 할당하여 변수의 실체를 명확히 하는 것을 말한다.

    이웅모 , 『모던 자바스크립트 Deep Dive』, 위키북스(2020), p66.

  • 이러한 undefined를 개발자가 의도적으로 변수에 할당하는 것은 본래 취지에 어긋나므로 변수에 값이 없다면 대신 null을 사용하는 것이 더 적합해보인다.

  • null의 경우 주로 프로그램 레벨에서 변수에 값이 없다는 것을 의도적으로 명시할 때 사용한다.

    프로그래밍 언어에서 null은 변수에 값이 없다는 것을 의도적으로 명시(의도적 부재, intentional absence)할 때 사용한다. 변수에 null을 할당하는 것은 변수가 이전에 참조하던 값을 더 이상 참조하지 않겠다는 의미이다. 이는 이전에 할당되어 있던 값에 대한 참조를 명시적으로 제거하는 것을 의미하며, 자바스크립트 엔진은 누구도 참조하지 않는 메모리 공간에 대해 가비지 콜렉션을 수행할 것이다.

    이웅모 , 『모던 자바스크립트 Deep Dive』, 위키북스(2020), p67.

  • 주의할 부분으로 typeof undefined는 “undefined”를 반환하지만 typeof null은 “object”를 반환한다는 점이 있다.

    null에 typeof 연산자를 사용하면 문자열 “object”를 반환하는데, 이로 미루어 null은 ‘객체가 없다’는 것을 나타내는 특별한 객체 값이라고 볼 수 있습니다.

    데이비드 플래너건 , 『자바스크립트 완벽 가이드』, 인사이트(2022), p45.

  • 또 하나의 이상한 작동으로 “use strict”를 사용하지 않은 느슨한 모드의 자바스크립트에선 undefined란 식별자에 값을 할당할 수 있다. 그러나 협업을 위해서도 이런 짓은 추천하지 않는다.텍스트

빈 값(bottom value)은 재귀적 데이터 구조의 끝을 가리키거나 값이 없음을 뜻하는 특수한 값입니다. 프로그래밍 언어에서 빈 값은 nil, none, nothing, null과 같은 이름을 가집니다. …어떤 면에서 null과 undefined는 아주 비슷하다고 볼 수 있지만, 어떤 경우에는 서로 다르게 동작합니다. …비슷해 보이지만 이따금 서로 다르게 동작한다는 것은, 결국 헷갈릴 여지가 있다는 말입니다.

더글러스 크락포드 , 『자바스크립트는 왜 그 모양일까?』, 인사이트(2020), p123.

  • 구체적으로 언제 어떤 빈 값을 사용해야 하는지는 개발자들 마다 조금씩 의견이 다르므로 협업환경에선 적당히 합의된 방식을 따르는 것을 추천한다.
  • 위 더글러스 크락포드의 경우는 자바스크립트 스스로가 값으로 사용한다는 이유로 null 대신 undefined만 사용할 것을 추천한다.
  • 그러나 일반적으로는 빈 값을 변수에 할당하거나 함수끼리 주고 받는 경우 null을 사용하는 것을 권장한다.

Symbol 타입

  • ES6에서 추가된 7번째 타입으로 변경 불가능한 원시 타입의 값이다.
  • 주로 충돌 위험이 없는 객체의 유일한 프로퍼티 키를 만들기 위해 사용되며 다음과 같은 히스토리가 있다.

    심벌은 사실 자바스크립트 언어를 확장하는 메커니즘입니다. ES6에서 for/of 루프와 이터러블 객체를 도입했을 때 클래스가 자기 자신을 이터러블로 만들 수 있는 표준 메서드를 정의해야 했습니다. 하지만 특정 문자열 이름을 이터레이터 메서드로 표준화하면 기존 코드가 깨지는 것을 피할 수 없었기에 심벌 이름을 도입한 것입니다.

    데이비드 플래너건 , 『자바스크립트 완벽 가이드』, 인사이트(2022), p46.

  • Symbol 함수 호출을 통해 생성한다.
	let s = Symbol("sym");
	s.toString() // "Symbol(sym)"
  • 같은 문자열을 전달해서 Symbol 함수를 다시 호출하더라도 다른 값을 반환한다.

전역 객체

  • 자바스크립트 인터프리터를 시작할 때마다 다음 프로퍼티를 가진 전역 객체가 생성된다.
    • undefined, Infinity, NaN 과 같은 전역 상수
    • isNaN( ), parseInt( ), eval( ) 과 같은 전역 함수
    • Date( ), RegExp( ), String( ), Object( ), Array( ) 같은 생성자 함수
    • Math와 JSON 같은 전역 객체
  • 노드의 경우 global이라는 이름으로 전역 객체 참조가 가능하다.
  • 웹 브라우저의 경우 Window 객체가 모든 자바스크립트 코드의 전역 객체가 된다.
  • ES2020에서 정의한 globalThis는 어떤 환경에서든 전역 객체를 참조하는 표준이다.

References

데이비드 플래너건 , 『자바스크립트 완벽 가이드』, 인사이트(2022)
더글러스 크락포드 , 『자바스크립트는 왜 그 모양일까?』, 인사이트(2020)
카일 심슨 , 『You Don’t Know JS - 타입과 문법, 스코프와 클로저』, 한빛미디어(2017)
이웅모 , 『모던 자바스크립트 Deep Dive』, 위키북스(2020)

0개의 댓글