Non-standard
This feature is non-standard and is not on a standards track. Do not use it on production sites facing the Web: it will not work for every user. There may also be large incompatibilities between implementations and the behavior may change in the future.

The toSource() method returns a string representing the source code of the object.

Syntax

Object.toSource();
obj.toSource();

Return value

A string representing the source code of the object.

Description

The toSource() method returns the following values:

  • For the built-in Object object, toSource() returns the following string indicating that the source code is not available:
    function Object() {
        [native code]
    }
    
  • For instances of Object, toSource() returns a string representing the source code.

You can call toSource() while debugging to examine the contents of an object.

Overriding the toSource() method

It is safe for objects to override the toSource() method. For example:

function Person(name) {
  this.name = name;
}

Person.prototype.toSource = function Person_toSource() {
  return 'new Person(' + uneval(this.name) + ')';
};

console.log(new Person('Joe').toSource()); // ---> new Person("Joe")

Built-in toSource() methods

Each core JavaScript type has its own toSource() method. These objects are:

Limitations on cyclical objects

In the case of objects that contain references to themselves, e.g. a cyclically linked list or a tree that can be traversed both ways, toSource() will not recreate the self-reference, as of Firefox 24. For example:

var obj1 = {};
var obj2 = { a: obj1 };
obj1.b = obj2;

console.log('Cyclical: ' + (obj1.b.a == obj1));

var objSource = obj1.toSource(); // returns "({b:{a:{}}})"

obj1 = eval(objSource);

console.log('Cyclical: ' + (obj1.b.a == obj1));

If a cyclical structure is employed and toSource() is needed, the object must provide an override to toSource(), either using a reference to a constructor or providing an anonymous function.

Examples

Using toSource()

The following code defines the Dog object type and creates theDog, an object of type Dog:

function Dog(name, breed, color, sex) {
  this.name = name;
  this.breed = breed;
  this.color = color;
  this.sex = sex;
}

theDog = new Dog('Gabby', 'Lab', 'chocolate', 'female');

Calling the toSource() method of theDog displays the JavaScript source that defines the object:

theDog.toSource();
// returns ({name:"Gabby", breed:"Lab", color:"chocolate", sex:"female"})

Specifications

Not part of any standard. Implemented in JavaScript 1.3.

Browser compatibility

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidEdge MobileFirefox for AndroidOpera for AndroidSafari on iOSSamsung InternetNode.js
Basic support
DeprecatedNon-standard
Chrome No support NoEdge No support NoFirefox Full support 1IE No support NoOpera No support NoSafari No support NoWebView Android No support NoChrome Android No support NoEdge Mobile No support NoFirefox Android Full support 4Opera Android No support NoSafari iOS No support NoSamsung Internet Android No support Nonodejs No support No

Legend

Full support  
Full support
No support  
No support
Non-standard. Expect poor cross-browser support.
Non-standard. Expect poor cross-browser support.
Deprecated. Not for use in new websites.
Deprecated. Not for use in new websites.

See also

Document Tags and Contributors

Last updated by: Jedipedia,