74 lines
1.8 KiB
Plaintext
74 lines
1.8 KiB
Plaintext
When calling `toString()` or coercing into a string an object that doesn't implement its own `toString` method, it returns `[object Object]` which is often not what was intended.
|
|
|
|
== Why is this an issue?
|
|
|
|
When using an object in a string context, a developer wants to get the string representation of the state of an object, so obtaining `[object Object]` is probably not the intended behaviour and might even denote a bug.
|
|
|
|
== How to fix it
|
|
|
|
You can simply define a `toString()` method for the object or class.
|
|
|
|
=== Code examples
|
|
|
|
==== Noncompliant code example
|
|
|
|
[source,javascript,diff-id=1,diff-type=noncompliant]
|
|
----
|
|
class Foo {};
|
|
const foo = new Foo();
|
|
|
|
foo + ''; // Noncompliant - evaluates to "[object Object]"
|
|
`Foo: ${foo}`; // Noncompliant - evaluates to "Foo: [object Object]"
|
|
foo.toString(); // Noncompliant - evaluates to "[object Object]"
|
|
----
|
|
|
|
==== Compliant solution
|
|
|
|
[source,javascript,diff-id=1,diff-type=compliant]
|
|
----
|
|
class Foo {
|
|
toString() {
|
|
return 'Foo';
|
|
}
|
|
}
|
|
const foo = new Foo();
|
|
|
|
foo + '';
|
|
`Foo: ${foo}`;
|
|
foo.toString();
|
|
----
|
|
|
|
==== Noncompliant code example
|
|
|
|
[source,javascript,diff-id=2,diff-type=noncompliant]
|
|
----
|
|
const foo = {};
|
|
foo + ''; // Noncompliant - evaluates to "[object Object]"
|
|
`Foo: ${foo}`; // Noncompliant - evaluates to "Foo: [object Object]"
|
|
foo.toString(); // Noncompliant - evaluates to "[object Object]"
|
|
----
|
|
|
|
==== Compliant solution
|
|
|
|
[source,javascript,diff-id=2,diff-type=compliant]
|
|
----
|
|
const foo = {
|
|
toString: () => {
|
|
return 'Foo';
|
|
}
|
|
}
|
|
foo + '';
|
|
`Foo: ${foo}`;
|
|
foo.toString();
|
|
----
|
|
|
|
== Resources
|
|
|
|
=== Documentation
|
|
|
|
* MDN web docs - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/toString[``++Object.prototype.toString()++``]
|
|
|
|
//=== Articles & blog posts
|
|
//=== Conference presentations
|
|
//=== Standards
|