String(value) — explicit conversion to string per spec (ToString).value.toString() — a method on objects/primitives; missing for null/undefined.'' + value) and template literals (${value}) perform implicit string coercion.String(value) — safe for any value including null/undefined.value.toString() — may be absent or overridden.'' + value or ${value} — engine runs ToPrimitive then ToString.Mini examples:
String(123); // "123"
(123).toString(); // "123"
'' + 123; // "123"String(1.2) → "1.2", String(NaN) → "NaN", String(Infinity) → "Infinity".String(true) → "true", String(false) → "false".null/undefined: String(null) → "null", String(undefined) → "undefined"; they have no toString().Mini examples:
String(null); // "null"
String(undefined); // "undefined"
// null.toString() // TypeError[].toString() → "", [1,2].toString() → "1,2"."[object Object]" via Object.prototype.toString, unless overridden.Mini examples:
[1, 2].toString(); // "1,2"
({}).toString(); // "[object Object]"Override toString:
const user = { name: 'Ada', toString() { return `User:${this.name}`; } };
String(user); // "User:Ada"symbol.toString() → "Symbol(desc)".'' + symbol may throw; prefer String(symbol) or symbol.toString().Mini example:
const s = Symbol('x');
s.toString(); // "Symbol(x)"Both coerce values to string:
`${true}`; // "true"
'' + [1, 2]; // "1,2"toString on null/undefined — TypeError."[object Object]"; override toString or use JSON.stringify.Mini example:
JSON.stringify({ a: 1 }); // "{\"a\":1}"String(value).toString()."[object Object]": use toString or JSON.stringify.