2011-01-20 594 views
49

estoy tratando de alertar a un valor devuelto por una función y me sale esto en la alerta¿Qué significa [object Object]?

[object Object]

Este es el código Javascript

<script type="text/javascript"> 
$(function() 
{ 
var $main = $('#main'), 
    $1 = $('#1'), 
    $2 = $('#2'); 

$2.hide(); // hide div#2 when the page is loaded 

$main.click(function() 
{ 
    $1.toggle(); 
    $2.toggle(); 
}); 

$('#senddvd').click(function() 
{ 
    alert('hello'); 
    var a=whichIsVisible(); 
    alert(whichIsVisible()); 
}); 


function whichIsVisible() 
{ 
    if (!$1.is(':hidden')) return $1; 
    if (!$2.is(':hidden')) return $2; 
} 

}); 

</script> 

whichIsVisible es la función que me estoy tratando de comprobar

+2

Significa el tipo de datos de lo que usted está volviendo un objeto. –

+0

Fuera de interés: ¿qué esperas que vuelva? – Dancrumb

+1

Debe usar una consola de JavaScript para introspectar los objetos que le interesan (por ejemplo, Firebug). –

Respuesta

23

La conversión predeterminada de un objeto a cadena es "[object Object]".

Como se trata de objetos jQuery, es posible que desee hacer

alert(whichIsVisible()[0].id); 

para imprimir Identificación del elemento.

Como se mencionó en los comentarios, debe usar herramientas adicionales como Firebug para Firefox para introspectar objetos al hacer console.log(whichIsVisible()) en lugar de alert (no es necesario tener herramientas adicionales en Chrome o Safari).

Sidenote: Las identificaciones no deben comenzar con dígitos.

+0

[ \t En HTML5, las ID pueden comenzar con dígitos.] (Http: // www .whatwg.org/specs/web-apps/current-work/multipage/elements.html # the-id-attribute) –

+0

@Matt Ball: Gracias, no estaba seguro de eso. –

+0

En términos más generales, me preocuparía que los objetos no puedan TENER un atributo de identificación; por ejemplo, si tiene una lista de objetos simplemente usando un selector css como $ ('. someStyleClass'). Para tener claridad sobre la identidad de cualquier objeto con el que estés tratando, puede ser útil o al menos interesante asignar metadatos a tus objetos usando la función jquery .data(), http://api.jquery.com/data/ – jsh

11

es el valor devuelto por la función de ese objeto toString().


entiendo lo que estás tratando de hacer, porque yo respondí your question yesterday sobre la determinación de qué div es visible. :)
La función whichIsVisible() devuelve un objeto real jQuery, porque pensé que habría más programación útil. Si desea utilizar esta función para fines de depuración, sólo puede hacer algo como esto:

function whichIsVisible_v2() 
{ 
    if (!$1.is(':hidden')) return '#1'; 
    if (!$2.is(':hidden')) return '#2'; 
} 

Dicho esto, realmente debe utilizar un depurador adecuado en lugar de alert() si usted está tratando de depurar un problema. Si está usando Firefox, Firebug es excelente. Si está utilizando IE8, Safari o Chrome, tienen depuradores integrados.

13

[object Object] es la representación toString predeterminado de un objeto en javascript.

Si desea conocer las propiedades de su objeto, simplemente forEach sobre él así:

for(var property in obj) { 
    alert(property + "=" + obj[property]); 
} 

En su caso particular, que está recibiendo un objeto jQuery. Intente hacer esto en su lugar:

$('#senddvd').click(function() 
{ 
    alert('hello'); 
    var a=whichIsVisible(); 
    alert(whichIsVisible().attr("id")); 
}); 

Esto debería alertar a la identificación del elemento visible.

4

[object Object] es la representación de cadena de un defecto JavaScript Object.Es lo que se obtiene si se ejecuta este código:

alert({}); // [object Object] 

Puede cambiar la representación por defecto reemplazando el método toString así:

var o = {toString: function(){ return "foo" }}; 
alert(o); // foo 
+3

Lo cual es casi seguro que no es lo que quiere hacer. –

+0

Es cierto, simplemente ilustra de dónde viene la cadena '[object Object]'. –

2

tiene un objeto Javascript

$1 y $2 son objetos jquery, tal vez use alert($1.text()); para obtener texto o alert($1.attr('id'); etc ...

tiene que tratar $1 y $2 como objetos jQuery.

52

Como han notado otros, esta es la serialización predeterminada de un objeto. ¿Pero por qué es [object Object] y no solo [object]?

¡Eso es porque hay diferentes tipos de objetos en Javascript! objetos

  • Función:
    stringify(function(){}) - Objetos>[object Function]
  • Matriz:
    stringify([]) - Objetos>[object Array]
  • RegExp
    stringify(/x/) ->[object RegExp]
  • objetos Date
    stringify(new Date) ->[object Date]
  • several more ... ...
  • y objeto objetos!
    stringify({}) ->[object Object]

Esto se debe a la función constructora se llama Object (con mayúscula "O"), y el término "objeto" (con pequeña "o") se refiere a la naturaleza estructural de la manivela .

Normalmente, cuando habla de "objetos" en Javascript, en realidad significa "Objetos" y no los otros tipos.

... stringify donde debería tener este aspecto:
function stringify (x) { console.log(Object.prototype.toString.call(x)); }

+0

Si toString() no se reemplaza en un objeto personalizado: por [documentación] (https://es5.github.io/x15.2.html#x15.2.4.2) 15.2.4.2 Object.prototype.toString() # Ⓣ Ⓔ 12 Cuando se llama al método toString, se realizan los siguientes pasos: Si este valor no está definido, devuelva "[object Undefined]". Si este valor es nulo, devuelva "[object Null]". Sea O el resultado de llamar a ToObject pasando este valor como argumento. Sea class sea el valor de la propiedad interna [[Class]] de O. Devuelva el valor String que es el resultado de concatenar las tres cadenas "[object", class y "]". –

+0

más uno para la terminología de 'thingy' – Jay

Cuestiones relacionadas