La ligne suivante est apparemment mieux écrite en notation à points. J'essaie de nettoyer mon code JavaScript pour le rendre strict. Qu'est-ce que ça veut dire?
if (ie||ns6)
{
var tipobj=document.all? document.all["dhtmltooltip"] : document.getElementById? document.getElementById("dhtmltooltip") : "";
}
J'ai ajouté du contexte à ma ligne de code, au cas où cela aiderait? Je ne connais rien à propos de DOM . Je n'essaye pas de supporter Internet Explorer 4, ce n'est pas mon code et je ne pourrais pas écrire JavaScript moi-même. J'essaie seulement de le rendre conforme et l'outil JSLint dit à propos de cette ligne:
Problème à la ligne 17, caractère 43: ['dhtmltooltip'] est mieux écrit en notation à points.
Il y a deux manières d'accéder aux propriétés d'un objet en JavaScript .
Notation par points
foo.bar.baz
Notation entre crochets
foo['bar']['baz']
Vous utilisez ce dernier dans une partie de votre code.
Douglas Crockford, qui a écrit JSLint (un outil qui donne ce message d'erreur), est d'avis qu'il est préférable d'utiliser la notation par points lorsque cela est possible.
JSLint veut ceci:
var tipobj= document.all ? document.all.dhtmltooltip
: document.getElementById
? document.getElementById("dhtmltooltip")
: "";
Mais, de nos jours, il est tout à fait sûr de supposer que document.getElementById
existe, il a été introduit le DOM Level Core 2 à partir de l’an 2000.
document.all
est mort, sauf si vous essayez de supporter de très vieux navigateurs comme IE4 (12 ans!):
var tipobj = document.getElementById("dhtmltooltip");
Les deux extraits ci-dessus sont un bon exemple du coût complexité de la prise en charge de très anciens navigateurs versions:
Ce qui suit semble être plus convivial.
var tipobj;
if (document.all)
tipobj = document.all["dhtmltooltip"];
else if (document.getElementById)
tipobj = document.getElementById("dhtmltooltip");
else
tipobj = "";
pourquoi ne pas simplement utiliser:
var tipobj = dhtmltooltip.id
Vous ne savez pas pourquoi la version longue est requise sauf si la notation par points ne fonctionne pas dans tous les navigateurs?
Il semble que les seuls problèmes réels concernent le formatage/la syntaxe. Cela devrait fonctionner exactement de la même manière et être conforme à la meilleure pratique de javascript. La principale différence est l'utilisation de la notation javascript à la place de la notation entre crochets.
if (ie || ns6) {
var tipobj = document.all ? document.all.dhtmltooltip : document.getElementById ? document.getElementById("dhtmltooltip") : "";
}
Comme cela a été répondu par Quentin les deux voies sont valables .
Une des raisons pour lesquelles je préfère utiliser elem.bar
au lieu de elem['bar']
est que cela enregistre 3 caractères. Ce n’est certes pas une grande amélioration, mais 3 piqûres gratuites par affectation n’est pas mauvais.
Si la notation par points pose problème, vous pouvez toujours définir l'option/* jslint sub: true */pour la remplacer.
Il utilise la vérification des capacités pour extraire un élément avec l'ID dhtmltooltip
et retombe dans une String
vide s'il n'y a pas de capacité à effectuer la récupération.
UPDATE: Comme d'autres l'ont souligné, le contrôle de getElementById
devrait être le premier, et pourrait probablement être omis, car tout navigateur pouvant être appelé "moderne" à visage droit le possède depuis longtemps.
UPDATE 2 : Avec le nouveau contexte, JSLint se plaint que ce n'est pas document.all.dhtmltooltip
. Vous devriez probablement juste réécrire le tout comme:
var tipobj = document.getElementById("dhtmltooltip");
et en finir avec ça.
Une recherche rapide sur Google indique que document.all
est uniquement utilisé pour prendre en charge IE4. C'est un tableau qui permet au navigateur d'accéder à différentes parties du DOM (voir ici .)
Le code que vous avez posté en premier vérifie si document.all existe. Sinon, tipobj
est défini sur ""
. Au-delà de cela, il n’est pas utile de déchiffrer la ligne que vous avez postée, à moins que vous souhaitiez réellement supporter IE4. Étant donné que très peu de personnes utilisent encore IE4 et que ce code n'est conforme à aucune norme moderne, il suffit de laisser tomber cette ligne et de définir tipobj
à ""
.