18 ECMAScript 표준 내장 객체
ECMAScript Script 또는 Module이 실행을 시작할 때마다 사용할 수 있는 특정 내장 객체가 있습니다. 그중 하나인 전역 객체는 실행 중인 프로그램의 전역 환경의 일부입니다. 그 밖의 객체는 전역 객체의 초기 프로퍼티로 접근하거나 접근 가능한 내장 객체의 프로퍼티를 통해 간접적으로 접근할 수 있습니다.
달리 명시되지 않는 한 함수로 호출할 수 있는 내장 객체는 10.3에 설명된 특성을 갖는 내장 함수 객체입니다. 달리 명시되지 않는 한 내장 객체의 [[Extensible]] 내부 슬롯은 처음에 true 값을 갖습니다. 모든 내장 함수 객체는 해당 객체가 처음 생성된 realm의 Realm Record를 값으로 갖는 [[Realm]] 내부 슬롯을 갖습니다.
많은 내장 객체는 함수이며 인수를 사용하여 호출할 수 있습니다. 그중 일부는 생성자이기도 하며 new 연산자와 함께 사용하기 위한 함수입니다. 각 내장 함수에 대해 이 명세는 해당 함수에 필요한 인수와 해당 함수 객체의 프로퍼티를 설명합니다. 각 내장 생성자에 대해 이 명세는 추가로 해당 생성자의 프로토타입 객체의 프로퍼티와 해당 생성자를 호출하는 new 표현식이 반환하는 특정 객체 인스턴스의 프로퍼티를 설명합니다.
특정 함수의 설명에서 달리 명시하지 않는 한 내장 함수 또는 생성자에 함수가 필요로 하는 것보다 적은 수의 인수가 주어지면, 해당 함수 또는 생성자는 각 추가 인수가 undefined 값인 충분한 수의 추가 인수를 전달받은 것과 정확히 동일하게 동작해야 합니다. 이러한 누락된 인수는 “존재하지 않는” 것으로 간주되며 명세 알고리즘에서 그러한 방식으로 식별될 수 있습니다. 특정 함수의 설명에서 “this 값” 및 “NewTarget”이라는 용어는 10.3에 주어진 의미를 갖습니다.
특정 함수의 설명에서 달리 명시하지 않는 한 설명된 내장 함수 또는 생성자에 함수가 허용하도록 명시된 것보다 많은 인수가 주어지면 추가 인수는 호출에 의해 평가된 다음 함수에서 무시됩니다. 다만 구현체는 단순히 추가 인수가 존재한다는 사실만을 근거로 TypeError 예외를 던지는 동작이 아닌 한 이러한 인수와 관련된 구현체 고유 동작을 정의할 수 있습니다.
참고 1
내장 함수 집합에 추가 기능을 추가하는 구현체는 기존 함수에 새 매개변수를 추가하는 대신 새 함수를 추가하는 방식으로 구현하는 것이 권장됩니다.
달리 명시되지 않는 한 모든 내장 함수와 모든 내장 생성자는 Function.prototype 표현식의 초기 값인 Function 프로토타입 객체(20.2.3)를 [[Prototype]] 내부 슬롯의 값으로 갖습니다.
달리 명시되지 않는 한 Object 프로토타입 객체 자체를 제외한 모든 내장 프로토타입 객체는 Object.prototype 표현식의 초기 값인 Object 프로토타입 객체(20.1.3)를 [[Prototype]] 내부 슬롯의 값으로 갖습니다.
이 명세가 알고리즘 단계를 통해 내장 생성자의 동작을 정의하는 경우 이는 [[Call]] 및 [[Construct]] 모두에 대한 동작입니다. 이러한 알고리즘이 두 경우를 구분해야 한다면 NewTarget이 undefined인지 검사하며, 이는 [[Call]] 호출임을 나타냅니다.
생성자로 식별되지 않은 내장 함수 객체는 특정 함수의 설명에서 달리 명시하지 않는 한 [[Construct]] 내부 메서드를 구현하지 않습니다.
생성자가 아닌 내장 함수 객체는 특정 함수의 설명에서 달리 명시하지 않는 한 "prototype" 프로퍼티를 갖지 않습니다.
이 명세에 정의된 각 내장 함수는 CreateBuiltinFunction 추상 연산(10.3.4)을 호출하여 생성됩니다. length 및 name 매개변수의 값은 아래에서 설명하는 "length" 및 "name" 프로퍼티의 초기 값입니다. prefix 매개변수의 값도 마찬가지로 아래에서 설명합니다.
생성자를 포함한 모든 내장 함수 객체는 값이 음수가 아닌 정수 Number인 "length" 프로퍼티를 갖습니다. 달리 명시되지 않는 한 이 값은 함수 설명의 하위 절 제목에 표시된 필수 매개변수의 수입니다. 선택적 매개변수와 나머지 매개변수는 매개변수 수에 포함되지 않습니다.
참고 2
예를 들어 Array 프로토타입 객체의 "map" 프로퍼티 초기 값인 함수 객체는 «Array.prototype.map (callback [ , thisArg])»이라는 하위 절 제목 아래에 설명되어 있으며, callback과 thisArg라는 두 개의 이름 있는 인수가 표시되고 후자는 선택적입니다. 따라서 해당 함수 객체의 "length" 프로퍼티 값은 1𝔽입니다.
달리 명시되지 않는 한 내장 함수 객체의 "length" 프로퍼티는 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true } 속성을 갖습니다.
생성자를 포함한 모든 내장 함수 객체는 값이 String인 "name" 프로퍼티를 갖습니다. 달리 명시되지 않는 한 이 값은 이 명세에서 함수에 주어진 이름입니다. 익명 함수로 식별된 함수는 빈 String을 "name" 프로퍼티의 값으로 사용합니다. 객체의 프로퍼티로 명시된 함수의 경우 name 값은 해당 함수에 접근하는 데 사용하는 프로퍼티 이름 문자열입니다. 내장 프로퍼티의 get 또는 set 접근자 함수로 명시된 함수는 CreateBuiltinFunction을 호출할 때 각각 "get" 또는 "set"을 prefix 매개변수에 전달합니다.
프로퍼티 키가 Symbol 값인 각 내장 함수의 "name" 프로퍼티 값은 명시적으로 지정됩니다. 이렇게 명시적으로 지정된 값이 "get " 또는 "set " 접두사로 시작하고 해당 함수가 내장 프로퍼티의 get 또는 set 접근자 함수이면 접두사를 제거한 값을 name 매개변수에 전달하고 각각 "get" 또는 "set" 값을 CreateBuiltinFunction 호출 시 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입니다.