Skip to content

Quelle est la différence entre « lancer une nouvelle erreur » et « lancer un objet » ?

Solution:

La différence entre “lancer une nouvelle erreur” et “lancer un objet” en javascript est que lancer une nouvelle erreur enveloppe l’erreur qui lui est transmise dans le format suivant :

{ nom : ‘Erreur’, message : ‘Chaîne que vous passez dans le constructeur’ }

Le lancer unObjet lancera l’objet tel quel et ne permettra plus l’exécution de code à partir du bloc try, c’est-à-dire la même chose que lancer une nouvelle erreur.

Voici une bonne explication sur l’objet Error et le fait de lancer vos propres erreurs

L’objet d’erreur

Que pouvons-nous en extraire en cas d’erreur ? L’objet Error dans tous les navigateurs prend en charge les deux propriétés suivantes :

  • name : Le nom de l’erreur, ou plus précisément, le nom de la fonction constructeur à laquelle appartient l’erreur.

  • message : une description de l’erreur, cette description variant en fonction du navigateur.

Six valeurs possibles peuvent être renvoyées par la propriété name, qui, comme mentionné, correspondent aux noms des constructeurs de l’erreur. Elles sont:

Error Name          Description

EvalError           An error in the eval() function has occurred.

RangeError          Out of range number value has occurred.

ReferenceError      An illegal reference has occurred.

SyntaxError         A syntax error within code inside the eval() function has occurred.
                    All other syntax errors are not caught by try/catch/finally, and will
                    trigger the default browser error message associated with the error. 
                    To catch actual syntax errors, you may use the onerror event.

TypeError           An error in the expected variable type has occurred.

URIError            An error when encoding or decoding the URI has occurred 
                   (ie: when calling encodeURI()).

Jeter vos propres erreurs (exceptions)

Au lieu d’attendre que l’un des 6 types d’erreurs se produise avant que le contrôle ne soit automatiquement transféré du bloc try au bloc catch, vous pouvez également lancer explicitement vos propres exceptions pour forcer que cela se produise à la demande. C’est très bien pour créer vos propres définitions de ce qu’est une erreur et quand le contrôle doit être transféré à catch.

lancer “Je suis le mal”

throw volonté mettre fin la suite de l’exécution et l’exposition de la chaîne de message sur attraper l’erreur.

try {
  throw "I'm Evil"
  console.log("You'll never reach to me", 123465)
} catch (e) {
  console.log(e); // I'm Evil
}

Console après lancer ne sera jamais atteint cause de résiliation.


lancer une nouvelle erreur (“Je suis le mal”)

throw new Error expose un événement d’erreur avec deux paramètres Nom & un message. Il met également fin à l’exécution ultérieure

try {
  throw new Error("I'm Evil")
  console.log("You'll never reach to me", 123465)
} catch (e) {
  console.log(e.name, e.message); // Error I'm Evil
}

jeter l’erreur (“Je suis le mal”)

Et juste pour être complet, cela fonctionne aussi, bien que techniquement ce ne soit pas la bonne façon de le faire –

try {
  throw Error("I'm Evil")
  console.log("You'll never reach to me", 123465)
} catch (e) {
  console.log(e.name, e.message); // Error I'm Evil
}

console.log(typeof(new Error("hello"))) // object
console.log(typeof(Error)) // function

L’article suivant va peut-être dans un peu plus de détails quant à ce qui est un meilleur choix ; throw 'An error' ou throw new Error('An error'):

http://www.nczonline.net/blog/2009/03/10/the-art-of-throwing-javascript-errors-part-2/

Il suggère que ce dernier (new Error()) est plus fiable, car les navigateurs comme Internet Explorer et Safari (incertain des versions) ne signalent pas correctement le message lors de l’utilisation du premier.

Cela entraînera l’apparition d’une erreur, mais tous les navigateurs ne répondent pas comme vous le souhaiteriez. Firefox, Opera et Chrome affichent chacun un message « exception non détectée », puis incluent la chaîne de message. Safari et Internet Explorer renvoient simplement une erreur « exception non détectée » et ne fournissent pas du tout la chaîne de message. De toute évidence, cela est sous-optimal du point de vue du débogage.



Articles Similaires

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.