diff options
Diffstat (limited to 'files/fr/web/javascript/reference/objets_globaux/error/index.html')
-rw-r--r-- | files/fr/web/javascript/reference/objets_globaux/error/index.html | 249 |
1 files changed, 249 insertions, 0 deletions
diff --git a/files/fr/web/javascript/reference/objets_globaux/error/index.html b/files/fr/web/javascript/reference/objets_globaux/error/index.html new file mode 100644 index 0000000000..e267e237f4 --- /dev/null +++ b/files/fr/web/javascript/reference/objets_globaux/error/index.html @@ -0,0 +1,249 @@ +--- +title: Error +slug: Web/JavaScript/Reference/Objets_globaux/Error +tags: + - Error + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Error +--- +<div>{{JSRef}}</div> + +<p>Le constructeur <strong><code>Error</code></strong> crée un objet d'erreur. Des instances d'objets <code>Error</code> sont déclenchées lorsque des erreurs d'exécution surviennent. L'objet <code>Error</code> peut aussi être utilisé comme objet de base pour des exceptions définies par l'utilisateur. Voir ci-dessous pour les types d'erreur natifs standard.</p> + +<h2 id="Syntaxe">Syntaxe</h2> + +<pre class="syntaxbox notranslate">new Error([<var>message</var>[, <var>fileName</var>[, <var>lineNumber</var>]]])</pre> + +<h3 id="Paramètres">Paramètres</h3> + +<dl> + <dt><code>message</code> {{optional_inline}}</dt> + <dd>Description de l'erreur sous une forme lisible par un humain.</dd> + <dt><code>fileName</code> {{optional_inline}}{{Non-standard_inline}}</dt> + <dd>Argument qui sera utilisé pour la valeur de la propriété <code>fileName</code> dans l'objet <code>Error</code> créé. Par défaut, ce sera le nom du fichier contenant le code qui a appelé le constructeur <code>Error()</code>.</dd> + <dt><code>lineNumber</code> {{optional_inline}}{{Non-standard_inline}}</dt> + <dd>Argument qui sera utilisé pour la valeur de la propriété <code>lineNumber</code> dans l'objet <code>Error</code> créé. Par défaut, ce sera le numéro de la ligne contenant l'invocation du constructeur <code>Error()</code>.</dd> +</dl> + +<h2 id="Description">Description</h2> + +<p>Les erreurs d'exécution ont pour résultat la création et le déclenchement d'objets <code>Error</code>.</p> + +<p>Cette page documente l'utilisation de l'objet <code>Error</code> lui-même et son utilisation comme fonction constructeur. Pour une liste des propriétés et des méthodes héritées par les instances d'<code>Error</code>, voir {{jsxref("Error.prototype")}}.</p> + +<h3 id="Utilisation_de_Error_comme_fonction">Utilisation de <code>Error</code> comme fonction</h3> + +<p>Lorsqu'<code>Error</code> est utilisée comme fonction sans utiliser l'opérateur {{jsxref("Opérateurs/L_opérateur_new", "new")}}, cet appel renverra un objet <code>Error</code>. Aussi, un simple appel à <code>Error</code> produira le même résultat qu'une invocation avec <code>new</code>.</p> + +<pre class="brush: js notranslate">// Cette instruction : +const x = Error("J'ai été créée sans new"); + +// Aura le même effet que +const y = new Error("J'ai été créée avec new");</pre> + +<h3 id="Types_derreur">Types d'erreur</h3> + +<p>En plus du constructeur <code>Error</code> générique, il existe sept autres constructeurs d'erreur de base en JavaScript. Pour les exceptions côté client, voir <a href="/fr/docs/Web/JavaScript/Guide/Contr%C3%B4le_du_flux_Gestion_des_erreurs">Contrôle du flux d'instructions et gestion des erreurs</a>.</p> + +<dl> + <dt>{{jsxref("EvalError")}}</dt> + <dd>Crée une instance représentant une erreur se produisant en relation avec la fonction globale {{jsxref("eval","eval()")}}.</dd> + <dt>{{jsxref("RangeError")}}</dt> + <dd>Crée une instance représentant une erreur se produisant quand une variable numérique ou un paramètre est en dehors de sa plage de validité.</dd> + <dt>{{jsxref("ReferenceError")}}</dt> + <dd>Crée une instance représentant une erreur se produisant lors du déréférencement d'une référence invalide.</dd> + <dt>{{jsxref("SyntaxError")}}</dt> + <dd>Crée une instance représentant une erreur de syntaxe se produisant lors d'une analyse de code dans {{jsxref("eval", "eval()")}}.</dd> + <dt>{{jsxref("TypeError")}}</dt> + <dd>Crée une instance représentant une erreur se produisant quand une variable ou un paramètre n'est pas d'un type valide.</dd> + <dt>{{jsxref("URIError")}}</dt> + <dd>Crée une instance représentant une erreur se produisant quand des paramètres invalides sont passés à {{jsxref("encodeURI", "encodeURI()")}} ou à {{jsxref("decodeURI", "decodeURI()")}}.</dd> + <dt>{{JSxRef("AggregateError")}}</dt> + <dd>Crée une instance représentant différentes erreurs agrégées en une seule lorsque plusieurs erreurs sont rapportées par une opération, par exemple avec {{JSxRef("Promise.any()")}}.</dd> + <dt>{{jsxref("InternalError")}} {{non-standard_inline}}</dt> + <dd>Crée une instance représentant une erreur se produisant quand une erreur interne dans le moteur JavaScript est déclenchée. Par ex., "too much recursion".</dd> +</dl> + +<h2 id="Propriétés">Propriétés</h2> + +<dl> + <dt>{{jsxref("Error.prototype")}}</dt> + <dd>Permet l'ajout de propriétés aux instances <code>Error</code>.</dd> +</dl> + +<h2 id="Méthodes">Méthodes</h2> + +<p>L'objet global <code>Error</code> ne contient pas de méthodes en propre, toutefois, il hérite de certaines méthodes via la chaine de prototype.</p> + +<h2 id="Instances_dError">Instances d'<code>Error</code></h2> + +<div>{{page('fr/docs/JavaScript/Reference/Objets_globaux/Error/prototype', 'Description')}}</div> + +<h3 id="Propriétés_2">Propriétés</h3> + +<p>{{page('fr/docs/JavaScript/Reference/Objets_globaux/Error/prototype', 'Propriétés')}}</p> + +<h3 id="Méthodes_2">Méthodes</h3> + +<p>{{page('fr/docs/JavaScript/Reference/Objets_globaux/Error/prototype', 'Méthodes')}}</p> + +<h2 id="Exemples">Exemples</h2> + +<h3 id="Déclenchement_dune_erreur_générique">Déclenchement d'une erreur générique</h3> + +<p>Vous créez habituellement un objet <code>Error</code> dans l'intention de le déclencher en utilisant le mot-clé {{jsxref("Instructions/throw", "throw")}}. Vous pouvez gérer l'erreur en utilisant la construction {{jsxref("Instructions/try...catch", "try...catch")}} :</p> + +<pre class="brush: js notranslate">try { + throw new Error("Ouups !"); +} catch (e) { + console.log(e.name + ": " + e.message); +} +</pre> + +<h3 id="Gestion_dune_erreur_spécifique">Gestion d'une erreur spécifique</h3> + +<p>Vous pouvez choisir de ne gérer que des types d'erreur particuliers en testant le type de l'erreur via la propriété {{jsxref("Object.prototype.constructor", "constructor")}} de l'erreur ou, si vous écrivez pour des interpréteurs JavaScript modernes, le mot-clé {{jsxref("Opérateurs/instanceof", "instanceof")}} :</p> + +<pre class="brush: js notranslate">try { + machin.truc(); +} catch (e) { + if (e instanceof EvalError) { + console.log(e.name + ": " + e.message); + } else if (e instanceof RangeError) { + console.log(e.name + ": " + e.message); + } + // ... etc +} +</pre> + +<h3 id="Types_derreur_personnalisés">Types d'erreur personnalisés</h3> + +<p>Vous pouvez vouloir définir vos propres types d'erreur dérivants d'<code>Error</code> pour pouvoir écrire <code>throw new MonErreur()</code> et utiliser <code>instanceof MonErreur</code> afin de vérifier le type d'erreur dans le gestionnaire d'exceptions. Cela a pour résultat un code de gestion d'erreur plus propre et plus cohérent. Voir <a href="http://stackoverflow.com/questions/1382107/whats-a-good-way-to-extend-error-in-javascript"><em>What's a good way to extend Error in JavaScript?</em></a> sur StackOverflow pour une discussion en profondeur.</p> + +<h4 id="Classes_derreur_personnalisées_avec_ECMAScript_2015_ES6">Classes d'erreur personnalisées avec ECMAScript 2015 / ES6</h4> + +<div class="warning"> +<p><strong>Attention !</strong> Babel, dans les versions antérieures à Babel 7, ainsi que d'autres transpileurs ne géreront pas correctement le code suivant sans <a href="https://github.com/loganfsmyth/babel-plugin-transform-builtin-extend">configuration supplémentaire</a>. Les versions de Babel antérieures à la version 7 peuvent uniquement gérer les classes d'erreur personnalisées lorsque celles-ci sont créées avec <code><a href="/fr/docs/Web/JavaScript/Reference/Objets_globaux/Object/defineProperty">Object.defineProperty()</a></code>.</p> +</div> + +<div class="note"> +<p><strong>Note :</strong> Certains navigateurs incluent le constructeur <code>CustomError</code> (Erreur Personnalisée) dans la pile d'appels lors de l'utilisation de classes ES6.</p> +</div> + +<pre class="brush: js notranslate">class CustomError extends Error { + constructor(machin = 'truc', ...params) { + // Passer les arguments restants (incluant ceux spécifiques au vendeur) au constructeur parent + super(...params); + + // Maintenir dans la pile une trace adéquate de l'endroit où l'erreur a été déclenchée (disponible seulement en V8) + if(Error.captureStackTrace) { + Error.captureStackTrace(this, CustomError); + } + this.name = 'CustomError'; + // Informations de déboguage personnalisées + this.machin = machin; + this.date = new Date(); + } +} + +try { + throw new CustomError('bidule', 'messageBidule'); +} catch(e){ + console.log(e.name); // CustomError + console.log(e.machin); // bidule + console.log(e.message); // messageBidule + console.log(e.stack); // stacktrace +}</pre> + +<h4 id="Objet_derreur_personnalisé_ES5">Objet d'erreur personnalisé ES5</h4> + +<div class="warning"> +<p><strong>Attention ! Tous</strong> les navigateurs incluent le constructeur <code>CustomError</code> dans la pile d'appel lorsqu'une déclaration prototypale est utilisée.</p> +</div> + +<pre class="brush: js notranslate">function CustomError(machin, message, nomFichier, numeroLigne) { + var instance = new Error(message, nomFichier, numeroLigne); + instance.name = 'CustomError'; + instance.machin = machin; + Object.setPrototypeOf(instance, Object.getPrototypeOf(this)); + if(Error.captureStackTrace) { + Error.captureStackTrace(instance, CustomError); + } + return instance; +} + +CustomError.prototype = Object.create(Error.prototype, { + constructor: { + value: Error, + enumerable: false, + writable: true, + configurable: true + } +}); + +if (Object.setPrototypeOf){ + Object.setPrototypeOf(CustomError, Error); +} else { + CustomError.__proto__ = Error; +} + + +try { + throw new CustomError('bidule', 'messageBidule'); +} catch(e){ + console.log(e.name); // CustomError + console.log(e.toto); // bidule + console.log(e.message); // messageBidule + console.log(e.lineNumber); // 29 +}</pre> + +<h2 id="Spécifications">Spécifications</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">Spécification</th> + <th scope="col">État</th> + <th scope="col">Commentaires</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('ESDraft', '#sec-error-objects', 'Error')}}</td> + <td>{{Spec2('ESDraft')}}</td> + <td></td> + </tr> + <tr> + <td>{{SpecName('ES2015', '#sec-error-objects', 'Error')}}</td> + <td>{{Spec2('ES2015')}}</td> + <td></td> + </tr> + <tr> + <td>{{SpecName('ES5.1', '#sec-15.11', 'Error')}}</td> + <td>{{Spec2('ES5.1')}}</td> + <td></td> + </tr> + <tr> + <td>{{SpecName('ES1')}}</td> + <td>{{Spec2('ES1')}}</td> + <td>Définition initiale. Implémentée avec JavaScript 1.1.</td> + </tr> + </tbody> +</table> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + +<div> +<div class="hidden">Le tableau de compatibilité de cette page a été généré à partir de données structurées. Si vous souhaitez contribuer aux données, merci de regarder <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> et envoyez-nous une <em>pull request</em>.</div> + +<p>{{Compat("javascript.builtins.Error")}}</p> +</div> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{jsxref("Error.prototype")}}</li> + <li>{{jsxref("Instructions/throw", "throw")}}</li> + <li>{{jsxref("Instructions/try...catch", "try...catch")}}</li> +</ul> |