// marked as custom because 'name' property of some built-ins is not // specified exactly and implementations differ /*--- { "custom": true } ---*/ /*=== undefined Object undefined Function Array undefined String undefined Boolean undefined Number undefined undefined Date undefined RegExp undefined Error Error EvalError EvalError RangeError RangeError ReferenceError ReferenceError SyntaxError SyntaxError TypeError TypeError URIError URIError undefined ===*/ /* Names of standard built-ins. */ print(this.name); print(Object.name); print(Object.prototype.name); // Function is a special case: Function is a constructor (a function), // but Function.prototype is also a function and should thus have a name. // Rhino has "", V8 has "Empty"; we use "" too for now. print(Function.name); print(Function.prototype.name); print(Array.name); print(Array.prototype.name); print(String.name); print(String.prototype.name); print(Boolean.name); print(Boolean.prototype.name); print(Number.name); print(Number.prototype.name); print(Math.name); print(Date.name); print(Date.prototype.name); print(RegExp.name); print(RegExp.prototype.name); // Error objects are not function objects, but they have a 'name' // property for the error type print(Error.name); print(Error.prototype.name); print(EvalError.name); print(EvalError.prototype.name); print(RangeError.name); print(RangeError.prototype.name); print(ReferenceError.name); print(ReferenceError.prototype.name); print(SyntaxError.name); print(SyntaxError.prototype.name); print(TypeError.name); print(TypeError.prototype.name); print(URIError.name); print(URIError.prototype.name); print(JSON.name); /*=== ThrowTypeError ===*/ /* Name of the "type error thrower" of E5 Section 13.2.3. This is not * defined in the specification; V8 uses "ThrowTypeError" which we also * use. */ function func() { 'use strict'; } try { var desc = Object.getOwnPropertyDescriptor(func, 'caller'); print(desc.get.name); } catch (e) { print(e.name, e); } /*=== undefined ===*/ /* XXX: other non-standard builtins */ try { print(Duktape.name); } catch (e) { print(e.name); }