{"id":52927,"date":"2022-01-26T10:47:02","date_gmt":"2022-01-26T09:47:02","guid":{"rendered":"https:\/\/kinsta.com\/fr\/?p=52927&#038;preview=true&#038;preview_id=52927"},"modified":"2023-08-22T11:38:16","modified_gmt":"2023-08-22T10:38:16","slug":"erreurs-dans-javascript","status":"publish","type":"post","link":"https:\/\/kinsta.com\/fr\/blog\/erreurs-dans-javascript\/","title":{"rendered":"Un guide d\u00e9finitif de la gestion des erreurs dans JavaScript"},"content":{"rendered":"<p>La loi de Murphy stipule que tout ce qui peut aller mal finira par aller mal. Cette loi s&rsquo;applique un peu trop bien dans le monde de la programmation. Si vous cr\u00e9ez une application, il y a de fortes chances que vous cr\u00e9iez des bugs et autres probl\u00e8mes. Les erreurs dans JavaScript sont l&rsquo;un de ces probl\u00e8mes courants !<\/p>\n<p>Le succ\u00e8s d&rsquo;un produit logiciel d\u00e9pend de la capacit\u00e9 de ses cr\u00e9ateurs \u00e0 r\u00e9soudre ces probl\u00e8mes avant de nuire \u00e0 leurs utilisateurs. Et <a href=\"https:\/\/kinsta.com\/fr\/blog\/qu-est-javascript\/\">JavaScript<\/a>, de tous les <a href=\"https:\/\/kinsta.com\/fr\/blog\/meilleur-langage-programmation-apprendre\/\">langages de programmation<\/a>, est r\u00e9put\u00e9 pour sa conception moyenne du traitement des erreurs.<\/p>\n<p>Si vous <a href=\"https:\/\/kinsta.com\/fr\/blog\/bibliotheques-javascript\/\">construisez une application JavaScript<\/a>, il y a de fortes chances que vous vous trompiez sur les types de donn\u00e9es \u00e0 un moment ou \u00e0 un autre. Si ce n&rsquo;est pas le cas, vous pourriez finir par remplacer un <i>ind\u00e9fini <\/i>par un <i>null<\/i> ou un op\u00e9rateur triple \u00e9gal (<code>===<\/code>) par un op\u00e9rateur double \u00e9gal (<code>==<\/code>).<\/p>\n<p>Il est tout \u00e0 fait humain de faire des erreurs. C&rsquo;est pourquoi nous allons vous montrer tout ce que vous devez savoir sur la gestion des erreurs dans JavaScript.<\/p>\n<p>Cet article vous guidera \u00e0 travers les erreurs de base dans JavaScript et expliquera les diff\u00e9rentes erreurs que vous pouvez rencontrer. Vous apprendrez ensuite comment identifier et corriger ces erreurs. Vous trouverez \u00e9galement quelques conseils pour g\u00e9rer efficacement les erreurs dans les environnements de production.<\/p>\n<p>Sans plus attendre, commen\u00e7ons !<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h3>Consultez notre guide vid\u00e9o sur le <a href=\"https:\/\/www.youtube.com\/watch?v=CQzwi9_7wHI\">traitement des erreurs JavaScript<\/a><\/h3>\n<kinsta-video src=\"https:\/\/www.youtube.com\/watch?v=CQzwi9_7wHI\"><\/kinsta-video>\n<h2>Que sont les erreurs JavaScript ?<\/h2>\n<p>Les erreurs en programmation font r\u00e9f\u00e9rence \u00e0 des situations qui ne permettent pas \u00e0 un programme de fonctionner normalement. Cela peut se produire lorsqu&rsquo;un programme ne sait pas comment g\u00e9rer la t\u00e2che \u00e0 accomplir, par exemple lorsqu&rsquo;il essaie d&rsquo;ouvrir un fichier inexistant ou de communiquer avec un point de terminaison API bas\u00e9 sur le web alors qu&rsquo;il n&rsquo;y a pas de connectivit\u00e9 r\u00e9seau.<\/p>\n<p>Ces situations poussent le programme \u00e0 envoyer des erreurs \u00e0 l&rsquo;utilisateur, indiquant qu&rsquo;il ne sait pas comment proc\u00e9der. Le programme recueille autant d&rsquo;informations que possible sur l&rsquo;erreur et signale ensuite qu&rsquo;il ne peut pas aller de l&rsquo;avant.<\/p>\n\n<p>Les programmeurs intelligents essaient de pr\u00e9voir et de couvrir ces sc\u00e9narios afin que l&rsquo;utilisateur n&rsquo;ait pas \u00e0 comprendre un <a href=\"https:\/\/kinsta.com\/fr\/blog\/codes-statut-http\/\">message d&rsquo;erreur technique comme \u00ab 404 \u00bb<\/a> de mani\u00e8re ind\u00e9pendante. Au lieu de cela, ils affichent un message beaucoup plus compr\u00e9hensible : \u00ab La page n&rsquo;a pas pu \u00eatre trouv\u00e9e \u00bb<\/p>\n<p>Les erreurs en JavaScript sont des objets affich\u00e9s \u00e0 chaque fois qu&rsquo;une erreur de programmation se produit. Ces objets contiennent de nombreuses informations sur le type d&rsquo;erreur, l&rsquo;instruction qui a provoqu\u00e9 l&rsquo;erreur et la trace de la pile lorsque l&rsquo;erreur s&rsquo;est produite. JavaScript permet \u00e9galement aux programmeurs de cr\u00e9er des erreurs personnalis\u00e9es pour fournir des informations suppl\u00e9mentaires lors du d\u00e9bogage des probl\u00e8mes.<\/p>\n<h3>Propri\u00e9t\u00e9s d&rsquo;une erreur<\/h3>\n<p>Maintenant que la d\u00e9finition d&rsquo;une erreur JavaScript est claire, il est temps de se plonger dans les d\u00e9tails.<\/p>\n<p>Les erreurs en JavaScript comportent certaines propri\u00e9t\u00e9s standard et personnalis\u00e9es qui aident \u00e0 comprendre la cause et les effets de l&rsquo;erreur. Par d\u00e9faut, les erreurs en JavaScript contiennent trois propri\u00e9t\u00e9s :<\/p>\n<ol>\n<li><b>message <\/b>: Une valeur de type cha\u00eene qui porte le message d&rsquo;erreur<\/li>\n<li><b>name <\/b>: Le type d&rsquo;erreur qui s&rsquo;est produit (Nous y reviendrons en d\u00e9tail dans la prochaine section)<\/li>\n<li><b>stack <\/b>: La trace de la pile du code ex\u00e9cut\u00e9 lorsque l&rsquo;erreur s&rsquo;est produite.<\/li>\n<\/ol>\n<p>En outre, les erreurs peuvent \u00e9galement comporter des propri\u00e9t\u00e9s telles que <i>columnNumber, lineNumber, fileName, <\/i>etc. pour mieux d\u00e9crire l&rsquo;erreur. Toutefois, ces propri\u00e9t\u00e9s ne sont pas standard et peuvent ou non \u00eatre pr\u00e9sentes dans chaque objet d&rsquo;erreur g\u00e9n\u00e9r\u00e9 par votre application JavaScript.<\/p>\n<h3>Comprendre la trace de la pile<\/h3>\n<p>Une trace de pile est la liste des appels de m\u00e9thode dans lesquels se trouvait un programme lorsqu&rsquo;un \u00e9v\u00e9nement tel qu&rsquo;une exception ou un avertissement s&rsquo;est produit. Voici \u00e0 quoi ressemble un exemple de suivi de pile accompagn\u00e9 d&rsquo;une exception :<\/p>\n<figure id=\"attachment_110237\" aria-describedby=\"caption-attachment-110237\" style=\"width: 1138px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-110237 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2021\/11\/type-error-output-numeric.png\" alt=\"Exemple de trace de pile.\" width=\"1138\" height=\"278\"><figcaption id=\"caption-attachment-110237\" class=\"wp-caption-text\">Exemple de trace de pile.<\/figcaption><\/figure>\n<p>Comme vous pouvez le voir, elle commence par afficher le nom et le message d&rsquo;erreur, suivis d&rsquo;une liste des m\u00e9thodes qui ont \u00e9t\u00e9 appel\u00e9es. Chaque appel de m\u00e9thode indique l&#8217;emplacement de son code source et la ligne \u00e0 laquelle il a \u00e9t\u00e9 invoqu\u00e9. Vous pouvez utiliser ces donn\u00e9es pour naviguer dans votre base de code et identifier le morceau de code \u00e0 l&rsquo;origine de l&rsquo;erreur.<\/p>\n<p>Cette liste de m\u00e9thodes est dispos\u00e9e de mani\u00e8re empil\u00e9e. Elle montre o\u00f9 votre exception a \u00e9t\u00e9 lev\u00e9e en premier et comment elle s&rsquo;est propag\u00e9e \u00e0 travers les appels de m\u00e9thodes empil\u00e9s. L&rsquo;impl\u00e9mentation d&rsquo;un catch pour l&rsquo;exception ne la laissera pas se propager dans la pile et faire planter votre programme. Cependant, vous pourriez vouloir laisser des erreurs fatales non attrap\u00e9es pour faire planter le programme dans certains sc\u00e9narios intentionnels.<\/p>\n<h3>Erreurs vs exceptions<\/h3>\n<p>La plupart des gens consid\u00e8rent g\u00e9n\u00e9ralement les erreurs et les exceptions comme une seule et m\u00eame chose. Cependant, il est essentiel de noter une diff\u00e9rence l\u00e9g\u00e8re mais fondamentale entre elles.<\/p>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style- info\">\n        <p>Une exception est un objet d&rsquo;erreur qui a \u00e9t\u00e9 lanc\u00e9<\/p>\n<\/aside>\n\n<p>Pour mieux comprendre cela, prenons un exemple rapide. Voici comment vous pouvez d\u00e9finir une erreur en JavaScript :<\/p>\n<pre><code class=\"language-js\">const wrongTypeError = TypeError(\"Wrong type found, expected character\")<code><\/code><\/code><\/pre>\n<p>Et voici comment l&rsquo;objet <code><i>wrongTypeError<\/i><\/code> devient une exception :<\/p>\n<pre><code class=\"language-js\">throw wrongTypeError<\/code><\/pre>\n<p>Cependant, la plupart des gens ont tendance \u00e0 utiliser la forme abr\u00e9g\u00e9e qui d\u00e9finit les objets d&rsquo;erreur tout en les lan\u00e7ant :<\/p>\n<pre><code class=\"language-js\">throw TypeError(\"Wrong type found, expected character\")<\/code><\/pre>\n<p>C&rsquo;est une pratique standard. Cependant, c&rsquo;est l&rsquo;une des raisons pour lesquelles les d\u00e9veloppeurs ont tendance \u00e0 confondre exceptions et erreurs. Par cons\u00e9quent, il est essentiel de conna\u00eetre les principes de base, m\u00eame si vous utilisez des raccourcis pour effectuer votre travail rapidement.<\/p>\n<h2>Types d&rsquo;erreurs en JavaScript<\/h2>\n<p>Il existe une s\u00e9rie de types d&rsquo;erreurs pr\u00e9d\u00e9finis en JavaScript. Ils sont automatiquement choisis et d\u00e9finis par le runtime JavaScript lorsque le programmeur ne g\u00e8re pas explicitement les erreurs dans l&rsquo;application.<\/p>\n<p>Cette section vous permettra de parcourir certains des types d&rsquo;erreurs les plus courants en JavaScript et de comprendre quand et pourquoi ils se produisent.<\/p>\n<h3>RangeError<\/h3>\n<p>Une RangeError est d\u00e9clench\u00e9e lorsqu&rsquo;une variable est d\u00e9finie avec une valeur en dehors de sa plage de valeurs l\u00e9gales. Cela se produit g\u00e9n\u00e9ralement lorsqu&rsquo;on passe une valeur comme argument \u00e0 une fonction et que la valeur donn\u00e9e ne se trouve pas dans la plage des param\u00e8tres de la fonction. Il peut parfois \u00eatre difficile \u00e0 corriger lors de l&rsquo;utilisation de biblioth\u00e8ques tierces mal document\u00e9es, car vous devez conna\u00eetre la plage des valeurs possibles pour les arguments afin de transmettre la valeur correcte.<\/p>\n<p>Voici quelques-uns des sc\u00e9narios courants dans lesquels RangeError se produit :<\/p>\n<ul>\n<li>Essayer de cr\u00e9er un tableau de longueurs ill\u00e9gales via le constructeur Array.<\/li>\n<li>Passer de mauvaises valeurs aux m\u00e9thodes num\u00e9riques comme <code>toExponential()<\/code>, <code>toPrecision()<\/code>, <code>toFixed()<\/code>, etc.<\/li>\n<li>Transmettre des valeurs ill\u00e9gales \u00e0 des fonctions de cha\u00eene de caract\u00e8res comme <code>normalize()<\/code>.<\/li>\n<\/ul>\n<h3>ReferenceError<\/h3>\n<p>Une ReferenceError se produit lorsque quelque chose ne va pas avec la r\u00e9f\u00e9rence d&rsquo;une variable dans votre code. Vous avez peut-\u00eatre oubli\u00e9 de d\u00e9finir une valeur pour la variable avant de l&rsquo;utiliser, ou vous essayez peut-\u00eatre d&rsquo;utiliser une variable inaccessible dans votre code. Dans tous les cas, l&rsquo;examen de la trace de la pile fournit suffisamment d&rsquo;informations pour trouver et corriger la r\u00e9f\u00e9rence de la variable en cause.<\/p>\n<p>Voici quelques-unes des raisons courantes pour lesquelles les ReferenceErrors se produisent :<\/p>\n<ul>\n<li>Faire une faute de frappe dans un nom de variable.<\/li>\n<li>Essayer d&rsquo;acc\u00e9der \u00e0 des variables de type bloc en dehors de leur champ d&rsquo;application.<\/li>\n<li>Faire r\u00e9f\u00e9rence \u00e0 une variable globale d&rsquo;une biblioth\u00e8que externe (comme <a href=\"https:\/\/kinsta.com\/fr\/blog\/jquery-pas-defini\/\">$ de jQuery<\/a>) avant qu&rsquo;elle ne soit charg\u00e9e.<\/li>\n<\/ul>\n<h3>SyntaxError<\/h3>\n<p>Ces erreurs sont parmi les plus simples \u00e0 corriger car elles indiquent une erreur dans la syntaxe du code. JavaScript \u00e9tant un <a href=\"https:\/\/kinsta.com\/fr\/blog\/langages-de-script\/\">langage de script<\/a> interpr\u00e9t\u00e9 plut\u00f4t que compil\u00e9, ces erreurs se produisent lorsque l&rsquo;application ex\u00e9cute le script qui contient l&rsquo;erreur. Dans le cas des langages compil\u00e9s, ces erreurs sont identifi\u00e9es lors de la compilation. Ainsi, les binaires de l&rsquo;application ne sont pas cr\u00e9\u00e9s tant qu&rsquo;elles ne sont pas corrig\u00e9es.<\/p>\n<p>Voici quelques-unes des raisons courantes pour lesquelles les SyntaxErrors peuvent se produire :<\/p>\n<ul>\n<li>Virgules invers\u00e9es manquantes<\/li>\n<li>Parenth\u00e8ses fermantes manquantes<\/li>\n<li>Mauvais alignement des accolades ou d&rsquo;autres caract\u00e8res<\/li>\n<\/ul>\n<p>Une bonne pratique consiste \u00e0 utiliser un outil de linting dans votre IDE pour identifier ces erreurs avant qu&rsquo;elles n&rsquo;apparaissent dans le navigateur.<\/p>\n<h3>TypeError<\/h3>\n<p>TypeError est l&rsquo;une des erreurs les plus courantes dans les applications JavaScript. Cette erreur est cr\u00e9\u00e9e lorsqu&rsquo;une valeur ne s&rsquo;av\u00e8re pas \u00eatre d&rsquo;un type particulier attendu. Voici quelques-uns des cas les plus courants o\u00f9 elle se produit :<\/p>\n<ul>\n<li>Invoquer des objets qui ne sont pas des m\u00e9thodes.<\/li>\n<li>Tentative d&rsquo;acc\u00e8s \u00e0 des propri\u00e9t\u00e9s d&rsquo;objets nuls ou ind\u00e9finis<\/li>\n<li>Traiter une cha\u00eene de caract\u00e8res comme un nombre ou vice versa<\/li>\n<\/ul>\n<p>Il y a beaucoup plus de possibilit\u00e9s o\u00f9 une TypeError peut se produire. Nous examinerons plus tard quelques cas c\u00e9l\u00e8bres et apprendrons comment les corriger.<\/p>\n<h3>InternalError<\/h3>\n<p>Le type InternalError est utilis\u00e9 lorsqu&rsquo;une exception se produit dans le moteur d&rsquo;ex\u00e9cution JavaScript. Elle peut indiquer ou non un probl\u00e8me avec votre code.<\/p>\n<p>Le plus souvent, InternalError ne se produit que dans deux sc\u00e9narios :<\/p>\n<ul>\n<li>Lorsqu&rsquo;un patch ou une mise \u00e0 jour du runtime JavaScript comporte un bogue qui l\u00e8ve des exceptions (cela se produit tr\u00e8s rarement)<\/li>\n<li>Lorsque votre code contient des entit\u00e9s trop volumineuses pour le moteur JavaScript (par exemple, trop de cas de commutation, initialisations de tableaux trop importantes, trop de r\u00e9cursion)<\/li>\n<\/ul>\n<p>L&rsquo;approche la plus appropri\u00e9e pour r\u00e9soudre cette erreur est d&rsquo;identifier la cause via le message d&rsquo;erreur et de restructurer la logique de votre application, si possible, pour \u00e9liminer le pic soudain de charge de travail sur le moteur JavaScript.<\/p>\n<h3>URIError<\/h3>\n<p>L&rsquo;erreur URIError se produit lorsqu&rsquo;une fonction globale de traitement des URI, telle que <code>decodeURIComponent<\/code>, est utilis\u00e9e ill\u00e9galement. Elle indique g\u00e9n\u00e9ralement que le param\u00e8tre transmis \u00e0 l&rsquo;appel de m\u00e9thode n&rsquo;\u00e9tait pas conforme aux normes URI et n&rsquo;a donc pas \u00e9t\u00e9 <a href=\"https:\/\/kinsta.com\/fr\/blog\/defer-parsing-of-javascript\/\">analys\u00e9 correctement par la m\u00e9thode<\/a>.<\/p>\n<p>Le diagnostic de ces erreurs est g\u00e9n\u00e9ralement facile, car il suffit d&rsquo;examiner les arguments pour d\u00e9tecter les malformations.<\/p>\n<h3>EvalError<\/h3>\n<p>Une EvalError se produit lorsqu&rsquo;une erreur se produit avec un appel de fonction <code>eval()<\/code>. La fonction <code>eval()<\/code> est utilis\u00e9e pour ex\u00e9cuter du code JavaScript stock\u00e9 dans des cha\u00eenes de caract\u00e8res. Toutefois, \u00e9tant donn\u00e9 que l&rsquo;utilisation de la fonction <code>eval()<\/code> est fortement d\u00e9conseill\u00e9e en raison de probl\u00e8mes de s\u00e9curit\u00e9 et que les sp\u00e9cifications ECMAScript actuelles ne lancent plus la classe <code>EvalError<\/code>, ce type d&rsquo;erreur existe simplement pour maintenir la r\u00e9trocompatibilit\u00e9 avec l&rsquo;ancien code JavaScript.<\/p>\n<p>Si vous travaillez sur une ancienne version de JavaScript, vous pourriez rencontrer cette erreur. Dans tous les cas, il est pr\u00e9f\u00e9rable d&rsquo;examiner le code ex\u00e9cut\u00e9 dans l&rsquo;appel de la fonction <code>eval()<\/code> pour d\u00e9tecter d&rsquo;\u00e9ventuelles exceptions.<\/p>\n<h2>Cr\u00e9ation de types d&rsquo;erreur personnalis\u00e9s<\/h2>\n<p>Bien que JavaScript offre une liste ad\u00e9quate de classes de types d&rsquo;erreurs pour couvrir la plupart des sc\u00e9narios, vous pouvez toujours cr\u00e9er un nouveau type d&rsquo;erreur si la liste ne r\u00e9pond pas \u00e0 vos besoins. Le fondement de cette flexibilit\u00e9 r\u00e9side dans le fait que JavaScript vous permet de lancer litt\u00e9ralement n&rsquo;importe quoi avec la commande <code>throw<\/code>.<\/p>\n<p>Donc, techniquement, ces d\u00e9clarations sont tout \u00e0 fait l\u00e9gales :<\/p>\n<pre><code class=\"language-js\">throw 8\nthrow \"An error occurred\"<\/code><\/pre>\n<p>Cependant, le lancement d&rsquo;un type de donn\u00e9es primitif ne fournit pas de d\u00e9tails sur l&rsquo;erreur, comme son type, son nom ou la trace de la pile qui l&rsquo;accompagne. Pour corriger cela et normaliser le processus de traitement des erreurs, la classe <code>Error<\/code> a \u00e9t\u00e9 fournie. Il est \u00e9galement d\u00e9conseill\u00e9 d&rsquo;utiliser des types de donn\u00e9es primitifs pour lancer des exceptions.<\/p>\n<p>Vous pouvez \u00e9tendre la classe <code>Error<\/code> pour cr\u00e9er votre classe d&rsquo;erreur personnalis\u00e9e. Voici un exemple de base de la fa\u00e7on dont vous pouvez le faire :<\/p>\n<pre><code class=\"language-js\">class ValidationError extends Error {\n    constructor(message) {\n        super(message);\n        this.name = \"ValidationError\";\n    }\n}<\/code><\/pre>\n<p>Et vous pouvez l&rsquo;utiliser de la mani\u00e8re suivante :<\/p>\n<pre><code class=\"language-js\">throw ValidationError(\"Property not found: name\")<\/code><\/pre>\n<p>Et vous pouvez ensuite l&rsquo;identifier en utilisant le mot-cl\u00e9 <code>instanceof<\/code>:<\/p>\n<pre><code class=\"language-js\">try {\n    validateForm() \/\/ code that throws a ValidationError\n} catch (e) {\n    if (e instanceof ValidationError)\n    \/\/ do something\n    else\n    \/\/ do something else\n}<\/code><\/pre>\n<h2>Les 10 erreurs les plus courantes en JavaScript<\/h2>\n<p>Maintenant que vous avez compris les types d&rsquo;erreur courants et comment cr\u00e9er vos propres types d&rsquo;erreur, il est temps d&rsquo;examiner les erreurs les plus courantes auxquelles vous serez confront\u00e9 lors de l&rsquo;\u00e9criture de code JavaScript.<\/p>\n<h3>Consultez notre guide vid\u00e9o sur les <a href=\"https:\/\/www.youtube.com\/watch?v=IXrqv7Szv_g\">erreurs JavaScript les plus courantes<\/a><\/h3>\n<kinsta-video src=\"https:\/\/www.youtube.com\/watch?v=IXrqv7Szv_g\"><\/kinsta-video>\n<h3>1. Uncaught RangeError<\/h3>\n<p>Cette erreur se produit dans Google Chrome dans plusieurs sc\u00e9narios diff\u00e9rents. Premi\u00e8rement, elle peut se produire si vous appelez une fonction r\u00e9cursive et qu&rsquo;elle ne se termine pas. Vous pouvez le v\u00e9rifier vous-m\u00eame dans la Chrome Developer Console :<\/p>\n<figure id=\"attachment_110241\" aria-describedby=\"caption-attachment-110241\" style=\"width: 1392px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-110241 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2021\/11\/recur-range-error.png\" alt=\"Exemple de RangeError avec un appel de fonction r\u00e9cursive.\" width=\"1392\" height=\"492\"><figcaption id=\"caption-attachment-110241\" class=\"wp-caption-text\">Exemple de RangeError avec un appel de fonction r\u00e9cursive.<\/figcaption><\/figure>\n<p>Donc, pour r\u00e9soudre une telle erreur, assurez-vous de d\u00e9finir correctement les cas limites de votre fonction r\u00e9cursive. Une autre raison pour laquelle cette erreur se produit est que vous avez transmis une valeur qui est hors de la plage des param\u00e8tres d&rsquo;une fonction. Voici un exemple :<\/p>\n<figure id=\"attachment_110239\" aria-describedby=\"caption-attachment-110239\" style=\"width: 1392px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-110239 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2021\/11\/toExponential-range-error.png\" alt=\"Exemple de RangeError avec appel \u00e0 toExponential().\" width=\"1392\" height=\"150\"><figcaption id=\"caption-attachment-110239\" class=\"wp-caption-text\">Exemple de RangeError avec appel \u00e0 toExponential().<\/figcaption><\/figure>\n<p>Le message d&rsquo;erreur indique g\u00e9n\u00e9ralement ce qui ne va pas dans votre code. Une fois que vous aurez apport\u00e9 les modifications n\u00e9cessaires, le probl\u00e8me sera r\u00e9solu.<\/p>\n<figure id=\"attachment_110240\" aria-describedby=\"caption-attachment-110240\" style=\"width: 1396px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-110240 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2021\/11\/toExponential-error-fixed.png\" alt=\"Sortie pour l'appel de la fonction toExponential().\" width=\"1396\" height=\"100\"><figcaption id=\"caption-attachment-110240\" class=\"wp-caption-text\">Sortie pour l&rsquo;appel de la fonction toExponential().<\/figcaption><\/figure>\n<h3>2. Uncaught TypeError : Cannot set property<\/h3>\n<p>Cette erreur se produit lorsque vous d\u00e9finissez une propri\u00e9t\u00e9 sur une r\u00e9f\u00e9rence non d\u00e9finie. Vous pouvez reproduire le probl\u00e8me avec ce code :<\/p>\n<pre><code class=\"language-js\">var list\nlist.count = 0<code><\/code><\/code><\/pre>\n<p>Voici la sortie que vous recevrez :<\/p>\n<figure id=\"attachment_110245\" aria-describedby=\"caption-attachment-110245\" style=\"width: 1392px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-110245 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2021\/11\/list-count-type-error.png\" alt=\"Exemple de TypeError.\" width=\"1392\" height=\"124\"><figcaption id=\"caption-attachment-110245\" class=\"wp-caption-text\">Exemple de TypeError.<\/figcaption><\/figure>\n<p>Pour corriger cette erreur, initialisez la r\u00e9f\u00e9rence avec une valeur avant d&rsquo;acc\u00e9der \u00e0 ses propri\u00e9t\u00e9s. Voici \u00e0 quoi cela ressemble une fois corrig\u00e9 :<\/p>\n<figure id=\"attachment_110246\" aria-describedby=\"caption-attachment-110246\" style=\"width: 1392px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-110246 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2021\/11\/list-count-fixed.png\" alt=\"Comment corriger TypeError.\" width=\"1392\" height=\"124\"><figcaption id=\"caption-attachment-110246\" class=\"wp-caption-text\">Comment corriger TypeError.<\/figcaption><\/figure>\n<h3>3. Uncaught TypeError : Cannot read property<\/h3>\n<p>Il s&rsquo;agit de l&rsquo;une des erreurs les plus fr\u00e9quentes en JavaScript. Cette erreur se produit lorsque vous tentez de lire une propri\u00e9t\u00e9 ou d&rsquo;appeler une fonction sur un objet non d\u00e9fini. Vous pouvez la reproduire tr\u00e8s facilement en ex\u00e9cutant le code suivant dans une console Chrome Developer :<\/p>\n<pre><code class=\"language-js\">var func\nfunc.call()<code><\/code><\/code><\/pre>\n<p>Voici la sortie :<\/p>\n<figure id=\"attachment_110249\" aria-describedby=\"caption-attachment-110249\" style=\"width: 1100px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-110249 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2021\/11\/func-call-type-error.png\" alt=\"Exemple d'erreur de type avec une fonction non d\u00e9finie.\" width=\"1100\" height=\"162\"><figcaption id=\"caption-attachment-110249\" class=\"wp-caption-text\">Exemple d&rsquo;erreur de type avec une fonction non d\u00e9finie.<\/figcaption><\/figure>\n<p>Un objet non d\u00e9fini est l&rsquo;une des nombreuses causes possibles de cette erreur. Une autre cause importante de ce probl\u00e8me peut \u00eatre une initialisation incorrecte de l&rsquo;\u00e9tat lors du rendu de l&rsquo;interface utilisateur. Voici un exemple concret tir\u00e9 d&rsquo;une application React :<\/p>\n<pre><code class=\"language-js\">import React, { useState, useEffect } from \"react\";\n\nconst CardsList = () =&gt; {\n\n    const [state, setState] = useState();\n\n    useEffect(() =&gt; {\n        setTimeout(() =&gt; setState({ items: [\"Card 1\", \"Card 2\"] }), 2000);\n    }, []);\n\n    return (\n        &lt;&gt;\n            {state.items.map((item) =&gt; (\n                &lt;li key={item}&gt;{item}&lt;\/li&gt;\n            ))}\n        &lt;\/&gt;\n    );\n};\n\nexport default CardsList;<\/code><\/pre>\n<p>L&rsquo;application d\u00e9marre avec un conteneur d&rsquo;\u00e9tat vide et re\u00e7oit certains \u00e9l\u00e9ments apr\u00e8s un d\u00e9lai de 2 secondes. Le d\u00e9lai est mis en place pour imiter un appel r\u00e9seau. M\u00eame si votre r\u00e9seau est super rapide, vous serez toujours confront\u00e9 \u00e0 un l\u00e9ger retard en raison duquel le composant s&rsquo;affichera au moins une fois. Si vous essayez d&rsquo;ex\u00e9cuter cette application, vous recevrez l&rsquo;erreur suivante :<\/p>\n<figure id=\"attachment_110234\" aria-describedby=\"caption-attachment-110234\" style=\"width: 1180px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-110234 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2021\/11\/undefined-type-error-output.png\" alt=\"TypeError de trace de pile dans un navigateur.\" width=\"1180\" height=\"576\"><figcaption id=\"caption-attachment-110234\" class=\"wp-caption-text\">TypeError de trace de pile dans un navigateur.<\/figcaption><\/figure>\n<p>Cela est d\u00fb au fait qu&rsquo;au moment du rendu, le conteneur d&rsquo;\u00e9tat est ind\u00e9fini ; il n&rsquo;existe donc aucune propri\u00e9t\u00e9 <code>items<\/code> sur celui-ci. Il est facile de corriger cette erreur. Il vous suffit de fournir une valeur initiale par d\u00e9faut au conteneur d&rsquo;\u00e9tat.<\/p>\n<pre><code class=\"language-js\">\/\/ ...\nconst [state, setState] = useState({items: []});\n\/\/ ...<\/code><\/pre>\n<p>Maintenant, apr\u00e8s le d\u00e9lai fix\u00e9, votre application affichera une sortie similaire :<\/p>\n<figure id=\"attachment_110251\" aria-describedby=\"caption-attachment-110251\" style=\"width: 1180px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-110251 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2021\/11\/cards-list-output.png\" alt=\"Sortie du code.\" width=\"1180\" height=\"576\"><figcaption id=\"caption-attachment-110251\" class=\"wp-caption-text\">Sortie du code.<\/figcaption><\/figure>\n<p>La correction exacte dans votre code peut \u00eatre diff\u00e9rente, mais l&rsquo;essentiel ici est de toujours initialiser correctement vos variables avant de les utiliser.<\/p>\n<h3>4. TypeError : &lsquo;undefined&rsquo; is not an object<\/h3>\n<p>Cette erreur se produit dans Safari lorsque vous essayez d&rsquo;acc\u00e9der aux propri\u00e9t\u00e9s ou d&rsquo;appeler une m\u00e9thode sur un objet non d\u00e9fini. Vous pouvez ex\u00e9cuter le m\u00eame code que ci-dessus pour reproduire vous-m\u00eame l&rsquo;erreur.<\/p>\n<figure id=\"attachment_110250\" aria-describedby=\"caption-attachment-110250\" style=\"width: 1146px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-110250 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2021\/11\/func-call-type-error-undefined.png\" alt=\"Exemple de TypeError avec une fonction ind\u00e9finie.\" width=\"1146\" height=\"172\"><figcaption id=\"caption-attachment-110250\" class=\"wp-caption-text\">Exemple de TypeError avec une fonction ind\u00e9finie.<\/figcaption><\/figure>\n<p>La solution \u00e0 cette erreur est \u00e9galement la m\u00eame &#8211; assurez-vous que vous avez initialis\u00e9 vos variables correctement et qu&rsquo;elles ne sont pas ind\u00e9finies lors de l&rsquo;acc\u00e8s \u00e0 une propri\u00e9t\u00e9 ou \u00e0 une m\u00e9thode.<\/p>\n<h3>5. TypeError : null is not an object<\/h3>\n<p>Cette erreur est, une fois encore, similaire \u00e0 la pr\u00e9c\u00e9dente. Elle se produit sur Safari, et la seule diff\u00e9rence entre les deux erreurs est que celle-ci est d\u00e9clench\u00e9e lorsque l&rsquo;objet dont la propri\u00e9t\u00e9 ou la m\u00e9thode est accessible est <code>null<\/code> au lieu de <code>undefined<\/code>. Vous pouvez la reproduire en ex\u00e9cutant le morceau de code suivant :<\/p>\n<pre><code class=\"language-js\">var func = null\n\nfunc.call()<\/code><\/pre>\n<p>Voici le r\u00e9sultat que vous obtiendrez :<\/p>\n<figure id=\"attachment_110243\" aria-describedby=\"caption-attachment-110243\" style=\"width: 1146px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-110243 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2021\/11\/null-object-error.png\" alt=\"Exemple de TypeError avec la fonction null.\" width=\"1146\" height=\"142\"><figcaption id=\"caption-attachment-110243\" class=\"wp-caption-text\">Exemple de TypeError avec la fonction null.<\/figcaption><\/figure>\n<p>Puisque <code>null<\/code> est une valeur explicitement d\u00e9finie \u00e0 une variable et non assign\u00e9e automatiquement par JavaScript. Cette erreur ne peut se produire que si vous essayez d&rsquo;acc\u00e9der \u00e0 une variable que vous avez d\u00e9finie vous-m\u00eame sur <code>null<\/code>. Vous devez donc revoir votre code et v\u00e9rifier si la logique que vous avez \u00e9crite est correcte ou non.<\/p>\n<h3>6. TypeError : Cannot read property &lsquo;length&rsquo;<\/h3>\n<p>Cette erreur se produit dans Chrome lorsque vous essayez de lire la longueur d&rsquo;un objet <code>null<\/code> ou <code>undefined<\/code>. La cause de ce probl\u00e8me est similaire aux probl\u00e8mes pr\u00e9c\u00e9dents, mais il se produit assez fr\u00e9quemment lors de la manipulation de listes ; il m\u00e9rite donc une mention sp\u00e9ciale. Voici comment vous pouvez reproduire le probl\u00e8me :<\/p>\n<figure id=\"attachment_110244\" aria-describedby=\"caption-attachment-110244\" style=\"width: 937px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-110244 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2021\/11\/myButton-length-type-error.png\" alt=\"Exemple de TypeError avec un objet non d\u00e9fini.\" width=\"937\" height=\"230\"><figcaption id=\"caption-attachment-110244\" class=\"wp-caption-text\">Exemple de TypeError avec un objet non d\u00e9fini.<\/figcaption><\/figure>\n<p>Cependant, dans les versions plus r\u00e9centes de Chrome, cette erreur est signal\u00e9e comme <code>Uncaught TypeError: Cannot read properties of undefined<\/code>. Voici comment cela se pr\u00e9sente :<\/p>\n<figure id=\"attachment_110247\" aria-describedby=\"caption-attachment-110247\" style=\"width: 1400px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-110247 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2021\/11\/length-type-error.png\" alt=\"Exemple de TypeError avec un objet non d\u00e9fini sur les versions plus r\u00e9centes de Chrome.\" width=\"1400\" height=\"174\"><figcaption id=\"caption-attachment-110247\" class=\"wp-caption-text\">Exemple de TypeError avec un objet non d\u00e9fini sur les versions plus r\u00e9centes de Chrome.<\/figcaption><\/figure>\n<p>La solution, encore une fois, est de s&rsquo;assurer que l&rsquo;objet dont vous essayez d&rsquo;acc\u00e9der \u00e0 la longueur existe et n&rsquo;est pas d\u00e9fini sur <code>null<\/code>.<\/p>\n<h3>7. TypeError : &lsquo;undefined&rsquo; is not a function<\/h3>\n<p>Cette erreur se produit lorsque vous essayez d&rsquo;invoquer une m\u00e9thode qui n&rsquo;existe pas dans votre script, ou qui existe mais ne peut \u00eatre r\u00e9f\u00e9renc\u00e9e dans le contexte d&rsquo;appel. Cette erreur se produit g\u00e9n\u00e9ralement dans Google Chrome, et vous pouvez la r\u00e9soudre en v\u00e9rifiant la ligne de code qui provoque l&rsquo;erreur. Si vous trouvez une faute de frappe, corrigez-la et v\u00e9rifiez si cela r\u00e9sout votre probl\u00e8me.<\/p>\n<p>Si vous avez utilis\u00e9 le mot-cl\u00e9 auto-r\u00e9f\u00e9renc\u00e9 <code>this<\/code> dans votre code, cette erreur peut survenir si <code>this<\/code> n&rsquo;est pas li\u00e9 de mani\u00e8re appropri\u00e9e \u00e0 votre contexte. Consid\u00e9rez le code suivant :<\/p>\n<pre><code class=\"language-js\">function showAlert() {\n    alert(\"message here\")\n}\n\ndocument.addEventListener(\"click\", () =&gt; {\n    this.showAlert();\n})<\/code><\/pre>\n<p>Si vous ex\u00e9cutez le code ci-dessus, il lancera l&rsquo;erreur dont nous avons parl\u00e9. Cela se produit parce que la fonction anonyme pass\u00e9e en tant qu&rsquo;\u00e9couteur d&rsquo;\u00e9v\u00e9nement est ex\u00e9cut\u00e9e dans le contexte de <code>document<\/code>.<\/p>\n<p>En revanche, la fonction <code>showAlert<\/code> est d\u00e9finie dans le contexte de <code>window<\/code>.<\/p>\n<p>Pour r\u00e9soudre ce probl\u00e8me, vous devez passer la r\u00e9f\u00e9rence appropri\u00e9e \u00e0 la fonction en la liant \u00e0 la m\u00e9thode <code>bind()<\/code>:<\/p>\n<pre><code class=\"language-js\">document.addEventListener(\"click\", this.showAlert.bind(this))<\/code><\/pre>\n<h3>8. ReferenceError : event is not defined<\/h3>\n<p>Cette erreur se produit lorsque vous essayez d&rsquo;acc\u00e9der \u00e0 une r\u00e9f\u00e9rence non d\u00e9finie dans la port\u00e9e de l&rsquo;appel. Cela se produit g\u00e9n\u00e9ralement lors de la manipulation d&rsquo;\u00e9v\u00e9nements puisqu&rsquo;ils vous fournissent souvent une r\u00e9f\u00e9rence appel\u00e9e <code>event<\/code> dans la fonction de rappel. Cette erreur peut se produire si vous oubliez de d\u00e9finir l&rsquo;argument event dans les param\u00e8tres de votre fonction ou si vous l&rsquo;orthographiez mal.<\/p>\n<p>Cette erreur peut ne pas se produire dans Internet Explorer ou Google Chrome (car IE propose une variable d&rsquo;\u00e9v\u00e9nement globale et Chrome attache automatiquement la variable d&rsquo;\u00e9v\u00e9nement au gestionnaire), mais elle peut se produire dans Firefox. Il est donc conseill\u00e9 de garder un \u0153il sur ces petites erreurs.<\/p>\n<h3>9. TypeError : Assignment to constant variable<\/h3>\n<p>Il s&rsquo;agit d&rsquo;une erreur qui r\u00e9sulte d&rsquo;un manque d&rsquo;attention. Si vous essayez d&rsquo;attribuer une nouvelle valeur \u00e0 une variable constante, vous obtiendrez un tel r\u00e9sultat :<\/p>\n<figure id=\"attachment_110248\" aria-describedby=\"caption-attachment-110248\" style=\"width: 1392px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-110248 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2021\/11\/func-type-error.png\" alt=\"Exemple de TypeError avec affectation \u00e0 un objet constant.\" width=\"1392\" height=\"124\"><figcaption id=\"caption-attachment-110248\" class=\"wp-caption-text\">Exemple de TypeError avec affectation \u00e0 un objet constant.<\/figcaption><\/figure>\n<p>Bien que cela semble facile \u00e0 corriger pour le moment, imaginez des centaines de d\u00e9clarations de variables de ce type et l&rsquo;une d&rsquo;entre elles d\u00e9finie par erreur comme <code>const<\/code> au lieu de <code>let<\/code>! <a href=\"https:\/\/kinsta.com\/fr\/blog\/php-vs-javascript\/#variable-and-constant-definitions\">Contrairement \u00e0 d&rsquo;autres langages de script comme PHP<\/a>, il y a une diff\u00e9rence minime entre le style de d\u00e9claration des constantes et des variables en JavaScript. Il est donc conseill\u00e9 de v\u00e9rifier vos d\u00e9clarations en premier lieu lorsque vous \u00eates confront\u00e9 \u00e0 cette erreur. Vous pouvez \u00e9galement rencontrer cette erreur si vous<i> oubliez<\/i> que ladite r\u00e9f\u00e9rence est une constante et que vous l&rsquo;utilisez comme une variable. Cela indique soit une n\u00e9gligence, soit une faille dans la logique de votre application. Assurez-vous de le v\u00e9rifier lorsque vous essayez de r\u00e9soudre ce probl\u00e8me.<\/p>\n<h3>10. (unknow) : Script Error<\/h3>\n<p>Une erreur de script se produit lorsqu&rsquo;un script tiers envoie une erreur \u00e0 votre navigateur. Cette erreur est suivie de <i>(iunknow) car<\/i> le script tiers appartient \u00e0 un domaine diff\u00e9rent de celui de votre application. Le navigateur cache d&rsquo;autres d\u00e9tails pour \u00e9viter la fuite d&rsquo;informations sensibles du script tiers.<\/p>\n<p>Vous ne pouvez pas r\u00e9soudre cette erreur sans conna\u00eetre tous les d\u00e9tails. Voici ce que vous pouvez faire pour obtenir plus d&rsquo;informations sur l&rsquo;erreur :<\/p>\n<ol>\n<li>Ajoutez l&rsquo;attribut <code>crossorigin<\/code> dans la balise script.<\/li>\n<li>D\u00e9finissez l&rsquo;en-t\u00eate correct <code>Access-Control-Allow-Origin<\/code> sur le serveur qui h\u00e9berge le script.<\/li>\n<li>[Facultatif] Si vous n&rsquo;avez pas acc\u00e8s au serveur h\u00e9bergeant le script, vous pouvez envisager d&rsquo;utiliser un proxy pour relayer votre demande au serveur et la renvoyer au client avec les bons en-t\u00eates.<\/li>\n<\/ol>\n<p>Une fois que vous pouvez acc\u00e9der aux d\u00e9tails de l&rsquo;erreur, vous pouvez alors vous atteler \u00e0 la r\u00e9solution du probl\u00e8me, qui sera probablement li\u00e9 soit \u00e0 la biblioth\u00e8que tierce, soit au r\u00e9seau.<\/p>\n<h2>Comment identifier et pr\u00e9venir les erreurs en JavaScript<\/h2>\n<p>Si les erreurs \u00e9voqu\u00e9es ci-dessus sont les plus courantes et les plus fr\u00e9quentes en JavaScript que vous rencontrerez, se fier \u00e0 quelques exemples ne sera jamais suffisant. Il est vital de comprendre comment d\u00e9tecter et pr\u00e9venir tout type d&rsquo;erreur dans une application JavaScript tout en la d\u00e9veloppant. Voici comment vous pouvez g\u00e9rer les erreurs en JavaScript.<\/p>\n<h3>Lancer et attraper manuellement les erreurs<\/h3>\n<p>La fa\u00e7on la plus fondamentale de traiter les erreurs qui ont \u00e9t\u00e9 lanc\u00e9es manuellement ou par le runtime est de les attraper. Comme la plupart des autres langages, JavaScript propose un ensemble de mots-cl\u00e9s pour g\u00e9rer les erreurs. Il est essentiel de conna\u00eetre chacun d&rsquo;entre eux en profondeur avant de vous lancer dans la gestion des erreurs dans votre application JavaScript.<\/p>\n<h4>throw<\/h4>\n<p>Le premier et le plus \u00e9l\u00e9mentaire des mots-cl\u00e9s de cet ensemble est <code>throw<\/code>. Comme il est \u00e9vident, le mot-cl\u00e9 throw est utilis\u00e9 pour lancer des erreurs afin de cr\u00e9er manuellement des exceptions dans le runtime JavaScript. Nous en avons d\u00e9j\u00e0 parl\u00e9 plus t\u00f4t dans le document, et voici l&rsquo;essentiel de la signification de ce mot-cl\u00e9 :<\/p>\n<ul>\n<li>Vous pouvez <code>throw<\/code> tout, y compris les chiffres, les cha\u00eenes de caract\u00e8res et les objets <code>Error<\/code>.<\/li>\n<li>Toutefois, il est d\u00e9conseill\u00e9 de lancer des types de donn\u00e9es primitifs tels que les cha\u00eenes de caract\u00e8res et les nombres, car ils ne contiennent pas d&rsquo;informations de d\u00e9bogage sur les erreurs.<\/li>\n<li>Exemple <code>throw TypeError(\"Please provide a string\")<\/code><\/li>\n<\/ul>\n<h4>try<\/h4>\n<p>Le mot-cl\u00e9 <code>try<\/code> est utilis\u00e9 pour indiquer qu&rsquo;un bloc de code pourrait lancer une exception. Sa syntaxe est la suivante :<\/p>\n<pre><code class=\"language-js\">try {\n    \/\/ error-prone code here\n}<\/code><\/pre>\n<p>Il est important de noter qu&rsquo;un bloc <code>catch<\/code> doit toujours suivre le bloc <code>try<\/code> pour g\u00e9rer efficacement les erreurs.<\/p>\n<h4>catch<\/h4>\n<p>Le mot-cl\u00e9 <code>catch<\/code> est utilis\u00e9 pour cr\u00e9er un bloc catch. Ce bloc de code est charg\u00e9 de traiter les erreurs que le bloc <code>try<\/code> qui suit attrape. Voici sa syntaxe :<\/p>\n<pre><code class=\"language-js\">catch (exception) {\n    \/\/ code to handle the exception here\n}<\/code><\/pre>\n<p>Et voici comment vous impl\u00e9mentez ensemble les blocs <code>try<\/code> et <code>catch<\/code> :<\/p>\n<pre><code class=\"language-js\">try {\n    \/\/ business logic code\n} catch (exception) {\n    \/\/ error handling code\n}<\/code><\/pre>\n<p>Contrairement \u00e0 C++ ou Java, vous ne pouvez pas ajouter plusieurs blocs <code>catch<\/code> \u00e0 un bloc <code>try<\/code> en JavaScript. Cela signifie que vous ne pouvez pas faire ceci :<\/p>\n<pre><code class=\"language-js\">try {\n    \/\/ business logic code\n} catch (exception) {\n    if (exception instanceof TypeError) {\n        \/\/ do something\n    }\n} catch (exception) {\n    if (exception instanceof RangeError) {\n    \/\/ do something\n    }\n}<\/code><\/pre>\n<p>Au lieu de cela, vous pouvez utiliser une d\u00e9claration <code>if...else<\/code> ou une d\u00e9claration switch case \u00e0 l&rsquo;int\u00e9rieur du bloc catch unique pour g\u00e9rer tous les cas d&rsquo;erreur possibles. Cela ressemblerait \u00e0 ceci :<\/p>\n<pre><code class=\"language-js\">try {\n    \/\/ business logic code\n} catch (exception) {\n    if (exception instanceof TypeError) {\n        \/\/ do something\n    } else if (exception instanceof RangeError) {\n        \/\/ do something else\n    }\n}<\/code><\/pre>\n<h4>finally<\/h4>\n<p>Le mot-cl\u00e9 <code>finally<\/code> est utilis\u00e9 pour d\u00e9finir un bloc de code qui est ex\u00e9cut\u00e9 apr\u00e8s la gestion d&rsquo;une erreur. Ce bloc est ex\u00e9cut\u00e9 apr\u00e8s les blocs try et catch.<\/p>\n<p>En outre, le bloc finally sera ex\u00e9cut\u00e9 quel que soit le r\u00e9sultat des deux autres blocs. Cela signifie que m\u00eame si le bloc catch ne peut pas traiter enti\u00e8rement l&rsquo;erreur ou si une erreur est lanc\u00e9e dans le bloc catch, l&rsquo;interpr\u00e9teur ex\u00e9cutera le code dans le bloc finally avant que le programme ne s&rsquo;\u00e9croule.<\/p>\n<p>Pour \u00eatre consid\u00e9r\u00e9 comme valide, le bloc try en JavaScript doit \u00eatre suivi d&rsquo;un bloc catch ou finally. Sans l&rsquo;un de ces \u00e9l\u00e9ments, l&rsquo;interpr\u00e9teur l\u00e8vera une SyntaxError. Par cons\u00e9quent, veillez \u00e0 faire suivre vos blocs try d&rsquo;au moins l&rsquo;un d&rsquo;entre eux lorsque vous traitez les erreurs.<\/p>\n<h3>Traiter les erreurs de mani\u00e8re globale avec la m\u00e9thode onerror()<\/h3>\n<p>La m\u00e9thode <code>onerror()<\/code> est disponible pour tous les \u00e9l\u00e9ments HTML afin de g\u00e9rer les erreurs qui peuvent survenir avec eux. Par exemple, si une balise <code>img<\/code> ne trouve pas l&rsquo;image dont l&rsquo;URL est sp\u00e9cifi\u00e9e, elle d\u00e9clenche sa m\u00e9thode onerror pour permettre \u00e0 l&rsquo;utilisateur de g\u00e9rer l&rsquo;erreur.<\/p>\n<p>En g\u00e9n\u00e9ral, vous fournissez une autre URL d&rsquo;image dans l&rsquo;appel onerror pour que la balise <code>img<\/code> puisse se rabattre sur elle. Voici comment vous pouvez le faire via JavaScript :<\/p>\n<pre><code class=\"language-js\">const image = document.querySelector(\"img\")\n\nimage.onerror = (event) =&gt; {\n    console.log(\"Error occurred: \" + event)\n}<\/code><\/pre>\n<p>Cependant, vous pouvez utiliser cette fonctionnalit\u00e9 pour cr\u00e9er un m\u00e9canisme global de traitement des erreurs pour votre application. Voici comment vous pouvez le faire :<\/p>\n<pre><code class=\"language-js\">window.onerror = (event) =&gt; {\n    console.log(\"Error occurred: \" + event)\n}<\/code><\/pre>\n<p>Gr\u00e2ce \u00e0 ce gestionnaire d&rsquo;\u00e9v\u00e9nements, vous pouvez vous d\u00e9barrasser des multiples blocs <code>try...catch<\/code> qui tra\u00eenent dans votre code et centraliser le traitement des erreurs de votre application de mani\u00e8re similaire au traitement des \u00e9v\u00e9nements. Vous pouvez attacher plusieurs gestionnaires d&rsquo;erreurs \u00e0 la fen\u00eatre pour maintenir le principe de responsabilit\u00e9 unique des principes de conception SOLID. L&rsquo;interpr\u00e9teur passera en revue tous les gestionnaires jusqu&rsquo;\u00e0 ce qu&rsquo;il atteigne celui qui convient.<\/p>\n<h3>Transmettre les erreurs via des callbacks<\/h3>\n<p>Si les fonctions simples et lin\u00e9aires permettent \u00e0 la gestion des erreurs de rester simple, les callbacks peuvent compliquer l&rsquo;affaire.<\/p>\n<p>Consid\u00e9rez le morceau de code suivant :<\/p>\n<pre><code class=\"language-js\">const calculateCube = (number, callback) =&gt; {\n    setTimeout(() =&gt; {\n        const cube = number * number * number\n        callback(cube)\n    }, 1000)\n}\n\nconst callback = result =&gt; console.log(result)\n\ncalculateCube(4, callback)<\/code><\/pre>\n<p>La fonction ci-dessus d\u00e9montre une condition asynchrone dans laquelle une fonction prend un certain temps pour traiter les op\u00e9rations et renvoie le r\u00e9sultat plus tard \u00e0 l&rsquo;aide d&rsquo;un callback.<\/p>\n<p>Si vous essayez d&rsquo;entrer une cha\u00eene de caract\u00e8res au lieu de 4 dans l&rsquo;appel de la fonction, vous obtiendrez <code>NaN<\/code> comme r\u00e9sultat.<\/p>\n<p>Cela doit \u00eatre trait\u00e9 correctement. Voici comment :<\/p>\n<pre><code class=\"language-js\">const calculateCube = (number, callback) =&gt; {\n\n    setTimeout(() =&gt; {\n        if (typeof number !== \"number\")\n            throw new Error(\"Numeric argument is expected\")\n\n        const cube = number * number * number\n        callback(cube)\n    }, 1000)\n}\n\nconst callback = result =&gt; console.log(result)\n\ntry {\n    calculateCube(4, callback)\n} catch (e) { console.log(e) }<\/code><\/pre>\n<p>Dans l&rsquo;id\u00e9al, cela devrait r\u00e9soudre le probl\u00e8me. Cependant, si vous essayez de passer une cha\u00eene de caract\u00e8res \u00e0 l&rsquo;appel de fonction, vous obtiendrez ceci :<\/p>\n<figure id=\"attachment_110236\" aria-describedby=\"caption-attachment-110236\" style=\"width: 1100px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-110236 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2021\/11\/uncaught-error-numeric-argument.png\" alt=\"Exemple d'erreur avec le mauvais argument.\" width=\"1100\" height=\"84\"><figcaption id=\"caption-attachment-110236\" class=\"wp-caption-text\">Exemple d&rsquo;erreur avec le mauvais argument.<\/figcaption><\/figure>\n<p>Bien que vous ayez mis en place un bloc try-catch lors de l&rsquo;appel de la fonction, l&rsquo;erreur n&rsquo;est toujours pas attrap\u00e9e. L&rsquo;erreur est lanc\u00e9e apr\u00e8s l&rsquo;ex\u00e9cution du bloc catch en raison du d\u00e9lai d&rsquo;attente.<\/p>\n<p>Cela peut se produire rapidement dans les appels r\u00e9seau, o\u00f9 des d\u00e9lais inattendus se glissent. Vous devez couvrir de tels cas lors du d\u00e9veloppement de votre application.<\/p>\n<p>Voici comment vous pouvez g\u00e9rer correctement les erreurs dans les callbacks :<\/p>\n<pre><code class=\"language-js\">const calculateCube = (number, callback) =&gt; {\n\n    setTimeout(() =&gt; {\n        if (typeof number !== \"number\") {\n            callback(new TypeError(\"Numeric argument is expected\"))\n            return\n        }\n        const cube = number * number * number\n        callback(null, cube)\n    }, 2000)\n}\n\nconst callback = (error, result) =&gt; {\n    if (error !== null) {\n        console.log(error)\n        return\n    }\n    console.log(result)\n}\n\ntry {\n    calculateCube('hey', callback)\n} catch (e) {\n    console.log(e)\n}<\/code><\/pre>\n<p>Maintenant, la sortie \u00e0 la console sera :<\/p>\n<figure id=\"attachment_110238\" aria-describedby=\"caption-attachment-110238\" style=\"width: 1100px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-110238 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2021\/11\/type-error-numeric-dark.png\" alt=\"Exemple de TypeError avec argument ill\u00e9gal.\" width=\"1100\" height=\"84\"><figcaption id=\"caption-attachment-110238\" class=\"wp-caption-text\">Exemple de TypeError avec argument ill\u00e9gal.<\/figcaption><\/figure>\n<p>Cela indique que l&rsquo;erreur a \u00e9t\u00e9 trait\u00e9e de mani\u00e8re appropri\u00e9e.<\/p>\n<h3>Traiter les erreurs dans Promises<\/h3>\n<p>La plupart des gens ont tendance \u00e0 pr\u00e9f\u00e9rer les promises pour g\u00e9rer les activit\u00e9s asynchrones. Elles pr\u00e9sentent un autre avantage &#8211; une promise rejet\u00e9e ne met pas fin \u00e0 votre script. Cependant, vous devez toujours impl\u00e9menter un bloc catch pour g\u00e9rer les erreurs dans les promises. Pour mieux comprendre cela, r\u00e9\u00e9crivons la fonction <code>calculateCube()<\/code> en utilisant des promises :<\/p>\n<pre><code class=\"language-js\">const delay = ms =&gt; new Promise(res =&gt; setTimeout(res, ms));\n\nconst calculateCube = async (number) =&gt; {\n    if (typeof number !== \"number\")\n        throw Error(\"Numeric argument is expected\")\n    await delay(5000)\n    const cube = number * number * number\n    return cube\n}\n\ntry {\n    calculateCube(4).then(r =&gt; console.log(r))\n} catch (e) { console.log(e) }<\/code><\/pre>\n<p>Le timeout du code pr\u00e9c\u00e9dent a \u00e9t\u00e9 isol\u00e9 dans la fonction <code>delay<\/code> pour des raisons de compr\u00e9hension. Si vous essayez d&rsquo;entrer une cha\u00eene de caract\u00e8res au lieu de 4, la sortie que vous obtiendrez sera similaire \u00e0 celle-ci :<\/p>\n<figure id=\"attachment_110235\" aria-describedby=\"caption-attachment-110235\" style=\"width: 1100px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-110235 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2021\/11\/uncaught-error-numeric.png\" alt=\"Exemple de TypeError avec un argument ill\u00e9gal dans Promise.\" width=\"1100\" height=\"100\"><figcaption id=\"caption-attachment-110235\" class=\"wp-caption-text\">Exemple de TypeError avec un argument ill\u00e9gal dans Promise.<\/figcaption><\/figure>\n<p>Encore une fois, cela est d\u00fb au fait que le site <code>Promise<\/code> lance l&rsquo;erreur apr\u00e8s que tout le reste ait termin\u00e9 son ex\u00e9cution. La solution \u00e0 ce probl\u00e8me est simple. Il suffit d&rsquo;ajouter un appel \u00e0 <code>catch()<\/code> \u00e0 la cha\u00eene de promesses comme ceci :<\/p>\n<pre><code class=\"language-js\">calculateCube(\"hey\")\n.then(r =&gt; console.log(r))\n.catch(e =&gt; console.log(e))<\/code><\/pre>\n<p>Maintenant, la sortie sera :<\/p>\n<figure id=\"attachment_110242\" aria-describedby=\"caption-attachment-110242\" style=\"width: 1100px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-110242 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2021\/11\/numeric-argument-error.png\" alt=\"Exemple d'erreur de type trait\u00e9 avec un argument ill\u00e9gal.\" width=\"1100\" height=\"100\"><figcaption id=\"caption-attachment-110242\" class=\"wp-caption-text\">Exemple d&rsquo;erreur de type trait\u00e9 avec un argument ill\u00e9gal.<\/figcaption><\/figure>\n<p>Vous pouvez observer \u00e0 quel point il est facile de g\u00e9rer les erreurs avec des promises. De plus, vous pouvez encha\u00eener un bloc <code>finally()<\/code> et l&rsquo;appel de la promse pour ajouter du code qui s&rsquo;ex\u00e9cutera une fois la gestion des erreurs termin\u00e9e.<\/p>\n<p>Vous pouvez \u00e9galement g\u00e9rer les erreurs dans les promises en utilisant la technique traditionnelle try-catch-finally. Voici \u00e0 quoi ressemblerait votre appel de promise dans ce cas :<\/p>\n<pre><code class=\"language-js\">try {\n    let result = await calculateCube(\"hey\")\n    console.log(result)\n} catch (e) {\n    console.log(e)\n} finally {\n    console.log('Finally executed\")\n}<\/code><\/pre>\n<p>Cependant, cela ne fonctionne qu&rsquo;\u00e0 l&rsquo;int\u00e9rieur d&rsquo;une fonction asynchrone. Par cons\u00e9quent, la meilleure fa\u00e7on de g\u00e9rer les erreurs dans les promises est d&rsquo;encha\u00eener <code>catch<\/code> et <code>finally<\/code> \u00e0 l&rsquo;appel de promise.<\/p>\n<h3>throw\/catch vs onerror() vs Callbacks vs Promises : Quelle est la meilleure solution ?<\/h3>\n<p>Avec quatre m\u00e9thodes \u00e0 votre disposition, vous devez savoir comment choisir la plus appropri\u00e9e dans un cas d&rsquo;utilisation donn\u00e9. Voici comment vous pouvez d\u00e9cider par vous-m\u00eame :<\/p>\n<h4>throw\/catch<\/h4>\n<p>Vous utiliserez cette m\u00e9thode la plupart du temps. Assurez-vous d&rsquo;impl\u00e9menter des conditions pour toutes les erreurs possibles dans votre bloc catch, et n&rsquo;oubliez pas d&rsquo;inclure un bloc finally si vous devez ex\u00e9cuter des routines de nettoyage de la m\u00e9moire apr\u00e8s le bloc try.<\/p>\n<p>Cependant, trop de blocs try\/catch peuvent rendre votre code difficile \u00e0 maintenir. Si vous vous trouvez dans une telle situation, il est pr\u00e9f\u00e9rable de g\u00e9rer les erreurs via le gestionnaire global ou la m\u00e9thode promise.<\/p>\n<p>Lorsque vous devez choisir entre les blocs try\/catch asynchrones et la m\u00e9thode promise <code>catch()<\/code>, il est conseill\u00e9 d&rsquo;opter pour les blocs try\/catch asynchrones car ils rendent votre code lin\u00e9aire et facile \u00e0 d\u00e9boguer.<\/p>\n<h4>onerror()<\/h4>\n<p>Il est pr\u00e9f\u00e9rable d&rsquo;utiliser la m\u00e9thode <code>onerror()<\/code> lorsque vous savez que votre application doit g\u00e9rer de nombreuses erreurs, et qu&rsquo;elles peuvent \u00eatre bien \u00e9parpill\u00e9es dans la base de code. La m\u00e9thode <code>onerror<\/code> vous permet de g\u00e9rer les erreurs comme s&rsquo;il s&rsquo;agissait d&rsquo;un autre \u00e9v\u00e9nement trait\u00e9 par votre application. Vous pouvez d\u00e9finir plusieurs gestionnaires d&rsquo;erreurs et les attacher \u00e0 la fen\u00eatre de votre application lors du rendu initial.<\/p>\n<p>Toutefois, n&rsquo;oubliez pas que la m\u00e9thode <code>onerror()<\/code> peut s&rsquo;av\u00e9rer inutilement difficile \u00e0 mettre en place dans les petits projets o\u00f9 le risque d&rsquo;erreur est moindre. Si vous \u00eates s\u00fbr que votre application ne lancera pas trop d&rsquo;erreurs, la m\u00e9thode traditionnelle throw\/catch vous conviendra mieux.<\/p>\n<h4>Callbacks et promises<\/h4>\n<p>Le traitement des erreurs dans les callbacks et les promises diff\u00e8re en raison de la conception et de la structure de leur code. Toutefois, si vous devez choisir entre ces deux m\u00e9thodes avant d&rsquo;avoir \u00e9crit votre code, il est pr\u00e9f\u00e9rable d&rsquo;opter pour les promises.<\/p>\n<p>En effet, les promises ont une construction int\u00e9gr\u00e9e pour encha\u00eener un bloc <code>catch()<\/code> et un bloc <code>finally()<\/code> afin de g\u00e9rer les erreurs facilement. Cette m\u00e9thode est plus simple et plus propre que de d\u00e9finir des arguments suppl\u00e9mentaires\/r\u00e9utiliser des arguments existants pour g\u00e9rer les erreurs.<\/p>\n<h3>Garder la trace des changements avec les d\u00e9p\u00f4ts Git<\/h3>\n<p>De nombreuses erreurs surviennent souvent en raison d&rsquo;erreurs manuelles dans la base de code. Pendant le d\u00e9veloppement ou le d\u00e9bogage de votre code, vous pouvez finir par faire des changements inutiles qui peuvent provoquer l&rsquo;apparition de nouvelles erreurs dans votre base de code. Les <a href=\"https:\/\/kinsta.com\/fr\/docs\/hebergement-wordpress\/reference-wordpress\/faq-technique\/\">tests automatis\u00e9s<\/a> sont un excellent moyen de v\u00e9rifier votre code apr\u00e8s chaque modification. Cependant, il ne peut vous dire que si quelque chose ne va pas. Si vous ne faites pas de sauvegardes fr\u00e9quentes de votre code, vous finirez par perdre du temps \u00e0 essayer de r\u00e9parer une fonction ou un script qui fonctionnait tr\u00e8s bien auparavant.<\/p>\n<p>C&rsquo;est ici que git joue son r\u00f4le. Avec une strat\u00e9gie de commit appropri\u00e9e, vous pouvez utiliser votre historique git comme syst\u00e8me de sauvegarde pour visualiser votre code tel qu&rsquo;il a \u00e9volu\u00e9 au cours du d\u00e9veloppement. Vous pouvez facilement parcourir vos anciens commits et d\u00e9couvrir la version de la fonction qui fonctionnait bien avant, mais qui g\u00e9n\u00e8re des erreurs apr\u00e8s un changement sans rapport.<\/p>\n<p>Vous pouvez alors restaurer l&rsquo;ancien code ou comparer les deux versions pour d\u00e9terminer ce qui a mal tourn\u00e9. Les <a href=\"https:\/\/kinsta.com\/fr\/blog\/outils-developpement-web\/\">outils de d\u00e9veloppement web<\/a> modernes comme <a href=\"https:\/\/kinsta.com\/fr\/blog\/base-de-connaissances-github\/\">GitHub<\/a> Desktop ou GitKraken vous aident \u00e0 visualiser ces changements c\u00f4te \u00e0 c\u00f4te et \u00e0 trouver rapidement les erreurs.<\/p>\n<p>Une habitude qui peut vous aider \u00e0 faire moins d&rsquo;erreurs consiste \u00e0 effectuer des <a href=\"https:\/\/kinsta.com\/fr\/blog\/outils-revue-code\/\">revues de code<\/a> chaque fois que vous apportez une modification importante \u00e0 votre code. Si vous travaillez en \u00e9quipe, vous pouvez cr\u00e9er une demande de modification et demander \u00e0 un membre de l&rsquo;\u00e9quipe de la r\u00e9viser en profondeur. Cela vous permettra d&rsquo;utiliser une deuxi\u00e8me paire d&rsquo;yeux pour rep\u00e9rer les erreurs qui vous auraient \u00e9chapp\u00e9.<\/p>\n<h2>Meilleures pratiques pour le traitement des erreurs en JavaScript<\/h2>\n<p>Les m\u00e9thodes susmentionn\u00e9es sont ad\u00e9quates pour vous aider \u00e0 concevoir une approche robuste de gestion des erreurs pour votre prochaine application JavaScript. Cependant, il serait pr\u00e9f\u00e9rable de garder quelques \u00e9l\u00e9ments \u00e0 l&rsquo;esprit lors de leur mise en \u0153uvre pour tirer le meilleur parti de votre protection contre les erreurs. Voici quelques conseils pour vous aider.<\/p>\n<h3>1. Utilisez des erreurs personnalis\u00e9es lorsque vous traitez des exceptions op\u00e9rationnelles<\/h3>\n<p>Nous avons pr\u00e9sent\u00e9 les erreurs personnalis\u00e9es au d\u00e9but de ce guide pour vous donner une id\u00e9e de la fa\u00e7on dont vous pouvez personnaliser la gestion des erreurs en fonction du cas particulier de votre application. Il est conseill\u00e9 d&rsquo;utiliser des erreurs personnalis\u00e9es dans la mesure du possible au lieu de la classe g\u00e9n\u00e9rique <code>Error<\/code>, car elle fournit plus d&rsquo;informations contextuelles \u00e0 l&rsquo;environnement appelant sur l&rsquo;erreur.<\/p>\n<p>En outre, les erreurs personnalis\u00e9es vous permettent de mod\u00e9rer la fa\u00e7on dont une erreur est affich\u00e9e \u00e0 l&rsquo;environnement d&rsquo;appel. Cela signifie que vous pouvez choisir de masquer des d\u00e9tails sp\u00e9cifiques ou d&rsquo;afficher des informations suppl\u00e9mentaires sur l&rsquo;erreur comme et quand vous le souhaitez.<\/p>\n<p>Vous pouvez aller jusqu&rsquo;\u00e0 formater le contenu de l&rsquo;erreur en fonction de vos besoins. Cela vous permet de mieux contr\u00f4ler la fa\u00e7on dont l&rsquo;erreur est interpr\u00e9t\u00e9e et trait\u00e9e.<\/p>\n<h3>2. N&rsquo;acceptez aucune exception<\/h3>\n<p>M\u00eame les d\u00e9veloppeurs les plus exp\u00e9riment\u00e9s commettent souvent une erreur de d\u00e9butant : ils consomment des niveaux d&rsquo;exceptions au plus profond de leur code.<\/p>\n<p>Vous pouvez rencontrer des situations o\u00f9 vous avez un morceau de code dont l&rsquo;ex\u00e9cution est facultative. S&rsquo;il fonctionne, tant mieux ; s&rsquo;il ne fonctionne pas, vous n&rsquo;avez pas besoin de faire quoi que ce soit.<\/p>\n<p>Dans ces cas, il est souvent tentant de placer ce code dans un bloc try et d&rsquo;y attacher un bloc catch vide. Cependant, en faisant cela, vous laissez ce morceau de code ouvert \u00e0 la possibilit\u00e9 de provoquer <i>n&rsquo;importe quel<\/i> type d&rsquo;erreur et de s&rsquo;en sortir. Cela peut devenir dangereux si vous avez une base de code importante et de nombreuses occurrences de ces constructions de mauvaise gestion des erreurs.<\/p>\n<p>La meilleure fa\u00e7on de g\u00e9rer les exceptions est de d\u00e9terminer un niveau auquel elles seront toutes trait\u00e9es et de les lever jusqu&rsquo;\u00e0 cet endroit. Ce niveau peut \u00eatre un contr\u00f4leur (dans une application \u00e0 architecture MVC) ou un intergiciel (dans une application traditionnelle orient\u00e9e serveur).<\/p>\n<p>De cette fa\u00e7on, vous saurez o\u00f9 trouver toutes les erreurs survenant dans votre application et choisir comment les r\u00e9soudre, m\u00eame si cela signifie ne rien faire.<\/p>\n<h3>3. Utilisez une strat\u00e9gie centralis\u00e9e pour les journaux et les alertes d&rsquo;erreur<\/h3>\n<p>La journalisation d&rsquo;une erreur fait souvent partie int\u00e9grante de son traitement. Ceux qui ne d\u00e9veloppent pas une strat\u00e9gie centralis\u00e9e pour la journalisation des erreurs peuvent passer \u00e0 c\u00f4t\u00e9 d&rsquo;informations pr\u00e9cieuses sur l&rsquo;utilisation de leur application.<\/p>\n<p>Les journaux d&rsquo;\u00e9v\u00e9nements d&rsquo;une application peuvent vous aider \u00e0 trouver des donn\u00e9es cruciales sur les erreurs et \u00e0 les d\u00e9boguer rapidement. Si vous avez mis en place des m\u00e9canismes d&rsquo;alerte appropri\u00e9s dans votre application, vous pouvez savoir quand une erreur se produit dans votre application avant qu&rsquo;elle n&rsquo;atteigne une grande partie de votre base d&rsquo;utilisateurs.<\/p>\n<p>Il est conseill\u00e9 d&rsquo;utiliser un outil de journalisation pr\u00e9-construit ou d&rsquo;en cr\u00e9er un pour r\u00e9pondre \u00e0 vos besoins. Vous pouvez configurer cet outil pour qu&rsquo;il traite les erreurs en fonction de leur niveau (warning, debug, info, etc.), et certains outils de journalisation vont m\u00eame jusqu&rsquo;\u00e0 envoyer imm\u00e9diatement les journaux \u00e0 des serveurs de journalisation distants. De cette fa\u00e7on, vous pouvez observer comment la logique de votre application se comporte avec des utilisateurs actifs.<\/p>\n<h3>4. Informez les utilisateurs des erreurs de mani\u00e8re appropri\u00e9e<\/h3>\n<p>Un autre bon point \u00e0 garder \u00e0 l&rsquo;esprit lors de la d\u00e9finition de votre strat\u00e9gie de traitement des erreurs est de garder l&rsquo;utilisateur \u00e0 l&rsquo;esprit.<\/p>\n<p>Toutes les erreurs qui interf\u00e8rent avec le fonctionnement normal de votre application doivent pr\u00e9senter une alerte visible \u00e0 l&rsquo;utilisateur pour l&rsquo;informer que quelque chose ne va pas, afin qu&rsquo;il puisse essayer de trouver une solution. Si vous connaissez une solution rapide \u00e0 l&rsquo;erreur, comme r\u00e9essayer une op\u00e9ration ou se d\u00e9connecter et se reconnecter, assurez-vous de le mentionner dans l&rsquo;alerte pour aider \u00e0 r\u00e9parer l&rsquo;exp\u00e9rience de l&rsquo;utilisateur en temps r\u00e9el.<\/p>\n<p>Dans le cas d&rsquo;erreurs qui n&rsquo;interf\u00e8rent pas avec l&rsquo;exp\u00e9rience quotidienne de l&rsquo;utilisateur, vous pouvez envisager de supprimer l&rsquo;alerte et de consigner l&rsquo;erreur sur un serveur distant pour la r\u00e9soudre ult\u00e9rieurement.<\/p>\n<h3>5. Impl\u00e9mentez un middleware (Node.js)<\/h3>\n<p><a href=\"https:\/\/kinsta.com\/fr\/blog\/qu-est-ce-que-node-js\/\">L&rsquo;environnement Node.js<\/a> prend en charge les middlewares pour ajouter des fonctionnalit\u00e9s aux applications serveur. Vous pouvez utiliser cette fonctionnalit\u00e9 pour cr\u00e9er un intergiciel de gestion des erreurs pour votre serveur.<\/p>\n<p>L&rsquo;avantage le plus important de l&rsquo;utilisation d&rsquo;un middleware est que toutes vos erreurs sont trait\u00e9es de mani\u00e8re centralis\u00e9e en un seul endroit. Vous pouvez choisir d&rsquo;activer\/d\u00e9sactiver facilement cette configuration \u00e0 des fins de test.<\/p>\n<p>Voici comment vous pouvez cr\u00e9er un middleware :<\/p>\n<pre><code class=\"language-js\">const logError = err =&gt; {\n    console.log(\"ERROR: \" + String(err))\n}\n\nconst errorLoggerMiddleware = (err, req, res, next) =&gt; {\n    logError(err)\n    next(err)\n}\n\nconst returnErrorMiddleware = (err, req, res, next) =&gt; {\n    res.status(err.statusCode || 500)\n       .send(err.message)\n}\n\nmodule.exports = {\n    logError,\n    errorLoggerMiddleware,\n    returnErrorMiddleware\n}<\/code><\/pre>\n<p>Vous pouvez ensuite utiliser comme ceci ce middleware dans votre application :<\/p>\n<pre><code class=\"language-js\">const { errorLoggerMiddleware, returnErrorMiddleware } = require('.\/errorMiddleware')\n\napp.use(errorLoggerMiddleware)\n\napp.use(returnErrorMiddleware)<\/code><\/pre>\n<p>Vous pouvez maintenant d\u00e9finir une logique personnalis\u00e9e \u00e0 l&rsquo;int\u00e9rieur du middleware pour g\u00e9rer les erreurs de mani\u00e8re appropri\u00e9e. Vous n&rsquo;avez plus \u00e0 vous soucier de l&rsquo;impl\u00e9mentation de constructions individuelles de gestion des erreurs dans l&rsquo;ensemble de votre base de code.<\/p>\n<h3>6. Red\u00e9marrez votre application pour g\u00e9rer les erreurs de programmeur (Node.js)<\/h3>\n<p>Lorsque les applications Node.js rencontrent des erreurs de programmeur, elles ne l\u00e8vent pas n\u00e9cessairement une exception et tentent de fermer l&rsquo;application. Ces erreurs peuvent inclure des probl\u00e8mes r\u00e9sultant d&rsquo;erreurs du programmeur, comme une consommation \u00e9lev\u00e9e du processeur, un gonflement de la m\u00e9moire ou des fuites de m\u00e9moire. La meilleure fa\u00e7on de g\u00e9rer ces probl\u00e8mes est de red\u00e9marrer l&rsquo;application de mani\u00e8re \u00e9l\u00e9gante en la plantant via le mode cluster de Node.js ou un outil unique comme PM2. Cela permet de s&rsquo;assurer que l&rsquo;application ne se plante pas lors d&rsquo;une action de l&rsquo;utilisateur, ce qui pr\u00e9senterait une mauvaise exp\u00e9rience utilisateur.<\/p>\n<h3>7. Catch All Uncaught Exceptions (Node.js)<\/h3>\n<p>Vous ne pouvez jamais \u00eatre s\u00fbr d&rsquo;avoir couvert toutes les erreurs possibles qui peuvent se produire dans votre application. Par cons\u00e9quent, il est essentiel de mettre en \u0153uvre une strat\u00e9gie de repli pour attraper toutes les exceptions non captur\u00e9es de votre application.<\/p>\n<p>Voici comment vous pouvez le faire :<\/p>\n<pre><code class=\"language-js\">process.on('uncaughtException', error =&gt; {\n    console.log(\"ERROR: \" + String(error))\n    \/\/ other handling mechanisms\n})<\/code><\/pre>\n<p>Vous pouvez \u00e9galement identifier si l&rsquo;erreur qui s&rsquo;est produite est une exception standard ou une erreur op\u00e9rationnelle personnalis\u00e9e. En fonction du r\u00e9sultat, vous pouvez quitter le processus et le red\u00e9marrer pour \u00e9viter tout comportement inattendu.<\/p>\n<h3>8. Attrapez tous les rejets de promesses non g\u00e9r\u00e9s (Node.js)<\/h3>\n<p>De la m\u00eame mani\u00e8re que vous ne pouvez jamais couvrir toutes les exceptions possibles, il y a de fortes chances que vous ne puissiez pas traiter tous les rejets de promises possibles. Cependant, contrairement aux exceptions, les rejets de promises ne g\u00e9n\u00e8rent pas d&rsquo;erreurs.<\/p>\n<p>Ainsi, une promise importante qui a \u00e9t\u00e9 rejet\u00e9e peut passer pour un avertissement et laisser votre application ouverte \u00e0 la possibilit\u00e9 d&rsquo;un comportement inattendu. Il est donc crucial de mettre en place un m\u00e9canisme de secours pour g\u00e9rer le rejet des promises.<\/p>\n<p>Voici comment vous pouvez le faire :<\/p>\n<pre><code class=\"language-js\">const promiseRejectionCallback = error =&gt; {\n    console.log(\"PROMISE REJECTED: \" + String(error))\n}\n\nprocess.on('unhandledRejection', callback)<\/code><\/pre>\n\n<h2>R\u00e9sum\u00e9<\/h2>\n<p>Comme tout autre langage de programmation, les erreurs sont assez fr\u00e9quentes et naturelles en JavaScript. Dans certains cas, vous pouvez m\u00eame avoir besoin de lancer des erreurs intentionnellement pour indiquer la bonne r\u00e9ponse \u00e0 vos utilisateurs. Par cons\u00e9quent, il est tr\u00e8s important de comprendre leur anatomie et leurs types.<\/p>\n<p>En outre, vous devez \u00eatre \u00e9quip\u00e9 des bons outils et techniques pour identifier et emp\u00eacher les erreurs de faire tomber votre application.<\/p>\n<p>Dans la plupart des cas, une strat\u00e9gie solide pour g\u00e9rer les erreurs avec une ex\u00e9cution soign\u00e9e est suffisante pour tous les types d&rsquo;applications JavaScript.<\/p>\n<p><em>Y a-t-il d&rsquo;autres erreurs JavaScript que vous n&rsquo;avez toujours pas r\u00e9ussi \u00e0 r\u00e9soudre ? Des techniques pour g\u00e9rer les erreurs JS de mani\u00e8re constructive ? Faites-nous en part dans les commentaires ci-dessous !<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>La loi de Murphy stipule que tout ce qui peut aller mal finira par aller mal. Cette loi s&rsquo;applique un peu trop bien dans le monde &#8230;<\/p>\n","protected":false},"author":238,"featured_media":52930,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[449,535,47],"topic":[978],"class_list":["post-52927","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-development","tag-javascript","tag-webdev","topic-erreurs-javascript"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Un guide d\u00e9finitif de la gestion des erreurs en JavaScript<\/title>\n<meta name=\"description\" content=\"Vous vous heurtez \u00e0 des erreurs dans votre JavaScript ? Nous allons vous montrer comment ma\u00eetriser ces erreurs pour que vous puissiez retourner au d\u00e9veloppement de votre projet.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/fr\/blog\/erreurs-dans-javascript\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Un guide d\u00e9finitif de la gestion des erreurs dans JavaScript\" \/>\n<meta property=\"og:description\" content=\"Vous vous heurtez \u00e0 des erreurs dans votre JavaScript ? Nous allons vous montrer comment ma\u00eetriser ces erreurs pour que vous puissiez retourner au d\u00e9veloppement de votre projet.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/fr\/blog\/erreurs-dans-javascript\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstafrance\/\" \/>\n<meta property=\"article:published_time\" content=\"2022-01-26T09:47:02+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-08-22T10:38:16+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/01\/erreurs-en-javascript.jpeg\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Kumar Harsh\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Vous vous heurtez \u00e0 des erreurs dans votre JavaScript ? Nous allons vous montrer comment ma\u00eetriser ces erreurs pour que vous puissiez retourner au d\u00e9veloppement de votre projet.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/01\/erreurs-en-javascript.jpeg\" \/>\n<meta name=\"twitter:creator\" content=\"@kinsta_fr\" \/>\n<meta name=\"twitter:site\" content=\"@kinsta_fr\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Kumar Harsh\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"35 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/erreurs-dans-javascript\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/erreurs-dans-javascript\/\"},\"author\":{\"name\":\"Kumar Harsh\",\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/person\/3a80efffa9cbb0333cc9c22b754415d9\"},\"headline\":\"Un guide d\u00e9finitif de la gestion des erreurs dans JavaScript\",\"datePublished\":\"2022-01-26T09:47:02+00:00\",\"dateModified\":\"2023-08-22T10:38:16+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/erreurs-dans-javascript\/\"},\"wordCount\":7528,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/erreurs-dans-javascript\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/01\/erreurs-en-javascript.jpeg\",\"keywords\":[\"development\",\"JavaScript\",\"webdev\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/fr\/blog\/erreurs-dans-javascript\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/erreurs-dans-javascript\/\",\"url\":\"https:\/\/kinsta.com\/fr\/blog\/erreurs-dans-javascript\/\",\"name\":\"Un guide d\u00e9finitif de la gestion des erreurs en JavaScript\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/erreurs-dans-javascript\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/erreurs-dans-javascript\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/01\/erreurs-en-javascript.jpeg\",\"datePublished\":\"2022-01-26T09:47:02+00:00\",\"dateModified\":\"2023-08-22T10:38:16+00:00\",\"description\":\"Vous vous heurtez \u00e0 des erreurs dans votre JavaScript ? Nous allons vous montrer comment ma\u00eetriser ces erreurs pour que vous puissiez retourner au d\u00e9veloppement de votre projet.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/erreurs-dans-javascript\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/fr\/blog\/erreurs-dans-javascript\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/erreurs-dans-javascript\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/01\/erreurs-en-javascript.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/01\/erreurs-en-javascript.jpeg\",\"width\":1460,\"height\":730,\"caption\":\"Un guide d\u00e9finitif de la gestion des erreurs en JavaScript\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/erreurs-dans-javascript\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/fr\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Erreurs Javascript\",\"item\":\"https:\/\/kinsta.com\/fr\/sujets\/erreurs-javascript\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Un guide d\u00e9finitif de la gestion des erreurs dans JavaScript\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/fr\/#website\",\"url\":\"https:\/\/kinsta.com\/fr\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Solutions d&#039;h\u00e9bergement premium, rapides et s\u00e9curis\u00e9es\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/fr\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/fr\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/fr\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstafrance\/\",\"https:\/\/x.com\/kinsta_fr\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/person\/3a80efffa9cbb0333cc9c22b754415d9\",\"name\":\"Kumar Harsh\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/de2d8d6273bdcc3dfa2f8270428f95b2?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/de2d8d6273bdcc3dfa2f8270428f95b2?s=96&d=mm&r=g\",\"caption\":\"Kumar Harsh\"},\"description\":\"Kumar is a software developer and a technical author based in India. He specializes in JavaScript and DevOps. You can learn more about his work on his website.\",\"sameAs\":[\"https:\/\/kumarharsh.me\"],\"url\":\"https:\/\/kinsta.com\/fr\/blog\/author\/kumarharsh\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Un guide d\u00e9finitif de la gestion des erreurs en JavaScript","description":"Vous vous heurtez \u00e0 des erreurs dans votre JavaScript ? Nous allons vous montrer comment ma\u00eetriser ces erreurs pour que vous puissiez retourner au d\u00e9veloppement de votre projet.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/fr\/blog\/erreurs-dans-javascript\/","og_locale":"fr_FR","og_type":"article","og_title":"Un guide d\u00e9finitif de la gestion des erreurs dans JavaScript","og_description":"Vous vous heurtez \u00e0 des erreurs dans votre JavaScript ? Nous allons vous montrer comment ma\u00eetriser ces erreurs pour que vous puissiez retourner au d\u00e9veloppement de votre projet.","og_url":"https:\/\/kinsta.com\/fr\/blog\/erreurs-dans-javascript\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstafrance\/","article_published_time":"2022-01-26T09:47:02+00:00","article_modified_time":"2023-08-22T10:38:16+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/01\/erreurs-en-javascript.jpeg","type":"image\/jpeg"}],"author":"Kumar Harsh","twitter_card":"summary_large_image","twitter_description":"Vous vous heurtez \u00e0 des erreurs dans votre JavaScript ? Nous allons vous montrer comment ma\u00eetriser ces erreurs pour que vous puissiez retourner au d\u00e9veloppement de votre projet.","twitter_image":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/01\/erreurs-en-javascript.jpeg","twitter_creator":"@kinsta_fr","twitter_site":"@kinsta_fr","twitter_misc":{"\u00c9crit par":"Kumar Harsh","Dur\u00e9e de lecture estim\u00e9e":"35 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/fr\/blog\/erreurs-dans-javascript\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/fr\/blog\/erreurs-dans-javascript\/"},"author":{"name":"Kumar Harsh","@id":"https:\/\/kinsta.com\/fr\/#\/schema\/person\/3a80efffa9cbb0333cc9c22b754415d9"},"headline":"Un guide d\u00e9finitif de la gestion des erreurs dans JavaScript","datePublished":"2022-01-26T09:47:02+00:00","dateModified":"2023-08-22T10:38:16+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/fr\/blog\/erreurs-dans-javascript\/"},"wordCount":7528,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/fr\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/fr\/blog\/erreurs-dans-javascript\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/01\/erreurs-en-javascript.jpeg","keywords":["development","JavaScript","webdev"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/fr\/blog\/erreurs-dans-javascript\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/fr\/blog\/erreurs-dans-javascript\/","url":"https:\/\/kinsta.com\/fr\/blog\/erreurs-dans-javascript\/","name":"Un guide d\u00e9finitif de la gestion des erreurs en JavaScript","isPartOf":{"@id":"https:\/\/kinsta.com\/fr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/fr\/blog\/erreurs-dans-javascript\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/fr\/blog\/erreurs-dans-javascript\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/01\/erreurs-en-javascript.jpeg","datePublished":"2022-01-26T09:47:02+00:00","dateModified":"2023-08-22T10:38:16+00:00","description":"Vous vous heurtez \u00e0 des erreurs dans votre JavaScript ? Nous allons vous montrer comment ma\u00eetriser ces erreurs pour que vous puissiez retourner au d\u00e9veloppement de votre projet.","breadcrumb":{"@id":"https:\/\/kinsta.com\/fr\/blog\/erreurs-dans-javascript\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/fr\/blog\/erreurs-dans-javascript\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/kinsta.com\/fr\/blog\/erreurs-dans-javascript\/#primaryimage","url":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/01\/erreurs-en-javascript.jpeg","contentUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/01\/erreurs-en-javascript.jpeg","width":1460,"height":730,"caption":"Un guide d\u00e9finitif de la gestion des erreurs en JavaScript"},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/fr\/blog\/erreurs-dans-javascript\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/fr\/"},{"@type":"ListItem","position":2,"name":"Erreurs Javascript","item":"https:\/\/kinsta.com\/fr\/sujets\/erreurs-javascript\/"},{"@type":"ListItem","position":3,"name":"Un guide d\u00e9finitif de la gestion des erreurs dans JavaScript"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/fr\/#website","url":"https:\/\/kinsta.com\/fr\/","name":"Kinsta\u00ae","description":"Solutions d&#039;h\u00e9bergement premium, rapides et s\u00e9curis\u00e9es","publisher":{"@id":"https:\/\/kinsta.com\/fr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/fr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/fr\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/fr\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstafrance\/","https:\/\/x.com\/kinsta_fr","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/fr\/#\/schema\/person\/3a80efffa9cbb0333cc9c22b754415d9","name":"Kumar Harsh","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/kinsta.com\/fr\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/de2d8d6273bdcc3dfa2f8270428f95b2?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/de2d8d6273bdcc3dfa2f8270428f95b2?s=96&d=mm&r=g","caption":"Kumar Harsh"},"description":"Kumar is a software developer and a technical author based in India. He specializes in JavaScript and DevOps. You can learn more about his work on his website.","sameAs":["https:\/\/kumarharsh.me"],"url":"https:\/\/kinsta.com\/fr\/blog\/author\/kumarharsh\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts\/52927","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/users\/238"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/comments?post=52927"}],"version-history":[{"count":13,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts\/52927\/revisions"}],"predecessor-version":[{"id":60402,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts\/52927\/revisions\/60402"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/52927\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/52927\/translations\/it"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/52927\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/52927\/translations\/de"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/52927\/translations\/pt"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/52927\/translations\/es"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/52927\/translations\/nl"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/52927\/translations\/jp"},{"href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/52927\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/media\/52930"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/media?parent=52927"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/tags?post=52927"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/topic?post=52927"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}