1
votes

Pourquoi [{"value": "tag1"} se transforme-t-il en [objet objet] une fois connecté?

Sur mon serveur node.js, j'ai le code suivant:

tags: [object Object],[object Object]

Je m'attendais à ce que la console dise ceci:

tags: [{"value":"tag1"},{"value":"tag2"}]

Mais à la place obtenu ceci:

var tags = [{"value":"tag1"},{"value":"tag2"}];
console.log("tags: " + tags);

Pourquoi cela se produit-il? Cela pose des problèmes dans mon code car j'essaie d'accéder aux valeurs mais je ne peux pas.


2 commentaires

l'utilisation de l'opérateur + pour concaténer un objet avec une chaîne revient à appeler 'string' + obj.toString () , qui ({}). toString () est [objet objet] . Js tente de convertir le deuxième élément de l'opération en type du premier élément, une chaîne, d'où la raison pour laquelle vous ne voyez pas le contenu du tableau mais plutôt [object Object] .


Si vous voulez le consigner, faites ceci - console.log ({tags: tags}) plutôt que console.log ("tags:" + tags). dans ce cas, il essaie d'ajouter une chaîne à l'objet, vous donnant ainsi un résultat inattendu.


6 Réponses :


4
votes

Lorsque vous effectuez "tags:" + tags , les toString méthode des objets est appelée afin de faire l'opération.

Changer

console.log("tags: ", tags);


0 commentaires

1
votes

Vous pouvez également utiliser JSON pour consigner correctement les objets si vous souhaitez concaténer les chaînes.

var tags = [{
  "value": "tag1"
}, {
  "value": "tag2"
}];
console.log("tags: " + JSON.stringify(tags))


0 commentaires

1
votes

Pourquoi cela se produit-il?

Cela se produit parce que lorsque vous essayez de concaténer une variable avec une chaîne en utilisant l'opérateur + , javascript convertit la valeur de la variable en chaîne.


0 commentaires

4
votes

Vous avez deux options:

1: Utilisez la virgule , au lieu de concaténer les chaînes ensemble, pour éviter que toString () ne soit appelé et crée [Object Object] :

var tags = [{"value": "tag1"}, {"value": "tag2"}];
console.log("Tags: ", JSON.stringify(tags));

2: Utilisez JSON.stringify () sur l'objet pour le convertir en une chaîne lisible:

var tags = [{"value": "tag1"}, {"value": "tag2"}];
console.log("Tags: ", tags);


0 commentaires

1
votes

Lorsque vous créez une chaîne concaténée à l'aide de l'opérateur + , la méthode .toString () est appelée sur les parties non-chaîne pour les convertir en chaînes lisibles - et cette méthode renvoie [object Object] pour les objets simples.

Si vous voulez voir le contenu réel du tableau, utilisez:

  • console.log ("tags:", tags); (lorsqu'il est utilisé dans la console du navigateur, permet un journal "interactif": vous pourrez cliquer sur le tableau et le déplier son contenu);
  • ou console.log ("tags:" + JSON.stringify (tags)); si vous voulez juste voir le contenu du tableau imprimé (utilisez JSON.stringify (tags , null, 2) pour une jolie impression avec un retrait de 2 espaces).

0 commentaires

1
votes

'+' stringifie l'objet, donc résultats [object Object], Vous devez utiliser JSON.stringify () pour convertir votre objet en chaîne JSON avant d'utiliser la console avec '+', sinon utiliser la console avec ",".


0 commentaires