Gentiment, je suis un débutant en JavaScript et je travaillais sur des techniques de gestion des erreurs try and catch, jusqu'à ce que je remarque que l'objet catch peut être imprimé, mais tout objet normal ne l'est pas, par exemple,

   try{
    throw new Error("Manually Thrown Exception");
    }
    catch(errHanlder){
    alert(errHanlder);  // it will give (ERROR:Manually Throw Exception)
    }

Et tout objet créé n'est pas par exemple:

var obj={name:"User"};
alert(obj);   //it will give [object Object] 

Alors pourquoi cette action étrange est possible bien que les types des deux soient des objets

0
user7429498 17 janv. 2017 à 12:18

2 réponses

Meilleure réponse

Cet objet contient une fonction toString.

Depuis le MDN:

Chaque objet a une méthode toString () qui est automatiquement appelée lorsque l'objet doit être représenté comme une valeur de texte ou lorsqu'un objet est référencé d'une manière dans laquelle une chaîne est attendue. Par défaut, la méthode toString () est héritée par chaque objet descendant d'Object. Si cette méthode n'est pas remplacée dans un objet personnalisé, toString () renvoie "[type d'objet]", où type est le type d'objet.

Pour les erreurs, c'est celui-ci .

Il est défini dans le standard ECMAScript:

enter image description here

Vous pouvez faire de même, sans même le définir au niveau du prototype:

 var obj = {name:"Albert", toString(){ return "User: " + this.name }};
 alert(obj);
3
Denys Séguret 18 janv. 2017 à 10:10

C'est parce que l'objet Error a le Fonction toString () implémentée. Le résultat [object Object] est imprimé lorsqu'un objet n'a pas d'implémentation toString() personnalisée.

Cela signifie que si vous souhaitez faciliter le débogage des objets, vous pouvez implémenter toString() partout pour simplifier le débogage (bien que de nombreuses sections des outils de développement des navigateurs le fassent automatiquement pour vous).

Concernant votre commentaire si vous lisez le alert () vous pouvez voir que (c'est moi qui souligne):

message est une chaîne de texte facultative que vous souhaitez afficher dans la boîte de dialogue d'alerte ou, en variante, un objet converti en chaîne et affiché.

2
Ian 17 janv. 2017 à 09:21