4 개요

이 절은 ECMAScript 언어에 대한 비규범적 개요를 담고 있다.

ECMAScript는 호스트 환경 내에서 계산을 수행하고 계산 객체를 조작하기 위한 객체지향 프로그래밍 언어이다. 여기서 정의된 ECMAScript는 계산적으로 자급자족하도록 의도되지 않았다. 실제로 이 명세서에는 외부 데이터의 입력이나 계산 결과의 출력에 대한 규정이 없다. 대신 ECMAScript 프로그램의 계산 환경은 이 명세서에 설명된 객체와 기타 기능뿐 아니라, 특정 프로퍼티를 제공하여 접근될 수 있고 특정 함수를 제공하여 ECMAScript 프로그램으로부터 호출될 수 있음을 제외하면 그 설명과 동작이 이 명세서의 범위를 벗어나는, 환경 특화 객체도 제공할 것으로 예상된다.

ECMAScript는 원래 스크립트 언어로 사용되도록 설계되었으나, 현재는 범용 프로그래밍 언어로 널리 사용되고 있다. 스크립트 언어는 기존 시스템의 기능을 조작, 맞춤화, 자동화하는 데 사용되는 프로그래밍 언어이다. 이러한 시스템에서는 유용한 기능이 이미 사용자 인터페이스를 통해 제공되며, 스크립트 언어는 그러한 기능을 프로그램 제어에 노출하는 메커니즘이다. 이런 방식으로 기존 시스템은 객체와 기능으로 이루어진 호스트 환경을 제공하며, 이는 스크립트 언어의 능력을 완성한다. 스크립트 언어는 전문 프로그래머와 비전문 프로그래머 모두가 사용할 수 있도록 의도된다.

ECMAScript는 원래 웹 스크립트 언어로 설계되었으며, 브라우저에서 웹 페이지를 동적으로 만들고 웹 기반 클라이언트-서버 아키텍처의 일부로 서버 계산을 수행하는 메커니즘을 제공했다. 현재 ECMAScript는 다양한 호스트 환경에 핵심 스크립트 기능을 제공하는 데 사용된다. 따라서 핵심 언어는 특정 호스트 환경과 분리되어 이 문서에서 명세된다.

ECMAScript의 사용은 단순한 스크립팅을 넘어섰으며, 이제는 매우 다양한 환경과 규모에서 프로그래밍 작업의 전 범위에 사용된다. ECMAScript의 사용이 확장됨에 따라 그것이 제공하는 기능과 설비도 함께 확장되었다. 이제 ECMAScript는 완전한 기능을 갖춘 범용 프로그래밍 언어이다.

4.1 웹 스크립팅

웹 브라우저는 클라이언트 측 계산을 위한 ECMAScript 호스트 환경을 제공하며, 여기에는 예를 들어 창, 메뉴, 팝업, 대화 상자, 텍스트 영역, 앵커, 프레임, 기록, 쿠키 및 입출력을 나타내는 객체가 포함된다. 또한 호스트 환경은 포커스 변경, 페이지 및 이미지 로딩, 언로딩, 오류 및 중단, 선택, 폼 제출, 마우스 동작과 같은 이벤트에 스크립트 코드를 연결하는 수단을 제공한다. 스크립트 코드는 HTML 내부에 나타나며, 표시되는 페이지는 사용자 인터페이스 요소와 고정 및 계산된 텍스트와 이미지의 조합이다. 스크립트 코드는 사용자 상호작용에 반응하며, 메인 프로그램이 필요 없다.

웹 서버는 요청, 클라이언트, 파일을 나타내는 객체와 데이터를 잠그고 공유하는 메커니즘을 포함하는, 서버 측 계산을 위한 다른 호스트 환경을 제공한다. 브라우저 측 스크립팅과 서버 측 스크립팅을 함께 사용하면, 웹 기반 애플리케이션에 맞춤형 사용자 인터페이스를 제공하면서 계산을 클라이언트와 서버 사이에 분산할 수 있다.

