Que signifie ce qui suit en JavaScript?Quelle est la signification de ceci ... "var evt = event || window.event;"
var evt=event||window.event;
Que signifie ce qui suit en JavaScript?Quelle est la signification de ceci ... "var evt = event || window.event;"
var evt=event||window.event;
Cela signifie que la evt
variable est affectée à la valeur de event
ou si event
est définie, il est attribué la valeur de window.event
. Comment cela fonctionne-t-il? En javascript, les opérateurs booléens n'évaluent pas true ou false mais évaluent plutôt la valeur du dernier objet qui n'est pas falsifié * ou la valeur de la falsification. L'instruction évalue d'abord l'expression event || window.event
. Si event
est vrai alors l'expression n'a pas besoin d'être évaluée plus loin car un OR n'a besoin que d'un membre pour être vrai. Par conséquent, la valeur event
est renvoyée. Si event
est falsifié, le côté droit de l'opérateur OR doit être évalué pour déterminer si le résultat est faux. Dans ce cas, si window.event
n'est pas falsifié, sa valeur est renvoyée.
Il s'agit d'un idiome très courant pour obtenir l'objet événement à partir des gestionnaires d'événements. Sur les navigateurs conformes aux normes, l'objet événement est transmis en tant que premier paramètre au gestionnaire d'événements. Mais sur IE, l'objet événement est une variable globale. Et pour des raisons historiques, toutes les variables globales sont membres de l'objet window.
Ainsi, le code devrait ressembler à ceci:
element.onclick = function (event) {
var evt = event || // use the value of event if available or
window.event;// if not assume it's IE and use window.event
/* ... */
}
Note: * Les valeurs falsy en javascript sont: false, 0, null et non défini.
+1 pour .. «raisons historiques»: deux mots pour définir toute la compatibilité Problèmes, résulter des occurrences de bibliothèque cross-browser (comme '$', 'Prototype', 'YUI' etc.) et pourquoi la vie est alors plus facile et pourquoi la vie est plus compliquée. –
Le code est un hack car Microsoft a décidé de placer ses événements dans le global window.event
au lieu de le passer en paramètre à la fonction d'événement.
Ainsi, ce code va tenter de mettre evt
à l'événement passé dans (qui fonctionnera pour les navigateurs non Microsoft) et, si cela se révèle être null
(comme ce sera pour les navigateurs Microsoft), il alors attrapez-le du global. À partir de là, votre fonction peut simplement utiliser evt
sans tenir compte des différences de navigateur (enfin, au moins celles relatives aux événements).
var evt=event||window.event;
Le code ci-dessus est un raccourci à une ELSE IF, et est équivalent au code ci-dessous:
var evt = "nothing valuable yet";
if (event) {
evt = event;
} else {
evt = window.event;
}
Deux IF raccourcis AUTRE en Javascript:
var resultIsTrue = true || false; // if first value is true, return first value
var resultIsFalse = true && false; // if first value is true, return second value
En relation: [ReferenceError: l'erreur d'événement n'est pas définie dans Firefox] (http://stackoverflow.com/q/20522887/1048572) et [Pourquoi la variable 'event' est-elle disponible même si elle n'est pas passée en paramètre?] (Http://stackoverflow.com/q/33167092/1048572) – Bergi