해당 포스팅은 위키북스의 모던 자바스크립트 Deep Dive라는 책을 독학하며 기록하는 글입니다.

자바스크립트의 객체는 크게 다음 3가지로 나눌 수 있다.

  1. 표준 빌트인 객체
    ECMAScript 사양에 정의된 객체로 자바스크립트 실행 환경에 관계없이 언제나 사용할 수 있다.

  2. 호스트 객체
    ECMAScript 사양에는 정의되어 있지 않지만 실행환경(브라우저나 Node.js)에서 추가로 제공하는 객체.

  3. 사용자 정의 객체
    사용자가 직접 정의한 객체

표준 빌트인 객체

자바스크립트는 Object, String, Number, Boolean, Date, Math 등 40여개의 다양한 표준 빌트인 객체를 제공한다. 이 중 Math, Reflect, JSON을 제외한 표준 빌트인 객체는 모두 인스턴스를 생성할 수 있는 생성자 함수 객체이다.

생성자 함수 객체인 표준 빌트인 객체는 프로토타입 메서드와 정적 메서드를 제공하고, 생성자 함수 객체가 아닌 표준 빌트인 객체는 정적 메서드만 제공한다.

const num = new Number(1.5);
console.log(num.toFixed());  //2
console.log(Number.isInteger(num));  //false

위의 코드를 보며 이해해보자.

1행에서 Number라는 표준 빌트인 객체를 사용해 Number객체를 하나 만들었다.

Number는 생성자 함수 객체이므로 Number.prototype객체를 가지고 있고 소수점 자리를 반올림해주는 toFixed 메서드는 Number.prototype에 등록된 메서드이다. 따라서 num 또한 toFixed라는 메서드를상속받아 사용할 수 있다.

isInteger는 인자로 들어온 값이 정수인지 아닌지를 Boolean으로 반환하는 메서드로 Number 표준 빌트인 객체의 정적 메서드이다. 따라서 num에서 호출하진 못하지만 Number.isInteger를 통해 사용할 수 있다.

원시값과 래퍼 객체

const num1 = 10.5;
console.log(num1.toFixed());  //11

우리는 자바스크립트를 사용하면서 모든 값을 객체로 생성하진 않는다. 문자열이나 숫자, 불리언 등의 원시값이 있기 때문인데 지금까지 원시값에 표준 빌트인 객체에서 사용하는 메서드를 사용해도 위의 코드와 같이 무리없이 동작하는 것을 봐왔을 것이다. 그 이유는 다음과 같다.

원시값인 문자열, 숫자, 불리언 값의 경우 이에 대해 마치 객체처럼 마침표 표기법(또는 대괄호 표기법)으로 접근하면 자바스크립트 엔진이 일시적으로 원시값을 연관된 객체로 변환해 생성하여 생성된 객체로 프로퍼티에 접근하거나 메서드를 호출하고 다시 원시값으로 되돌린다. 이처럼 문자열, 숫자, 불리언 값에 대해 객체처럼 접근하면 생성되는 임시 객체를 래퍼 객체라고 한다.

이때 래퍼 객체의 처리가 종료되면 래퍼 객체는 가비지 컬렉션의 대상이 된다.

전역 객체

전역 객체는 코드가 실행되기 이전 단계에 자바스크립트 엔진에 의해 어떤 객체보다도 먼저 생성되는 특수한 객체이며, 어떤 객체에도 속하지 않은 최상위 객체다.

전역 객체는 표준 빌트인 객체와 환경에 따른 호스트 객체, 그리고 var 키워드로 선언한 전역 변수와 전역 함수를 프로퍼티로 갖는다. 또한 개발자가 의도적으로 생성할 수 없다는 특징을 가지고 있고, 전역 객체의 프로퍼티를 참조할 때는 전역 객체를 가리키는 window나 this, global과 같은 것을 생략할 수 있다. (window.console.log()를 console.log()로 사용할 수 있는 것처럼)

참고로 let이나 const로 생성한 변수는 전역 객체에 등록되는 것이 아니라 보이지 않는 개념적인 블록 내에 존재하게 된다.

빌트인 전역 프로퍼티

빌트인 전역 프로퍼티는 전역 객체의 프로퍼티를 의미한다. 어떠한 프로퍼티들이 있는지 살펴보자.

  1. Infinity
    무한대를 나타내는 숫자값을 갖는다.

  2. NaN
    숫자가 아님을 나타내는 숫자값을 갖는다.

  3. undefined
    undefined 원시값을 갖는다.

빌트인 전역 메서드

빌트인 전역 메서드는 애플리케이션 전역에서 호출할 수 있는 비르인 함수로서 전역 객체의 메서드다. 내용을 살펴보자.

  1. eval
    자바스크립트 코드를 나타내는 문자열을 인수로 받아 실행시킨다. 하지만 사용해서는 안된다. (보안에 매우 취약하며 자바스크립트 엔진에 의해 최적화가 수행되지 않으므로 일반적인 코드 실행에 비해 처리 속도가 느리다.)

  2. inFinite
    전달받은 인수가 정상적인 유한수인지를 Boolean값으로 반환한다.
    NaN은 false, null은 true로 반환한다는 특징이 있다.

  3. isNaN
    전달받은 인수가 NaN인지 검사하여 Boolean값으로 반환한다. 전달받은 인수가 숫자가 아니라면 숫자로 타입을 변환후 검사를 수행한다.

  4. parseFloat
    전달받은 문자열 인수를 실수로 해석하여 반환한다.

  5. parseInt
    전달받은 문자열 인수를 정수로 해석하여 반환한다.

  6. encodeURI / decodeURI
    encode는 완전한 URI 문자열을 전달받은 어떤 시스템에서도 읽을 수 있는 아스키 문자 set으로 변환한다.
    decode는 변환된 아스키 문자 set을 다시 URI 문자열로 변환한다.

  7. encodeURIComponent / decodeURIComponent
    encode는 URI 구성요소(쿼리 스트링의 일부) 문자열을 전달받은 어떤 시스템에서도 읽을 수 있는 아스키 문자 set으로 변환한다.
    decode는 변환된 아스키 문자 set을 다시 URI 구성요소 문자열로 변환한다.

profile
I Will be Relaxed Person

0개의 댓글