Maison > interface Web > js tutoriel > Pourquoi mon code JavaScript échoue-t-il avec `h.className = h.className ? \'erreur\' : \'erreur\'`?

Pourquoi mon code JavaScript échoue-t-il avec `h.className = h.className ? \'erreur\' : \'erreur\'`?

DDD
Libérer: 2024-10-31 21:46:02
original
923 Les gens l'ont consulté

Why Does My JavaScript Code Fail with `h.className  = h.className ? ' error' : 'error'`?

Énigme de priorité des opérateurs : opérateur ternaire et concaténation de JavaScript

L'utilisation de l'opérateur ternaire en JavaScript peut être déroutante, surtout lorsqu'elle est mélangée à d'autres opérateurs. Considérez l'extrait de code suivant :

h.className += h.className ? ' error' : 'error'
Copier après la connexion

Le but de ce code est d'ajouter la chaîne « error » à la propriété className de l'élément HTML « h ». Cependant, le code échoue avec une erreur. Pour comprendre pourquoi, nous devons décortiquer la priorité des opérateurs en JavaScript.

L'opérateur ternaire (?:) a une priorité plus élevée que l'opérateur d'affectation (=). Par conséquent, le code ci-dessus est équivalent à :

h.className = h.className + (h.className ? ' error' : 'error')
Copier après la connexion
Copier après la connexion

Cette interprétation a plus de sens. L'opérateur ternaire vérifie si h.className n'est pas nul ou indéfini (une valeur "véridique"). Si c'est vrai, il ajoute « erreur » à h.className. Sinon, il ajoute « erreur ».

Pour corriger le code d'origine, nous devons ajouter explicitement l'opérateur d'affectation entre parenthèses :

h.className = h.className + (h.className ? ' error' : 'error')
Copier après la connexion
Copier après la connexion

En plaçant l'opérateur d'affectation entre parenthèses, nous remplaçons les règles de priorité et assurez-vous que l'expression ternaire entière est affectée à h.className.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal