No, there's no difference, when an object must be converted to a string, the toString function is called.
More precisely, the toPrimitive conversion with hint "string" is applied, and it's defined here in the ECMAScript specification for an object.
Note that when you pass null or undefined (see the spec), only the addition scheme would work. That, along the reduced verbosity, explain why toString is rarely explicitly called in JavaScript. Implicit conversions are an important part of the language's practice, so it's perfectly normal to use this method, just as you often prefix a string with + to convert it to a number (i.e. +'33') .
[] + []results in"",{} + []results in0and{} + {}results inNaN. I think I'll stick with Python :)({} + [])("[object Object]") -- you would never write actual code to have that in statement context where it results in0.