При попытке конкатенации объекта со строкой объект сперва приводится к строке путем вызова метода toString. Его можно прописать абсолютно для любого объекта, и он будет использоваться для приведения, да:
var user = {
name: "Вася",
age: 21,
toString: function() {
return this.name;
}
}
alert(user); //alert переводит переданный аргумент в строку, и только потом выводит