ECMAScript를 지원하는 각 웹 브라우저와 서버는 자체 호스트 환경을 제공하여 ECMAScript 실행 환경을 완성한다.

4.2 호스트와 구현

ECMAScript를 호스트 환경에 통합하는 데 도움을 주기 위해, 이 명세서는 특정 기능(예: 추상 연산)의 정의를 전부 또는 일부에 대해 이 명세서 외부의 출처에 위임한다. 편집상, 이 명세서는 다음과 같은 종류의 위임을 구분한다.

구현은 부속서 D에 열거된 기능이나 구현 정의 또는 구현 근사로 표시된 기능을 추가로 정의하는 외부 출처이다. 비공식적으로는 특정 웹 브라우저와 같은 구체적 산출물을 구현이라고 부른다.

구현 정의(implementation-defined) 기능은 추가적인 한정 없이 그 정의를 외부 출처에 위임하는 기능이다. 이 명세서는 특정 동작에 대해 어떤 권고도 하지 않으며, 적합한 구현은 이 명세서가 제시한 제약 내에서 자유롭게 어떤 동작이든 선택할 수 있다.

구현 근사(implementation-approximated) 기능은 이상적인 동작을 권고하면서도 그 정의를 외부 출처에 위임하는 기능이다. 적합한 구현은 이 명세서가 제시한 제약 내에서 자유롭게 어떤 동작이든 선택할 수 있지만, 이상적인 동작에 근사하도록 노력하는 것이 권장된다. Math.exp와 같은 일부 수학 연산은 구현 근사이다.

