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
872 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!

source:php.cn
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