Front-end Developer

0%

빌트인 객체 / Built-in objects

자바스크립트 객체의 분류

  • 표준 빌트인 객체: ECMAScript 사양에 정의된 객체이며 자바스크립트 실행 환경(브라우저 또는 Node.js 환경)과 관계없이 언제나 사용할 수 있다. 표준 빌트인 객체는 전역 객체의 프로퍼티로서 제공된다. 따라서 별도의 선언없이 전역 변수처럼 언제나 참조할 수 있다.
  • 호스트 객체: ECMAScript 사양에 정의되어 있지 않지만 자바스크립트 실행 환경(브라우저 환경 또는 Node.js 환경)에서 추가적으로 제공하는 객체
  • 사용자 정의 객체: 기본 제공되는 객체가 아닌 사용자가 직접 정의한 객체

표준 빌트인 객체

40여개의 표준 빌트인 객체가 있는데 Math, Reflect, JSON을 제외한 표준 빌트인 객체는 모두 인스턴스를 생성할 수 있는 생성자 함수 객체이다. 생성자 함수 객체인 표준 빌트인 객체는 프로토타입 메소드와 정적 메소드를 제공하고 생성자 함수 객체가 아닌 표준 빌트인 객체는 정적 메소드만을 제공한다.

1
2
3
4
5
6
// String 생성자 함수에 의한 String 객체 생성
const strObj = new String("Lee");
console.log(typeof strObj); // object
console.log(strObj); // String {"Lee"}

console.log(Object.getPrototypeOf(strObj) === String.prototype); // true

생성자 함수인 표준 빌트인 객체가 생성한 인스턴스의 프로토타입은 표준 빌트인 객체의 prototype 프로퍼티에 바인딩된 객체이다. 예를 들어 표준 빌트인 객체인 String을 생성자 함수로서 호출하여 생성한 String 인스턴스의 프로토타입은 String.prototype이다.

원시값과 래퍼 객체

1
2
3
4
5
const str = "hello";

// 원시 타입인 문자열이 프로퍼티와 메소드를 갖고 있다.
console.log(str.length); // 5
console.log(str.toUpperCase()); // HELLO

원시값은 객체가 아니므로 프로퍼티나 메소드를 가질 수 없지만 위의 예시에서는 원시값인 문자열이 마치 객체처럼 동작한다. 문자열, 숫자, 불리언 값에 대해서는 객체처럼 마침표 표기법이나 대괄호 표기법으로 접근하면 일시적으로 임시 객체가 생성되는데 이를 래퍼객체라 한다. 단, 메소드로 접근하여 호출이 끝나면 다시 원시값으로 돌아간다.

전역객체

코드가 실행되기 이전 단계에 자바스크립트 엔진에 의해 어떤 객체보다도 먼저 생성되는 특수한 객체이며 어떤 객체에도 속하지 않은 최상위 객체. 브라우저 상에서는 window, Node.js 환경에서는 global을 말한다.

  • 개발자가 의도적으로 생성할 수 없고, 전역 객체의 프로퍼티를 참조할 때 window나 global은 생략 가능.
  • var는 전역 객체의 프로퍼티이지만 let,const 키워드로 선언한 전역 변수는 전역 객체의 프로퍼티가 아니다.

암묵적 전역

1
2
3
4
5
6
7
8
9
var x = 10; // 전역 변수

function foo() {
y = 20; // 선언하지 않은 식별자에 값을 할당
}
foo();

// 선언하지 않은 식별자 y를 전역에서 참조할 수 있다.
console.log(x + y); // 30

위의 경우 자바스크립트 엔진은 y = 20을 window.y = 20으로 해석하여 전역 객체에 프로퍼티를 동적 생성한다. 결국 y는 전역 객체의 프로퍼티가 되어 마치 전역 변수처럼 동작한다. 이를 암묵적 전역이라 한다.