18 ECMAScript Standard Built-in Objects
ECMAScript ScriptまたはModuleがexecutionを開始するときには常に利用可能な特定のbuilt-in objectsがあります。その1つであるglobal objectは、executing programのglobal environmentの一部です。その他は、global objectのinitial propertiesとして、またはaccessible built-in objectsのpropertiesとして間接的にaccessできます。
特に指定されない限り、functionとしてcallableなbuilt-in objectは、10.3で記述されるcharacteristicsを持つbuilt-in function objectです。特に指定されない限り、built-in objectの[[Extensible]] internal slotはinitiallyにtrueというvalueを持ちます。すべてのbuilt-in function objectは[[Realm]] internal slotを持ち、そのvalueは、そのobjectがinitiallyに作成されたrealmのRealm Recordです。
多くのbuilt-in objectsはfunctionsです:それらはargumentsを伴ってinvokedできます。さらにその一部はconstructorsです:それらはnew operatorとともに使用することを意図したfunctionsです。各built-in functionについて、この仕様は、そのfunctionが要求するargumentsと、そのfunction objectのpropertiesを記述します。各built-in constructorについて、この仕様はさらに、そのconstructorのprototype objectのpropertiesと、そのconstructorをinvokeするnew expressionによって返される特定のobject instancesのpropertiesを記述します。
特定のfunctionのdescriptionで別途指定されない限り、built-in functionまたはconstructorに、そのfunctionが要求すると指定される数より少ないargumentsが与えられた場合、そのfunctionまたはconstructorは、十分な追加argumentsが与えられ、それらの各argumentがundefined valueであったかのように、正確にbehaveしなければなりません。そのようなmissing argumentsは“not present”であるとみなされ、specification algorithmsによってそのようにidentifyされる場合があります。特定のfunctionのdescriptionにおいて、terms “this value”および“NewTarget”は、10.3で与えられる意味を持ちます。
特定のfunctionのdescriptionで別途指定されない限り、記述されるbuilt-in functionまたはconstructorに、そのfunctionが許すと指定される数より多いargumentsが与えられた場合、extra argumentsはcallによってevaluatedされ、その後functionによってignoredされます。ただし、implementationは、extra argumentの存在だけを根拠としてTypeError例外をthrowするものではない限り、そのようなargumentsに関係するimplementation specific behaviourを定義してもよいです。
Note 1
built-in functionsのsetに追加のcapabilitiesを加えるimplementationsは、既存のfunctionsに新しいparametersを追加するのではなく、新しいfunctionsを追加することによってそれを行うことが推奨されます。
特に指定されない限り、すべてのbuilt-in functionおよびすべてのbuilt-in constructorは、式Function.prototype(20.2.3)のinitial valueであるFunction prototype objectを、その[[Prototype]] internal slotのvalueとして持ちます。
特に指定されない限り、すべてのbuilt-in prototype objectは、Object prototype object自体を除き、式Object.prototype(20.1.3)のinitial valueであるObject prototype objectを、その[[Prototype]] internal slotのvalueとして持ちます。
この仕様がbuilt-in constructorのbehaviourをalgorithm stepsによって定義する場合、それは[[Call]]と[[Construct]]の両方のpurposesにおけるそのbehaviourです。そのようなalgorithmが2つの場合を区別する必要がある場合、NewTargetがundefinedであるかどうかをcheckし、これは[[Call]] invocationを示します。
constructorsとしてidentifyされていないbuilt-in function objectsは、特定のfunctionのdescriptionで別途指定されない限り、[[Construct]] internal methodをimplementしません。
constructorsでないbuilt-in function objectsは、特定のfunctionのdescriptionで別途指定されない限り、"prototype" propertyを持ちません。
この仕様で定義される各built-in functionは、CreateBuiltinFunction abstract operation(10.3.4)をcallすることによって作成されます。lengthおよびname parametersのvaluesは、以下で議論される"length"および"name" propertiesのinitial valuesです。prefix parameterのvaluesも同様に以下で議論されます。
constructorsを含むすべてのbuilt-in function objectは、そのvalueがnon-negative integral Numberである"length" propertyを持ちます。特に指定されない限り、このvalueは、function descriptionのsubclause headingに示されるrequired parametersの数です。Optional parametersおよびrest parametersはparameter countに含まれません。
Note 2
例えば、Array prototype objectの"map" propertyのinitial valueであるfunction objectは、subclause heading «Array.prototype.map (callback [ , thisArg])» の下で記述され、そこには2つのnamed arguments callbackおよびthisArgが示されており、後者はoptionalです;したがって、そのfunction objectの"length" propertyのvalueは1𝔽です。
特に指定されない限り、built-in function objectの"length" propertyはattributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true }を持ちます。
constructorsを含むすべてのbuilt-in function objectは、そのvalueがStringである"name" propertyを持ちます。特に指定されない限り、このvalueは、この仕様でそのfunctionに与えられるnameです。anonymous functionsとしてidentifyされるfunctionsは、empty Stringを"name" propertyのvalueとして使用します。objectsのpropertiesとして指定されるfunctionsについては、name valueは、そのfunctionにaccessするために使用されるproperty name stringです。built-in propertiesのgetまたはset accessor functionsとして指定されるfunctionsは、CreateBuiltinFunctionをcallするときにprefix parameterへ"get"または"set"(それぞれ)が渡されます。
"name" propertyのvalueは、property keyがSymbol valueである各built-in functionsについてexplicitlyに指定されます。そのようなexplicitly specified valueがprefix "get "または"set "で始まり、それが指定されるfunctionがbuilt-in propertyのgetまたはset accessor functionである場合、prefixを除いたvalueがname parameterへ渡され、value "get"または"set"(それぞれ)がCreateBuiltinFunctionをcallするときにprefix parameterへ渡されます。
特に指定されない限り、built-in function objectの"name" propertyはattributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true }を持ちます。
clauses 19から28まで、およびAnnex B.2に記述されるその他すべてのdata propertyは、特に指定されない限りattributes { [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: true }を持ちます。
clauses 19から28まで、およびAnnex B.2に記述されるすべてのaccessor propertyは、特に指定されない限りattributes { [[Enumerable]]: false, [[Configurable]]: true }を持ちます。get accessor functionだけが記述されている場合、set accessor functionはdefault valueであるundefinedです。set accessorだけが記述されている場合、get accessorはdefault valueであるundefinedです。