18 ECMAScript 표준 내장 객체

ECMAScript Script 또는 Module 이 실행을 시작할 때 항상 이용 가능한 특정 내장 객체들이 있다. 그중 전역 객체는 실행 중인 프로그램의 전역 환경 일부이다. 다른 것들은 전역 객체의 초기 프로퍼티로서 또는 접근 가능한 내장 객체의 프로퍼티를 통해 간접적으로 접근할 수 있다.

별도로 명시되지 않는 한 함수로 호출 가능한 내장 객체는 10.3 에 기술된 특성을 가진 내장 함수 객체이다. 별도로 명시되지 않는 한 내장 객체의 [[Extensible]] 내부 슬롯의 초기 값은 true 이다. 모든 내장 함수 객체는 자신이 처음 생성된 RealmRealm Record 값을 가지는 [[Realm]] 내부 슬롯을 가진다.

많은 내장 객체는 함수이며, 인수를 전달받아 호출될 수 있다. 그중 일부는 생성자이기도 하여 new 연산자와 함께 사용하도록 의도된 함수이다. 각 내장 함수에 대해 이 명세는 그 함수가 요구하는 인수와 함수 객체의 프로퍼티를 기술한다. 각 내장 생성자에 대해서는 추가로 그 생성자의 프로토타입 객체 프로퍼티 및 그 생성자를 호출하는 new 표현식이 반환하는 특정 객체 인스턴스의 프로퍼티를 기술한다.

특정 함수의 설명에서 달리 명시되지 않는 한, 내장 함수나 생성자가 지정된 것보다 적은 인수를 받으면, 부족한 인수들을 undefined 값으로 채워 받은 것과 정확히 동일하게 동작해야 한다. 이러한 누락된 인수들은 “존재하지 않음” 으로 간주되며 명세 알고리즘에서 그렇게 식별될 수 있다. 특정 함수 설명에서 “this value” 와 “NewTarget” 용어는 10.3 에서 부여된 의미를 가진다.

특정 함수 설명에서 달리 명시되지 않는 한, 내장 함수나 생성자가 허용된 것보다 많은 인수를 받으면 추가 인수는 평가되지만 함수는 이를 무시한다. 단, 구현은 그러한 인수에 대해 TypeError 예외를 단지 “추가 인수가 존재한다” 는 이유만으로 던지지 않는 한 구현 정의 동작을 규정할 수 있다.

Note 1

내장 함수 집합에 추가 기능을 덧붙이는 구현은 기존 함수에 새 매개변수를 추가하기보다 새 함수를 추가하는 방식으로 하는 것이 권장된다.

별도로 명시되지 않는 한 모든 내장 함수 및 내장 생성자는 자신의 [[Prototype]] 내부 슬롯 값으로 Function 프로토타입 객체(표현식 Function.prototype 의 초기 값, 20.2.3) 를 가진다.

별도로 명시되지 않는 한 모든 내장 프로토타입 객체는 (자기 자신인 Object 프로토타입 객체를 제외하고) 자신의 [[Prototype]] 내부 슬롯 값으로 Object 프로토타입 객체(표현식 Object.prototype 의 초기 값, 20.1.3) 를 가진다.

이 명세가 내장 생성자의 동작을 알고리즘 단계로 정의했다면, 그것이 [[Call]][[Construct]] 양쪽 목적의 동작이다. 해당 알고리즘이 두 경우를 구분할 필요가 있으면 NewTarget 이 undefined 인지 검사하는데, 이는 [[Call]] 호출을 의미한다.

생성자로 식별되지 않은 내장 함수 객체는 특정 함수 설명에서 별도로 명시되지 않는 한 [[Construct]] 내부 메서드를 구현하지 않는다.

생성자가 아닌 내장 함수 객체는 특정 함수 설명에서 별도로 명시되지 않는 한 "prototype" 프로퍼티를 갖지 않는다.

이 명세에 정의된 각 내장 함수는 CreateBuiltinFunction 추상 연산(10.3.4) 호출로 생성된다. lengthname 매개변수의 값은 아래에서 논의되는 "length""name" 프로퍼티의 초기 값이다. prefix 매개변수의 값도 유사하게 아래에서 논의된다.

생성자를 포함한 모든 내장 함수 객체"length" 프로퍼티를 가지며 그 값은 0 이상의 정수 Number 이다. 별도로 명시되지 않는 한 이 값은 함수 설명 하위 절 제목에 나타난 필수 매개변수의 수이다. 선택적 매개변수와 rest 매개변수는 개수에 포함되지 않는다.

Note 2

예: Array 프로토타입 객체"map" 프로퍼티 초기 값인 함수 객체는 «Array.prototype.map (callback [ , thisArg])» 라는 제목 아래에 기술되며, 이름 있는 두 인수 callback 과 선택적인 thisArg 를 보여준다. 따라서 그 함수 객체"length" 프로퍼티 값은 1𝔽 이다.

별도로 명시되지 않는 한 내장 함수 객체"length" 프로퍼티는 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true } 특성을 가진다.

생성자를 포함한 모든 내장 함수 객체"name" 프로퍼티를 가지며 그 값은 String 이다. 별도로 명시되지 않는 한 이 값은 명세에서 그 함수에 부여된 이름이다. 익명 함수로 식별된 함수들은 빈 문자열을 "name" 프로퍼티 값으로 사용한다. 객체의 프로퍼티로 명세된 함수의 경우 이름 값은 그 함수를 접근하는 데 쓰이는 프로퍼티 이름 문자열이다. 내장 프로퍼티의 get 또는 set 접근자 함수로 명세된 함수는 CreateBuiltinFunction 을 호출할 때 prefix 매개변수로 각각 "get" 또는 "set" 을 전달한다.

프로퍼티 키가 Symbol 값인 각 내장 함수에 대해 "name" 프로퍼티 값은 명시적으로 지정된다. 그러한 명시적 값이 접두사 "get " 또는 "set " 로 시작하고 그 함수가 내장 프로퍼티의 get 또는 set 접근자 함수라면, 접두사를 제거한 값이 name 매개변수로 전달되고 "get" 또는 "set" 값이 prefix 매개변수로 전달된다.

별도로 명시되지 않는 한 내장 함수 객체"name" 프로퍼티는 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true } 특성을 가진다.

19 부터 28 절 및 부록 B.2 에 기술된 다른 모든 데이터 프로퍼티는 명시적으로 달리 지정되지 않는 한 { [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: true } 특성을 갖는다.

19 부터 28 절 및 부록 B.2 에 기술된 모든 접근자 프로퍼티는 명시적으로 달리 지정되지 않는 한 { [[Enumerable]]: false, [[Configurable]]: true } 특성을 갖는다. get 접근자 함수만 기술된 경우 set 접근자 함수의 기본값은 undefined 이다. set 접근자만 기술된 경우 get 접근자의 기본값은 undefined 이다.