호스트는 부속서 D에 나열된 기능을 추가로 정의하지만, 다른 구현 정의 또는 구현 근사 기능은 추가로 정의하지 않는 외부 출처이다. 비공식적으로는, 호스트는 부속서 D를 통해 이 명세서와 동일한 방식으로 인터페이스하는 모든 구현의 집합, 예를 들어 모든 웹 브라우저의 집합을 가리킨다. 호스트는 종종 WHATWG HTML(https://html.spec.whatwg.org/)과 같은 외부 명세이다. 다시 말해, 호스트 정의 기능은 종종 외부 명세에서 추가로 정의된다.

호스트 훅은 외부 출처에 의해 전부 또는 일부가 정의되는 추상 연산이다. 모든 호스트 훅은 부속서 D에 나열되어야 한다. 호스트 훅은 최소한 다음 요구 사항을 충족해야 한다.

  • 반드시 정상 완료 또는 던지기 완료를 반환해야 한다.

호스트 정의(host-defined) 기능은 추가적인 한정 없이 그 정의를 외부 출처에 위임하며, 부속서 D에 나열된 기능이다. 호스트가 아닌 구현도 호스트 정의 기능에 대한 정의를 제공할 수 있다.

호스트 환경은 모든 호스트 정의 기능에 대한 특정한 정의 선택이다. 호스트 환경에는 전역 객체호스트 정의 프로퍼티로서 입력을 얻고 출력을 제공할 수 있게 하는 객체나 함수가 일반적으로 포함된다.

이 명세서는 항상 가장 구체적인 용어를 사용하는 편집 관례를 따른다. 예를 들어 어떤 기능이 호스트 정의라면, 그것을 구현 정의라고 불러서는 안 된다.

호스트와 구현은 모두 여기에서 정의된 언어 타입, 명세 타입, 추상 연산, 문법 생성 규칙, 내재 객체, 내재 심볼을 통해 이 명세서와 인터페이스할 수 있다.

4.3 ECMAScript 개요

다음은 ECMAScript에 대한 비공식 개요이며, 언어의 모든 부분이 설명되는 것은 아니다. 이 개요는 표준 본문 자체의 일부가 아니다.

ECMAScript는 객체 기반이다. 기본 언어 기능과 호스트 기능은 객체에 의해 제공되며, ECMAScript 프로그램은 서로 통신하는 객체들의 집합이다. ECMAScript에서 객체는 0개 이상의 프로퍼티의 집합이며, 각 프로퍼티는 그 프로퍼티가 어떻게 사용될 수 있는지를 결정하는 어트리뷰트를 가진다. 예를 들어 어떤 프로퍼티의 Writable 어트리뷰트가 false로 설정되면, 실행 중인 ECMAScript 코드가 그 프로퍼티에 다른 값을 할당하려는 시도는 실패한다. 프로퍼티는 다른 객체, 원시 값, 또는 함수를 담는 컨테이너이다. 원시 값은 다음 내장 타입 중 하나의 구성원이다: Undefined, Null, Boolean, Number, BigInt, String, 그리고 Symbol; 객체는 내장 타입 Object의 구성원이고, 함수는 호출 가능한 객체이다. 프로퍼티를 통해 객체와 연관된 함수는 메서드라고 불린다.

ECMAScript는 ECMAScript 엔티티의 정의를 완성하는 내장 객체의 집합을 정의한다. 이러한 내장 객체에는 전역 객체, Object, Function, Boolean, Symbol, 여러 Error 객체를 포함한 언어의 런타임 의미론에 기본적인 객체, Math, Number, Date를 포함한 숫자 값을 표현하고 조작하는 객체, 텍스트 처리 객체인 StringRegExp, Array와 각 요소가 특정 숫자 데이터 표현을 갖는 아홉 가지 서로 다른 Typed Array를 포함한 값의 인덱스 컬렉션 객체, MapSet 객체를 포함한 키 기반 컬렉션, JSON 객체, ArrayBuffer, SharedArrayBuffer, DataView를 포함한 구조화된 데이터를 지원하는 객체, 제너레이터 함수와 Promise 객체를 포함한 제어 추상화를 지원하는 객체, 그리고 ProxyReflect를 포함한 리플렉션 객체가 포함된다.

ECMAScript는 또한 내장 연산자의 집합도 정의한다. ECMAScript 연산자에는 다양한 단항 연산, 곱셈 연산자, 덧셈 연산자, 비트 시프트 연산자, 관계 연산자, 동등 연산자, 이항 비트 연산자, 이항 논리 연산자, 할당 연산자, 그리고 쉼표 연산자가 포함된다.

대규모 ECMAScript 프로그램은 프로그램을 여러 개의 문장 및 선언 시퀀스로 분할할 수 있게 하는 모듈에 의해 지원된다. 각 모듈은 다른 모듈이 제공해야 하는 자신이 사용하는 선언과, 다른 모듈이 사용할 수 있도록 제공되는 자신의 선언을 명시적으로 식별한다.

ECMAScript 문법은 의도적으로 Java 문법과 유사하다. ECMAScript 문법은 사용하기 쉬운 스크립트 언어 역할을 할 수 있도록 완화되어 있다. 예를 들어 변수는 그 타입을 선언할 필요가 없고, 타입은 프로퍼티와 연관되지 않으며, 정의된 함수는 그 선언이 해당 함수 호출보다 텍스트상 앞에 나타날 필요가 없다.

4.3.1 객체

ECMAScript는 클래스 정의를 위한 문법을 포함하지만, ECMAScript 객체는 C++, Smalltalk, Java와 같은 언어들처럼 본질적으로 클래스 기반이 아니다. 대신 객체는 리터럴 표기법이나, 객체를 생성한 다음 그 프로퍼티에 초기값을 할당하여 객체의 전체 또는 일부를 초기화하는 코드를 실행하는 생성자를 포함한 다양한 방식으로 생성될 수 있다. 각 생성자는 "prototype"이라는 이름의 프로퍼티를 가진 함수이며, 이는 프로토타입 기반 상속공유 프로퍼티를 구현하는 데 사용된다. 객체는 new 표현식에서 생성자를 사용하여 만들어진다. 예를 들어 new Date(2009, 11)은 새로운 Date 객체를 생성한다. new를 사용하지 않고 생성자를 호출하면, 그 결과는 생성자에 따라 달라진다. 예를 들어 Date()는 객체가 아니라 현재 날짜와 시간을 나타내는 문자열 표현을 생성한다.

생성자에 의해 생성된 모든 객체는 그 생성자의 "prototype" 프로퍼티 값에 대한 암묵적 참조(객체의 프로토타입이라 불린다)를 가진다. 또한 프로토타입은 자기 자신의 프로토타입에 대한 비-null 암묵적 참조를 가질 수 있고, 이런 식으로 계속 이어질 수 있다. 이를 프로토타입 체인이라고 한다. 객체의 어떤 프로퍼티를 참조할 때, 그 참조는 해당 이름의 프로퍼티를 포함하는 프로토타입 체인의 첫 번째 객체 안의 그 이름의 프로퍼티를 가리킨다. 다시 말해, 먼저 직접 언급된 객체를 검사하여 그런 프로퍼티가 있는지 본다. 그 객체가 그 이름의 프로퍼티를 가지고 있다면 참조는 그 프로퍼티를 가리킨다. 그 객체가 그 이름의 프로퍼티를 가지고 있지 않다면, 다음으로 그 객체의 프로토타입을 검사하며, 이런 방식으로 계속된다.

Figure 1: 객체/프로토타입 관계
많은 상자와 화살표가 있는 이미지.

클래스 기반 객체지향 언어에서는 일반적으로 상태는 인스턴스가 가지며, 메서드는 클래스가 가지며, 상속은 구조와 동작에 대해서만 이루어진다. ECMAScript에서는 상태와 메서드를 객체가 가지며, 구조, 동작, 상태가 모두 상속된다.

자신의 프로토타입이 가진 특정 프로퍼티를 직접 포함하지 않는 모든 객체는 그 프로퍼티와 그 값을 공유한다. 그림 1은 이를 보여 준다.

CF는 생성자(이자 객체)이 다. new 표현식을 사용하여 다섯 개의 객체가 생성되었다: cf1, cf2, cf3, cf4, 그리고 cf5. 이들 각각의 객체는 "q1""q2"라는 이름의 프로퍼티를 포함한다. 점선은 암묵적 프로토타입 관계를 나타낸다. 예를 들어 cf3의 프로토타입은 CFp이다. 생성자 CF는 자체적으로 "P1""P2"라는 이름의 두 프로퍼티를 가지며, 이들은 CFp, cf1, cf2, cf3, cf4, 또는 cf5에서는 보이지 않는다. CFp 안의 "CFP1"이라는 이름의 프로퍼티는 cf1, cf2, cf3, cf4, 그리고 cf5가 공유하며(CF는 제외), 마찬가지로 CFp의 암묵적 프로토타입 체인에서 "q1", "q2", 또는 "CFP1"이라는 이름이 아닌 모든 프로퍼티도 공유한다. CFCFp 사이에는 암묵적 프로토타입 연결이 없다는 점에 유의하라.

대부분의 클래스 기반 객체 언어와 달리, 프로퍼티는 값 할당을 통해 객체에 동적으로 추가될 수 있다. 즉, 생성자는 생성된 객체의 프로퍼티 전부 또는 일부에 이름을 붙이거나 값을 할당할 필요가 없다. 위 그림에서는 CFp의 프로퍼티에 새 값을 할당함으로써 cf1, cf2, cf3, cf4, 그리고 cf5를 위한 새로운 공유 프로퍼티를 추가할 수 있다.

ECMAScript 객체는 본질적으로 클래스 기반이 아니지만, 생성자 함수, 프로토타입 객체, 메서드의 공통 패턴에 기초한 클래스 유사 추상을 정의하는 것이 종종 편리하다. ECMAScript 내장 객체 자체도 그러한 클래스 유사 패턴을 따른다. ECMAScript 2015부터 ECMAScript 언어는 프로그래머가 내장 객체에서 사용되는 것과 동일한 클래스 유사 추상 패턴을 따르는 객체를 간결하게 정의할 수 있도록 하는 구문적 클래스 정의를 포함한다.

4.3.2 ECMAScript의 엄격 변형

ECMAScript 언어는 일부 사용자가 언어에서 사용 가능한 몇몇 기능의 사용을 제한하고 싶어 할 수 있다는 가능성을 인정한다. 그들은 보안상의 이유, 오류를 유발하기 쉽다고 여기는 기능을 피하기 위해, 더 강화된 오류 검사를 얻기 위해, 또는 그 밖에 스스로 선택한 다른 이유로 그렇게 할 수 있다. 이러한 가능성을 지원하기 위해 ECMAScript는 언어의 엄격 변형을 정의한다. 언어의 엄격 변형은 일반 ECMAScript 언어의 특정 구문 및 의미 기능 일부를 제외하고, 일부 기능의 상세 의미론을 수정한다. 또한 엄격 변형은 비엄격 형태의 언어에서는 오류로 명세되지 않은 상황에서 오류 예외를 던짐으로써 반드시 보고되어야 하는 추가 오류 조건을 명세한다.

ECMAScript의 엄격 변형은 일반적으로 언어의 엄격 모드라고 불린다. ECMAScript의 엄격 모드 선택과 엄격 모드 구문 및 의미론의 사용은 11.2.2에서 설명된 바와 같이 개별 ECMAScript 소스 텍스트 단위 수준에서 명시적으로 이루어진다. 엄격 모드는 구문적 소스 텍스트 단위 수준에서 선택되므로, 엄격 모드는 그러한 소스 텍스트 단위 내에서만 국소적 효과를 가지는 제한만 부과한다. 엄격 모드는 여러 소스 텍스트 단위에 걸쳐 일관되게 작동해야 하는 ECMAScript 의미론의 어떤 측면도 제한하거나 수정하지 않는다. 완전한 ECMAScript 프로그램은 엄격 모드와 비엄격 모드 ECMAScript 소스 텍스트 단위가 혼합되어 구성될 수 있다. 이 경우 엄격 모드는 실제로 엄격 모드 소스 텍스트 단위 안에 정의된 코드를 실행할 때에만 적용된다.

이 명세서에 부합하려면, ECMAScript 구현은 이 명세서가 정의한 완전한 비제한 ECMAScript 언어와 ECMAScript 언어의 엄격 변형을 모두 구현해야 한다. 또한 구현은 비제한 및 엄격 모드 소스 텍스트 단위를 하나의 복합 프로그램으로 결합하는 것을 지원해야 한다.

4.4 용어와 정의

이 문서의 목적상, 다음 용어와 정의를 적용한다.

4.4.1 implementation-approximated

구현 근사 기능은 외부 출처에 의해 전부 또는 일부가 정의되지만, 이 명세서에서 권장되는 이상적 동작을 가진다

4.4.2 implementation-defined

구현 정의 기능은 이 명세서 외부의 출처에 의해 전부 또는 일부가 정의된다

4.4.3 host-defined

implementation-defined와 동일

Note

편집상으로는 절 4.2를 보라.

4.4.4 type

6에서 정의된 데이터 값의 집합

4.4.5 primitive value

6에서 정의된 Undefined, Null, Boolean, Number, BigInt, Symbol, 또는 String 타입 중 하나의 구성원

Note

원시 값은 언어 구현의 최하위 수준에서 직접 표현되는 데이터이다.

4.4.6 object

Object 타입의 구성원

Note

객체는 프로퍼티들의 집합이며 단 하나의 프로토타입 객체를 가진다. 프로토타입은 null일 수 있다.

4.4.7 constructor

객체를 생성하고 초기화하는 함수 객체

Note

생성자의 "prototype" 프로퍼티 값은 상속 및 공유 프로퍼티를 구현하는 데 사용되는 프로토타입 객체이다.

4.4.8 prototype

다른 객체에 공유 프로퍼티를 제공하는 객체

Note

생성자가 객체를 생성할 때, 그 객체는 프로퍼티 참조를 해석하기 위해 생성자의 "prototype" 프로퍼티를 암묵적으로 참조한다. 생성자의 "prototype" 프로퍼티는 프로그램 표현식 constructor.prototype으로 참조할 수 있으며, 객체의 프로토타입에 추가된 프로퍼티는 상속을 통해 그 프로토타입을 공유하는 모든 객체에 공유된다. 또는 Object.create 내장 함수를 사용하여 명시적으로 지정된 프로토타입을 가진 새 객체를 생성할 수도 있다.

4.4.9 ordinary object

모든 객체가 지원해야 하는 필수 내부 메서드에 대해 기본 동작을 가지는 객체

4.4.10 exotic object

하나 이상의 필수 내부 메서드에 대해 기본 동작을 가지지 않는 객체

Note

보통 객체가 아닌 모든 객체는 이색 객체이다.

4.4.11 standard object

그 의미론이 이 명세서에 의해 정의되는 객체

4.4.12 built-in object

ECMAScript 구현에 의해 명세되고 제공되는 객체

Note

표준 내장 객체는 이 명세서에서 정의된다. ECMAScript 구현은 추가적인 종류의 내장 객체를 명세하고 제공할 수 있다.

4.4.13 undefined value

변수에 값이 할당되지 않았을 때 사용되는 원시 값

4.4.14 Undefined type

유일한 값이 undefined 값인 타입

4.4.15 null value

어떠한 객체 값도 의도적으로 없음을 나타내는 원시 값

4.4.16 Null type

유일한 값이 null 값인 타입

4.4.17 Boolean value

Boolean 타입의 구성원

Note

Boolean 값은 truefalse 두 개뿐이다.

4.4.18 Boolean type

원시 값 truefalse로 이루어진 타입

4.4.19 Boolean object

표준 내장 Boolean 생성자의 인스턴스인 Object 타입의 구성원

Note

Boolean 객체는 new 표현식에서 Boolean 생성자를 사용하고, 인수로 Boolean 값을 제공하여 생성된다. 생성된 객체는 그 값이 Boolean 값인 내부 슬롯을 가진다. Boolean 객체는 Boolean 값으로 강제 변환될 수 있다.

4.4.20 String value

0개 이상의 16비트 부호 없는 정수 값으로 이루어진 유한한 순서열인 원시 값

Note

String 값은 String 타입의 구성원이다. 순서열의 각 정수 값은 일반적으로 UTF-16 텍스트의 단일 16비트 단위를 나타낸다. 그러나 ECMAScript는 그 값들이 16비트 부호 없는 정수여야 한다는 점 외에는 어떠한 제한이나 요구 사항도 두지 않는다.

4.4.21 String type

가능한 모든 String 값의 집합

4.4.22 String object

표준 내장 String 생성자의 인스턴스인 Object 타입의 구성원

Note

String 객체는 new 표현식에서 String 생성자를 사용하고, 인수로 String 값을 제공하여 생성된다. 생성된 객체는 그 값이 String 값인 내부 슬롯을 가진다. String 객체는 String 생성자를 함수로 호출하여(22.1.1.1) String 값으로 강제 변환될 수 있다.

4.4.23 Number value

IEEE 754-2019 배정밀도 64비트 이진 형식 값에 대응하는 원시 값

Note

Number 값은 Number 타입의 구성원이며 숫자의 직접적인 표현이다.

4.4.24 Number type

NaN(“숫자가 아님”), +∞𝔽(양의 무한대), 그리고 -∞𝔽(음의 무한대)를 포함한 가능한 모든 Number 값의 집합

4.4.25 Number object

표준 내장 Number 생성자의 인스턴스인 Object 타입의 구성원

Note

Number 객체는 new 표현식에서 Number 생성자를 사용하고, 인수로 Number 값을 제공하여 생성된다. 생성된 객체는 그 값이 Number 값인 내부 슬롯을 가진다. Number 객체는 Number 생성자를 함수로 호출하여(21.1.1.1) Number 값으로 강제 변환될 수 있다.

4.4.26 Infinity

양의 무한 Number 값인 Number 값

4.4.27 NaN

IEEE 754-2019 NaN(“숫자가 아님”) 값인 Number 값

4.4.28 BigInt value

임의 정밀도 정수 값에 대응하는 원시 값

4.4.29 BigInt type

가능한 모든 BigInt 값의 집합

4.4.30 BigInt object

표준 내장 BigInt 생성자의 인스턴스인 Object 타입의 구성원

4.4.31 Symbol value

유한 비-String 객체 프로퍼티 키를 나타내는 원시 값

4.4.32 Symbol type

가능한 모든 Symbol 값의 집합

4.4.33 Symbol object

표준 내장 Symbol 생성자의 인스턴스인 Object 타입의 구성원

4.4.34 function

서브루틴으로 호출될 수 있는 Object 타입의 구성원

Note

함수는 자신의 프로퍼티 외에도, 호출될 때 어떻게 동작하는지를 결정하는 실행 가능한 코드와 상태를 포함한다. 함수의 코드는 ECMAScript로 작성될 수도 있고 아닐 수도 있다.

4.4.35 built-in function

함수인 내장 객체

Note

내장 함수의 예로는 parseIntMath.exp가 있다. 호스트나 구현은 이 명세서에 설명되지 않은 추가 내장 함수를 제공할 수 있다.

4.4.36 built-in constructor

생성자인 내장 함수

Note

내장 생성자의 예로는 ObjectFunction이 있다. 호스트나 구현은 이 명세서에 설명되지 않은 추가 내장 생성자를 제공할 수 있다.

4.4.37 property

키(String 값 또는 Symbol 값)와 값을 연관시키는 객체의 일부

Note

프로퍼티의 형태에 따라 그 값은 데이터 값(원시 값, 객체, 또는 함수 객체)으로 직접 표현될 수도 있고, 접근자 함수 쌍을 통해 간접적으로 표현될 수도 있다.

4.4.38 method

프로퍼티의 값인 함수

Note

함수가 객체의 메서드로 호출될 때, 그 객체는 함수의 this 값으로 전달된다.

4.4.39 built-in method

내장 함수인 메서드

Note

표준 내장 메서드는 이 명세서에서 정의된다. 호스트나 구현은 이 명세서에 설명되지 않은 추가 내장 메서드를 제공할 수 있다.

4.4.40 attribute

프로퍼티의 어떤 특성을 정의하는 내부 값

4.4.41 own property

자신의 객체에 직접 포함된 프로퍼티

4.4.42 inherited property

자기 자신의 프로퍼티는 아니지만, 객체의 프로토타입의 프로퍼티(자기 자신의 것이든 상속된 것이든)인 객체의 프로퍼티

4.5 이 명세서의 구성

이 명세서의 나머지 부분은 다음과 같이 구성된다.

5는 명세서 전체에서 사용되는 표기 관례를 정의한다.

6부터 10까지는 ECMAScript 프로그램이 동작하는 실행 환경을 정의한다.

11부터 17까지는 구문 인코딩과 모든 언어 기능의 실행 의미론을 포함한 실제 ECMAScript 프로그래밍 언어를 정의한다.

18부터 28까지는 ECMAScript 표준 라이브러리를 정의한다. 여기에는 ECMAScript 프로그램이 실행될 때 사용할 수 있는 모든 표준 객체의 정의가 포함된다.

29는 SharedArrayBuffer가 뒷받침하는 메모리에 대한 접근과 Atomics 객체 메서드의 메모리 일관성 모델을 설명한다.