140 votes

Que signifie [objet objet] ?

J'essaie d'alerter une valeur retournée par une fonction et j'obtiens ceci dans l'alerte :

[object Object]  

Voici le code 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 est la fonction que j'essaie de vérifier.

171voto

Pumbaa80 Points 27066

Comme d'autres l'ont noté, il s'agit de la sérialisation par défaut d'un objet. Mais pourquoi est-ce [object Object] et pas seulement [object] ?

C'est parce qu'il existe différents types d'objets en Javascript !

  • Objets fonctionnels :
    stringify(function (){}) -> [object Function]
  • Objets de type tableau :
    stringify([]) -> [object Array]
  • Objets RegExp
    stringify(/x/) -> [object RegExp]
  • Objets de date
    stringify(new Date) -> [object Date]
  • plusieurs autres
  • et Objets !
    stringify({}) -> [object Object]

C'est parce que la fonction constructeur est appelée Object (avec un "O" majuscule), et le terme "objet" (avec un petit "o") fait référence à la nature structurelle de la chose.

D'habitude, quand on parle d'"objets" en Javascript, en fait moyenne " Objets ", et non les autres types.

donde <code>stringify</code> devrait ressembler à ceci :

function stringify (x) {
    console.log(Object.prototype.toString.call(x));
}

60voto

Felix Kling Points 247451

La conversion par défaut d'un objet en chaîne de caractères est "[object Object]" .

Comme vous traitez des objets jQuery, vous pourriez vouloir faire

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

pour imprimer l'ID de l'élément.

Comme mentionné dans les commentaires, vous devriez utiliser les outils inclus dans les navigateurs comme Firefox ou Chrome pour introspecter les objets en faisant console.log(whichIsVisible()) au lieu de alert .

Sidenote : Les identifiants ne doivent pas commencer par des chiffres.

26voto

alexn Points 25639

[object Object] est la représentation toString par défaut d'un objet en javascript.

Si vous voulez connaître les propriétés de votre objet, il suffit d'effectuer un foreach sur celui-ci comme ceci :

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

Dans votre cas particulier, vous obtenez un objet jQuery. Essayez de faire ceci à la place :

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

Ceci devrait alerter l'id de l'élément visible.

17voto

Ryosuke Hujisawa Points 512

Vous pouvez voir la valeur dans [object Object] comme ceci

Alert.alert(  JSON.stringify(userDate)  );

Essayez comme ceci

    realm.write(() => {
       const userFormData = realm.create('User',{
       user_email: value.username,
       user_password: value.password,
      });
     });

      const userDate = realm.objects('User').filtered('user_email == $0', value.username.toString(), );
      Alert.alert(  JSON.stringify(userDate)  );

référence

https://off.tokyo/blog/react-native-object-object/

11voto

Matt Ball Points 165937

Il s'agit de la valeur renvoyée par l'objet toString() fonction.


Je comprends ce que vous essayez de faire, parce que j'ai répondu votre question d'hier pour déterminer quelle div est visible :)
El whichIsVisible() renvoie un objet jQuery réel, parce que je pensais que ce serait plus efficace. de manière programmée utile. Si vous voulez utiliser cette fonction à des fins de débogage, vous pouvez simplement faire quelque chose comme ceci :

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

Cela dit, vous vous devriez vraiment utiliser un bon débogueur plutôt que alert() si vous essayez de déboguer un problème. Si vous utilisez Firefox, Firebug est excellent. Si vous utilisez IE8, Safari ou Chrome, ils ont des débogueurs intégrés.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X