There are certain built-in objects available whenever an ECMAScript Script or Module begins execution. One, the global object, is part of the lexical environment of the executing program. Others are accessible as initial properties of the global object or indirectly as properties of accessible built-in objects.
Unless specified otherwise, a built-in object that is callable as a function is a built-in Function object with the characteristics described in 9.3. Unless specified otherwise, the [[Extensible]] internal slot of a built-in object initially has the value true. Every built-in Function object has a [[Realm]] internal slot whose value is the code Realm for which the object was initially created.
Many built-in objects are functions: they can be invoked with arguments. Some of them furthermore are constructors: they are
functions intended for use with the new
operator. For each built-in function, this specification describes the
arguments required by that function and the properties of that function object. For each built-in constructor, this
specification furthermore describes properties of the prototype object of that constructor and properties of specific object
instances returned by a new
expression that invokes that constructor.
Unless otherwise specified in the description of a particular function, if a built-in function or constructor is given fewer
arguments than the function is specified to require, the function or constructor shall behave exactly as if it had been given
sufficient additional arguments, each such argument being the undefined value. Such missing arguments are considered to
be “not present” and may be identified in that manner by specification algorithms. In the description of a
particular function, the terms “this
value” and
“NewTarget” have the meanings given in 9.3.
Unless otherwise specified in the description of a particular function, if a built-in function or constructor described is given more arguments than the function is specified to allow, the extra arguments are evaluated by the call and then ignored by the function. However, an implementation may define implementation specific behaviour relating to such arguments as long as the behaviour is not the throwing of a TypeError exception that is predicated simply on the presence of an extra argument.
NOTE 1 Implementations that add additional capabilities to the set of built-in functions are encouraged to do so by adding new functions rather than adding new parameters to existing functions.
Unless otherwise specified every built-in function and every built-in constructor has the Function prototype object, which is
the initial value of the expression Function.prototype
(19.2.3), as the value of its [[Prototype]] internal slot.
Unless otherwise specified every built-in prototype object has the Object prototype object, which is the initial value of the
expression Object.prototype
(19.1.3), as the value of
its [[Prototype]] internal slot, except the Object prototype
object itself.
Built-in function objects that are not identified as constructors do not implement the [[Construct]] internal method unless otherwise specified in the description of a particular function.
Unless otherwise specified, each built-in function defined in this specification is created as if by calling the CreateBuiltinFunction abstract operation (9.3.3).
Every built-in Function object, including constructors, has a length
property whose value is an integer. Unless
otherwise specified, this value is equal to the largest number of named arguments shown in the subclause headings for the
function description, including optional parameters. However, rest parameters shown using the form “...name” are not
included in the default argument count.
NOTE 2 For example, the function object that is the initial value of the slice
property of the String prototype object is described under the subclause heading “String.prototype.slice (start, end)” which shows the two named arguments start
and end; therefore the value of the length
property of that Function object is 2
.
Unless otherwise specified, the length
property of a built-in Function object has the attributes
{ [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true }.
Every built-in Function object, including constructors, that is not identified as an anonymous function has a
name
property whose value is a String. Unless otherwise specified, this value is the name that is given to the
function in this specification. For functions that are specified as properties of objects, the name value is the property name
string used to access the function. Functions that are specified as get or set accessor functions of built-in properties have
"get "
or "set "
prepended to the property name string. The value of the name
property is
explicitly specified for each built-in functions whose property key is a Symbol value.
Unless otherwise specified, the name
property of a built-in Function object, if it exists, has the attributes
{ [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true }.
Every other data property described in clauses 18 through 26 and in Annex { REF _Ref406169814 \n \h }B.2 has the attributes { [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: true } unless otherwise specified.
Every accessor property described in clauses 18 through 26 and in Annex { REF _Ref406169814 \n \h }B.2 has the attributes {[[Enumerable]]: false, [[Configurable]]: true } unless otherwise specified. If only a get accessor function is described, the set accessor function is the default value, undefined. If only a set accessor is described the get accessor is the default value, undefined.