Is there an __repr__ equivalent for javascript? Is there an __repr__ equivalent for javascript? python python

Is there an __repr__ equivalent for javascript?


JSON.stringify is probably the closest you are going to get from native libraries. It doesn't work well with objects, but you could define your own code to work around that. I searched for libraries that provide this functionality but didn't find anything.


Node.js util.inspect

http://nodejs.org/api/util.html#util_util_inspect_object_options

To get the object representation that appears on the terminal as a string you can do:

const util = require('util');console.log(util.inspect({ a: "0\n1", b: "c"}));// Equivalent: automatically called by `console.log`.console.log({ a: "0\n1", b: "c"});

output:

{ a: '0\n1', b: 'c' }{ a: '0\n1', b: 'c' }

This is the same that would appear on the terminal if you copy pasted the string { a: "0\n1", b: "c"} into the terminal and pressed enter.

Override the inspect method of a class for a custom representation

This was asked at: How to change string representation of objects in Nodejs debug console view and mentioned at: https://stackoverflow.com/a/32866283/895245 and https://stackoverflow.com/a/54667225/895245 but here goes a fuller example:

const util = require('util');class MyClass {  constructor(a, b) {    this.a = a;    this.b = b;  }  [util.inspect.custom]() {    return `a is ${this.a} and b is ${this.b}`;  }}const my_object = new MyClass(1, 2);console.log(util.inspect(my_object));console.log(my_object);

Output:

a is 1 and b is 2a is 1 and b is 2

The default inspect if we hadn't defined a custom [util.inspect.custom] would have been:

MyClass { a: 1, b: 2 }

That same representation also shows if you just directly inspect the object on a terminal:

> my_objecta is 1 and b is 2

In older Node.js, the syntax used to be just:

inspect(){}

but that was deprecated with message:

[DEP0079] DeprecationWarning: Custom inspection function on Objects via .inspect() is deprecated

as mentioned at:

Pretty print util.inspect with newlines and indentation

Not possible? Sigh:

One big advantage over JSON.stringify is that inspect takes care of circular dependencies for you. But without pretty print, it is a pain.

Tested in Node.js v10.15.1.


In Nodejs, console.log representation of a Javascript object can be overridn by adding inspect() method to that Object

eg:

function User(name, password){         this.name = name;         this.password = password;}User.prototype.toString = function(){    return this.name;};User.prototype.inspect = function(){ return 'Model: ' + this.name ; }

-Thanks to 'Ciro Santilli'