[자바스크립트 완벽 가이드] 3장 타입, 값, 변수

minjyo·2021년 10월 7일
0

자바스크립트의 타입

1. 원시 타입

수정이 불가능하다. Immutable
이 값들의 프로퍼티는 읽기 전용이고, 새로운 프로퍼티를 정의할 수 없다는 점에서 객체와 다르다.

숫자

  • 자바스크립트는 모든 숫자를 실수로 표현한다.
  • NaN 숫자가 아닌 값, Infinity 양의 무한대 -> read-only
  • NaN은 그 자신뿐만 아니라 다른 값과 같은지 비교할 수 없다.
    변수 x가 NaN인지 판단하는 방법
    -> x == NaN (x)
    -> x != x (o)
    -> isNaN() (o) : 인자가 NaN이거나, 문자열/객체처럼 숫자가 아니면 return true

문자열

  • 자바스크립트는 문자열의 문자를 바꿀 수 없다. replace(), toUpperCase() 같은 메소드는 기존 문자열을 수정하는 것이 아닌 새로운 문자열을 반환하는 것이다.
  • 역슬래시 문자()는 자바스크립트 문자열에서 특별한 목적을 위해 사용한다. \ 뒤에 특정 문자와 결합했을 때 다른 방식으로 표현할 수 없는 문자를 표현하며, 이스케이프 시퀀스라 표현한다.

불리언

  • false값: undefined, null, 0, -0, NaN, ""(빈 문자열)
  • if (x) ~ -> x가 위의 값들이 아니면 참.
    if (x !== null) ~ -> x가 null이 아니면 참. undefined면 참이다.

객체 타입이 아니지만, 메소드를 가진 것처럼 동작할 수 있다.

그 외

null

  • 숫자와 문자열에서는 "값이 없음", 객체에서는 "객체가 없음"
  • typeof(null) -> object
  • 예상 가능한 값의 부재 표현

undefined

  • null보다 심한 부재 상태
  • 초기화되어 있지 않은 변수, 존재하지 않는 객체 프로퍼티나 배열의 원소 값에 접근, 반환값이 없는 함수의 반환값
  • typeof(undefined) -> undefined
  • 예기치 않은 상황에 발생한 오류성 값의 부재 표현

2. 객체 타입

  • 객체란, 이름과 값을 갖는 프로퍼티의 집합.
  • 객체만이 메소드(메소드도 프로퍼티다.)를 소유할 수 있다.
  • 수정이 가능하다. Mutable
  • 객체는 값으로 비교되지 않는다. 두 객체가 같은 프로퍼티와 값을 가지고 있어도 두 객체는 같지 않다.
var o1 = {x: 1}, o2 = {x: 1}; 
o1 === o2 // false
o1 == o2 // false
o1 = o2; // 변수 o2는 o1와 같은 객체를 참조하기 때문에 같다.
o2.x = 3;
o1.x // 3
o1 === o2 // true

배열

  • 객체의 값들은 일반적으로 순서를 가지고 있지 않지만, 배열은 특수하게 순서를 가지고 있는 객체이다.

함수

  • 자바스크립트 프로그램은 함수를 보통 객체처럼 다룰 수 있다.

전역 객체

  • 일반적인 자바스크립트 객체: Math, JSON
  • 전역객체의 프로퍼티는 자바스크립트 프로그램 전역에서 사용할 수 있게 정의된 심벌: undefined, Infinify, NaN
  • 최상위 코드에서 this 키워드를 통해 전역 객체 참조 가능
  • 클라이언트 측 Window 객체: 브라우저 창에 포함된 모든 자바스크립트 코드를 위한 전역 객체. this 대신 window를 이용하여 참조할 수도 있다.

래퍼 객체

  • 문자열, 숫자, 불리언의 프로퍼티에 접근하려고 할 때 생성되는 임시 객체



변수의 유효범위

  • 프로그램에서 어떤 변수가 정의되어 있는 영역
  • 같은 이름을 갖는 경우, 함수 내부에서 지역 변수는 전역 변수에 우선한다.

함수 유효범위

  • 어떤 함수 안에서 선언된 모든 변수는 그 함수 전체에 걸쳐 유효하다.

호이스팅

  • 어떤 함수 안에서 선언된 모든 변수는 변수가 선언되기 전에도 그 함수 전체에 걸쳐 유효하다.
  • 함수 안에 있는 모든 변수를 함수 맨 꼭대기로 끌어올린 것처럼 동작한다.
  • 지역 변수는 함수 전체에 걸쳐 정의된다.
var scope = "global";
function f(){
	console.log(scope); // "global"이 아닌 undefined를 출력한다. scope 변수는 존재하지만 아직 undefined 값이다.
    var scope = "local";
    console.log(scope);
}

유효범위 체인(scope chain)

  • 변수를 정의하는 객체의 체인(리스트)
  • 함수가 정의될 때, 함수는 유효범위 체인을 저장한다.
    함수가 호출될 때, 해당 함수의 지역 변수를 저장하기 위해서 새로운 객체를 하나 생성하고, 해당 객체를 기존에 저장된 유효범위 체인에 추가한다.
  • 최상위 자바스크립트 코드: 전역 객체
  • 중첩되지 않은 함수: 함수 매개변수와 지역 변수를 정의하는 객체, 전역 객체
  • 중첩된 함수에서 유효범위 체인: 함수 매개변수와 지역 변수를 정의하는 객체, 전역 객체 +a... (외부에서 함수를 호출할 때마다 중첩된 함수가 매번 선언되므로, 함수를 호출할 때마다 유효범위 체인이 조금씩 달라진다.)

    내용 보충 필요

+)
자바스크립트 인터프리터는 메모리 관리를 위해 자동으로 가비지 컬렉션을 수행한다.

profile
깊게 공부하는 개발자가 되기

0개의 댓글