Le jugement le plus court dans le passé a été fait par la fonctionnalité que IE ne prend pas en charge les onglets verticaux.
La copie de code est la suivante:
var ie =! + "/ v1";
Seulement 7 bytes sont nécessaires! Voir cet article, "32 octets, ehr ... 9, ehr ... 7 !!! Pour savoir si votre navigateur est IE", raconte comment les étrangers ont réduit le jugement de IE de 32 octets à 7 octets! Mais ce record a été battu par un russe le 8 janvier de cette année. Maintenant, cela ne prend que 6 octets! Il utilise la différence entre IE et les navigateurs standard dans le traitement des tableaux. Pour les navigateurs standard, si le dernier caractère du tableau est une virgule, le moteur JS le supprime automatiquement.
La copie de code est la suivante:
var ie =! - [1,];
Ce code a été appelé le code de jugement le plus court au monde avant IE9. Bien que le code soit court, il contient beaucoup de connaissances JavaScript de base. Dans cet exemple, lorsque le code est exécuté, la méthode toString () du tableau sera appelée en premier. Exécuter [1,]. ToString () dans IE6, 7, 8 obtiendra "1". Alors l'expression devient! - "1". Essayez ensuite de convertir "1", en un type numérique pour obtenir NAN, puis prenez un NAN négatif pour obtenir la valeur toujours NAN. Enfin exécuter! Nan renvoie true. Ce qui suit consiste à revoir les connaissances JavaScript impliquées dans le code en décomposant cette déclaration:
1. La différence d'analyse littérale du tableau du navigateur
[1,] signifie qu'un tableau est défini en utilisant le littéral du tableau de JavaScript. Dans IE6, 7, 8, il y a deux éléments du tableau, et les valeurs dans le tableau sont 1, indéfinies. Dans un navigateur standard, l'indéfini après l'ignorance du premier élément, et le tableau ne contient qu'un seul élément 1.
2. La méthode toString () du tableau
Lors de l'appel de la méthode toString () de l'objet de tableau, la méthode toString () sera appelée sur chaque élément du tableau. Si la valeur de l'élément est nul ou non définie, une chaîne vide sera renvoyée et la valeur de chaque élément sera orthographiée en une chaîne séparée par des virgules ",".
3. Opérateur moins à parts
Lorsque vous utilisez l'opérateur UNARY MINUS, si le numéro de fonctionnement est un type numérique, il annulera directement le numéro de fonctionnement. Sinon, vous allez d'abord essayer de convertir le numéro d'opération en un type numérique. Le processus de conversion est équivalent à l'exécution de la fonction numérique, puis négatif le résultat.
4. Non-opération logique
Renvoie True si l'opérande est nan, nul ou non défini lors de l'exécution de non-opérations logiques.
JavaScript peut être écrit comme ceci:
La copie de code est la suivante:
var ie =! - [1,];
alerte (c'est-à-dire);
Si nous jugeons du point de vue non-IE, nous pouvons économiser un peu, car lorsque nous sommes compatibles, la plupart du temps, IE et la construction non IE Start. var notie = - [1,];
La copie de code est la suivante:
if (- [1,]) {
alert ("Ce n'est pas un navigateur IE!");
}autre{
alert ("Ceci est le navigateur IE!");
}
D'après les connaissances ci-dessus, nous pouvons obtenir que le code var ie =! - [1,]; est en fait équivalent à var ie =! (- nombre ([1,]. toString ())); La valeur dans IE6 / 7/8 est vraie.
Parce que IE6 / 7/8 n'ignorera pas le bug [1,]. ToString (), c'est-à-dire ce que vous obtenez est "1"; et -number ([1,]. toString ()) est -number ("1,,, le résultat est nan; alors! (- Numéro ([1,]. ToString ())) est! (Nan) est vrai. La prémisse de tout est que IE6 / 7/8 a le bug [1,]. ToString () => "1,, tandis que les autres navigateurs (qui devraient être la plupart d'entre eux ~~) sont [1,]. ToString () =>" 1 ".
Récemment, j'ai trouvé qu'un ami l'a utilisé pour inciter les utilisateurs à mettre à niveau leur navigateur
<Script>! - [1,] && alert ('Vous utilisez la version IE6-8 du navigateur. Il est recommandé d'utiliser Chrome, Firefox, IE9 + pour parcourir avec / n / n!'); </cript>