The most specific description for objects like Object, Array, etc. is "built-in constructor".
In short, section 4.4.12 built-in object annotates:
NOTE
Standard built-in objects are defined in this specification.
An ECMAScript implementation may specify and supply additional kinds of
built-in objects. A built-in constructor is a built-in object that is
also a constructor.
Section 4 is non-normative, but the above note can be derived from the following:
Section 6.1.7.2 Object Internal Methods and Internal Slots: (Boldness applied by me)
... A function object is an object that supports
the [[Call]] internal method. A constructor is an object that
supports the [[Construct]] internal method. Every object that
supports [[Construct]] must support [[Call]];
that is, every constructor must be a function object.
Therefore, a constructor may also be referred to as a
constructor function or constructor function object.
This means, constructors are functions, and functions are objects.
Section 6.1.7.4 Well-Known Intrinsic Objects:
Well-known intrinsics are built-in objects (...).
And:
The well-known intrinsics are listed in Table 6.
With Table 6:
| Global Name |
ECMAScript Language Association |
Array |
The Array constructor (23.1.1) |
Object |
The Object constructor (20.1.1) |
| ... |
... |
Point 2 lists several built-in objects like Array and Object. The table and the definitions in the corresponding links call these "constructors".
Point 1 explains that constructors are objects, so it is valid to say "built-in constructor" instead of "built-in objects", where applicable.
Here is a short summary of other interesting terms and definitions in the specification:
- An object is a member of the type Object. (See 4.4.6)
- A function (or function object) is an object that supports the internal function
[[Call]] (which may or may not be exposed). (See 6.1.7.2 Table 5)
- A constructor (or constructor function or constructor function object) is a function that supports the internal function
[[Construct]] (commonly invoked with the new operator). (See 6.1.7.2 Table 5)
- All constructors have the property
prototype. (See 4.3.1)
- Both function definitions and function expressions create constructors. (See 15.2.4 and 15.2.5, respectively)
- Arrow function expressions do not create constructors and can therefore not be instantiated. (See 15.3.4)
- Class definitions (ES6
class syntax) return constructor functions that are uncallable (meaning they do not expose [[Call]]). (See 15.7.14)
new, and while it may be a little inelegant it makes sense. It's not clear what sort of behaviorMap()would have withoutnew. Note also thatSymbolrepresents a class of items, but it cannot be called withnew. In the end, these are things that the standards committee decides, and there's nothing we can do about it.new.