HTML - Navigateurs

Dossier : Opéra 3.50, spécificités ou erreurs d'interprétations.

Bug de isNaN(), spécificité de for, inactivité de sort()


Opéra 3.50 ou plus. Fonction isNaN() incompatible. haut de page

La fonction isNaN(), qui fait parti du langage de base du Javascript, permet de savoir si la valeur donnée en paramètre n'est pas un nombre : c'est-à-dire, si c'est une chaîne de caractères ou la valeur "NaN" (Not a Numeric). Elle retourne une valeur booléen (true ou false).

Afin de vous montrer le problème d'incompatibilité de cette fonction, je vous propose ce petit programme de teste.

<Script language="JavaScript"><!--
d=document; ln="<br>";
d.write("isNaN('co')=",isNaN('co'),ln);
d.write("isNaN('c2')=",isNaN('c2'),ln);
d.write("isNaN('2g')=",isNaN('2g'),ln);
d.write("isNaN('83')=",isNaN('83'),ln);
d.write("isNaN(1/0=",1/0,")=",isNaN(1/0),ln);
d.write("isNaN(NaN=",NaN,")=",isNaN(NaN),ln);
//--></Script>

Les résultats sont les suivants :

IE4.x ou plus. NetScape 4.06 ou plus.   Opéra 3.50 ou plus.
isNaN('co')=true
isNaN('c2')=true
isNaN('2g')=true
isNaN('83')=false
isNaN(1/0=Infinity)=false
isNaN(NaN=NaN)=true
  isNaN('co')=false
isNaN('c2')=false
isNaN('2g')=false
isNaN('83')=false
isNaN(1/0=NaN)=true
isNaN(NaN=null)=false

Nous voyons bien qu'Opéra renvoie des valeurs différentes ; en effet, seule "isNaN(1/0)" est vrai.

Il est intéressent, aussi, de remarquer que pour Opéra, "1/0" et "NaN" vaut "NaN" et "null", et pour les autres, "Infinity"  et "NaN".


Opéra 3.50 ou plus. Plantage dans for haut de page

La syntaxe de la boucle "for" et normalement la suivante :

for ([var] lst_init ; lst_test ; lst_op) code;


lst_init est une liste d'initialisation de variable. Les éléments de la liste sont séparés par une virgule.
lst_text est une liste de test devant tous être vérifiés pour que la boucle continue
lst_op est une liste d'opération effectués à la fin de la boucle, avant le test.

<Script language="JavaScript"><!--
for (t=0,n=0;t<3,n>-2;t=t+1,n--)
{document.write("t=",t," n=",n,"<br>");}
//--></Script>

IE4.x ou plus. NetScape 4.06 ou plus. Voici un exemple de programme qui fonctionne sur IE et NS, mais pas sous Opéra.

<Script language="JavaScript"><!--
n=0;
for (t=0;(t<3)&&(n>-2);t=t+1,n--)
{document.write("t=",t," n=",n,"<br>");}
//--></Script>

Opéra 3.50 ou plus. Opéra n'accepte pas de liste dans les parties d'initialisation et de test ; nous devons donc effectué l'initialisation des variables auparavant, et effectuer les tests supplémentaires en une seul expression.


Opéra 3.50 ou plus. Méthode sort() inactif haut de page

La méthode sort(), de l'objet Array, nous permet de trier un tableau : voir Javascript - Array -.sort().

<Script language="JavaScript"><!--
document.write(Array().sort(),'<hr>');

function trie(a,b) {return (a < b)?1:-1;}

var Tab = new Array('B','A','C');

document.write(Tab,"<hr>");
document.write(Tab.sort(),"<hr>"); //plante
document.write(Tab.sort(trie)); //plante
//--></Script>

Opéra 3.50 ou plus. La méthode sort() ne semble pas exister sous Opéra. Même si parfois elle n'a aucun effet, la plus part du temps sont appel plante le navigateur (fatal error). Je vous invite à effectuer le trie de vos tableaux vous même.


Dernière mise à jour : dimanche 06 janvier 2008