0

I'm new to JavaScript, but I come from Python and Java. I know in both of those languages, there are ways to change what the console prints when the input is an object

//Java example:
public class myClass{
public toString(){
return ("This is an object!");
}
}
myClass obj = new myClass();
System.out.println(obj); //Prints "This is an object!"

However, when I looked for an example for JS, I found that the existing toString() required me to do this every time:

Console.log(obj + '')

in order to achieve the required output, otherwise it will simply print the default object text. Is there a way I can do the same thing as in Java?

Henry
  • 55
  • 1
  • 1
  • 5
  • 1
    I have no idea what examples you looked at, but console.log (note: all lowercase) will log anything you give it, without any conversion required. Just use `console.log(obj)` and done, and if you want to "explore" it, explicitly prevent conversion by using `console.log({ obj })` which will now log an object with a key `obj` that has an expandable object tree. – Mike 'Pomax' Kamermans Jan 02 '22 at 01:51
  • @Henry Can you link to that example you saw? – Brad Jan 02 '22 at 02:22

1 Answers1

2

I suppose you could create your own function that explicitly calls toString on its argument and logs it:

const obj = { toString() { return 'foo' } };
const myLog = obj => console.log(obj.toString());

myLog(obj);

It's not all that much, but I think it's probably the best you can do. You could also overwrite console.log with that function, but that'd be a bad idea.

I wouldn't recommend changing the default behavior. Having the object itself be logged, without side-effects (and without a non-object being logged) is what every developer who is debugging would expect.

CertainPerformance
  • 356,069
  • 52
  • 309
  • 320