valueof objeto ejemplo convertir convert array javascript object tostring

objeto - tostring javascript ejemplo



Diferencia entre Object.prototype.toString.call(arrayObj) y arrayObj.toString() (3)

Esta pregunta ya tiene una respuesta aquí:

He revisado algunos materiales y no he comprendido completamente el concepto cuando se trata de sintaxis, como la siguiente:

var arrObj = [1,2,3]; Object.prototype.toString.call(arrObj); //Gives "[object Array]" arrObj.toString(); // Gives "1,2,3"

¿Cómo son las líneas 2 y 3 diferentes? Por lo que he entendido, ambos llaman al método toString con el objeto actual que se establece en ''arrObj''.


Dado que toString se define en Object.prototype , quienquiera que herede Object , obtendrá de manera predeterminada el método toString .

Pero, Array objetos, anula el método predeterminado toString para imprimir los elementos de la matriz como una cadena separada por comas.

Object.prototype.toString no sabe qué tipo de Objeto realmente trata. Por lo tanto, se mantiene intencionalmente genérico y siempre imprime el tipo real del Objeto. Es por eso que

console.log(Object.prototype.toString.call(arrObj));

huellas dactilares

[object Array]

que es el tipo de objeto pasado. Pero, cuando haces arrObj.toString , estás tratando de representar la matriz en su forma de Cadena, por lo que se sobrescribe toString en objetos Array para imprimir los elementos de la matriz como una cadena separada por comas.

Es por eso que ambas llamadas son diferentes.

Pero en el caso de otros objetos, toString no se anula, por lo que usarán toString de Object.prototype.toString . Por ejemplo,

var obj = { 1: 2 }; console.log(obj.toString()); // [object Object]

Lea el ejemplo del MDN de Reemplazar el método predeterminado de toString


Estos métodos .call() son formas extravagantes para tratar un tipo como otro. Por ejemplo, NodeLists, como Arrays con Array.prototype.forEach . Cuando lo llamas como un Objeto lo "convertirá" en una cadena de Objeto

Array.prototype.toString.call(arrObj);

Funciona perfectamente. Object.toString() está tratando de forma extraña. Imagina al compilador haciendo algo como:

[1, 2, 3] -> { 0: 1, 1: 2, 2: 3 }

Eso devolverá [Object object] . JavaScript, a diferencia de otros idiomas, siempre encontrará una salida cuando se trata de problemas de tipo.

Si está escribiendo una función, podría hacer algo como:

function myFunction (input) { window[input.constructor.name].prototype.toString.call(input); }


toString se reemplaza por Arrays ; y Object.prototype.toString es diferente de Array.prototype.toString .

Para obtener el mismo resultado con la call , úselo en el método "correcto":

Array.prototype.toString.call(arrObj); // Gives "1,2,3"