I would recommend using JSON.stringify, which converts the set of the variables in the object to a JSON string.
var obj = {
name: 'myObj'
};
JSON.stringify(obj);
Most modern browsers support this method natively, but for those that don't, you can include a JS version.
Answer from Gary Chambers on Stack OverflowVideos
I would recommend using JSON.stringify, which converts the set of the variables in the object to a JSON string.
var obj = {
name: 'myObj'
};
JSON.stringify(obj);
Most modern browsers support this method natively, but for those that don't, you can include a JS version.
Use javascript String() function
String(yourobject); //returns [object Object]
or stringify()
JSON.stringify(yourobject)
They do behave differently when the value is null.
null.toString()throws an error - Cannot call method 'toString' of nullString(null)returns - "null"null + ""also returns - "null"
Very similar behaviour happens if value is undefined (see jbabey's answer).
Other than that, there is a negligible performance difference, which, unless you're using them in huge loops, isn't worth worrying about.
There are differences, but they are probably not relevant to your question. For example, the toString prototype does not exist on undefined variables, but you can cast undefined to a string using the other two methods:
var foo;
var myString1 = String(foo); // "undefined" as a string
var myString2 = foo + ''; // "undefined" as a string
var myString3 = foo.toString(); // throws an exception
http://jsfiddle.net/f8YwA/
Puedes iterar sobre la respuesta de tu getElementByClassName haciendo:
var list= document.getElementsByClassName("minodo"),
array_de_strings = [];
for (var i = 0; i < list.length; i++) {
console.log(list[i].textContent);
array_de_strings.push(list[i].textContent);
}
console.log(array_de_strings.join(', '));
<ul>
<li class="minodo">primero</li>
<li class="minodo">segundo</li>
<li class="minodo">tercero</li>
<li class="minodo">cuarto</li>
</ul>
Ojo, La salida de un getElementByClassName es un nodeList, el cual es iterable y sin embargo no es un array por lo cual no puedes simplemente hacer un map o reduce para concatenarlo. Por eso apliqué la técnica burda de ir añadiéndole los elementos a un array vacío. Esto último es sólo una manera más de operar con la salida de un nodeList.
Update 2020
Fe de Erratas
Primero: getElementsByClassName no devuelve un NodeList sino un HTMLCollection. Perdonen por no haber verificado esa noción durante tres años.
Usar selectores CSS3
Con la compatibilidad universal y casi-casi homogénea de los selectores CSS3, es más cómodo usar document.querySelectorAll (este sí devuelve un NodeList, lo prometo). en vez de document.getElementsByClassName. En vez de un método específico para clases, puedes usarlo en reemplazo de getElementsByTagname y getElementsByName, con la desventaja de que es menos eficiente si el DOM es muy complejo.
Por otro lado resulta inmediato a la vista el tipo de propiedad que buscas, dado que la búsqueda por id usa un char '#id_elemento' y por clase se usa un punto '.nombre_clase'.
Replicando el ejemplo original, pero reemplazando el bucle for con algo más conciso:
var list= document.querySelectorAll(".minodo"),
array_de_strings= Array.from(list)
.map(element=>element.textContent);
Como list no es un Array lo sano es convertirlo en tal usando Array.from(...). (Pero el ejemplo subsiguiente es mejor)
var list= document.querySelectorAll(".minodo"),
array_de_strings= Array.from(list)
.map(element=>element.textContent);
console.log(array_de_strings.join(', '));
<ul>
<li class="minodo">primero</li>
<li class="minodo">segundo</li>
<li class="minodo">tercero</li>
<li class="minodo">cuarto</li>
</ul>
Usar CSS3 + destructuring
La destructuración y el spread operator de la especificación ES2015 es todavía más bonita
var list= document.querySelectorAll(".minodo"),
array_de_strings= [...list]
.map(element=>element.textContent);
console.log(array_de_strings.join(', '));
<ul>
<li class="minodo">primero</li>
<li class="minodo">segundo</li>
<li class="minodo">tercero</li>
<li class="minodo">cuarto</li>
</ul>
Es lo mismo que ocurre si haces lo siguiente:
var prueba = {a: 1, b: 2};
console.log(String(prueba));
// [object Object]
Si quisieras una representación de ese objeto en forma de String deberías utilizar JSON.stringify:
var prueba = {a: 1, b: 2};
console.log(JSON.stringify(prueba));
// {"a":1,"b":2}
Lo mismo ocurre con otros tipos de objeto. Al utilizar el método getElementsByClassName te devuelve un objeto HTMLCollection (contiene todos los elementos en tu documento que tienen esa clase), por lo tanto si intentas convertirlo a String obtendrás [object HTMLCollection]. Para devolver una representación String de un elemento HTML deberías usar los métodos innerHTML (para una representación String del contenido del elemento) o outerHTML para una representación String del elemento en sí mismo. Sólo debes tener en cuenta que estos métodos deben usarse en un objeto de tipo Element, por lo que si quieres hacerlo en un objeto de tipo HTMLCollection debes iterar en el mismo:
var elementos = document.getElementsByClassName("prueba");
Array.prototype.forEach.call(elementos, function (el) {
console.log(el.outerHTML);
});
<div class="prueba">uno</div>
<div class="prueba">dos</div>
<div class="prueba">tres</div>
Aunque si tu código debe ser soportado como mínimo por Internet Explorer 8, para seleccionar un solo elemento por clase, en vez de usar getElementsByClassName podrías usar querySelector, que devuelve directamente un objeto de tipo Element en vez de un objeto tipo HTMLCollection ya que selecciona el primer elemento que coincida con el selector:
var elemento = document.querySelector(".prueba");
console.log( elemento.outerHTML );
<div class="no-prueba">uno</div>
<div class="prueba">dos</div>
<div class="no-prueba">tres</div>