El juicio más corto del IE en el pasado fue realizado por la característica de que IE no admite pestañas verticales.
La copia del código es la siguiente:
var ie =!+"/v1";
¡Solo se necesitan 7 bytes! Vea este artículo, "32 bytes, ehr ... 9, ehr ... 7 !!! para saber si su navegador es, es decir", cuenta la historia de cómo los extranjeros redujeron el juicio de IE de 32 bytes a 7 bytes! Pero este récord fue roto por un ruso el 8 de enero de este año. ¡Ahora solo toma 6 bytes! Utiliza la diferencia entre IE y los navegadores estándar en las matrices de procesamiento. Para los navegadores estándar, si el último personaje en la matriz es una coma, el motor JS lo eliminará automáticamente.
La copia del código es la siguiente:
var ie =!-[1,];
Este código se llamaba el código de juicio de IE más corto del mundo antes de IE9. Aunque el código es corto, contiene muchos conocimientos básicos de JavaScript. En este ejemplo, cuando se ejecuta el código, el método toString () de la matriz se llamará primero. Ejecutar [1,]. ToString () en IE6, 7, 8 obtendrán "1". ¡Entonces la expresión se convierte en!-"1". Luego intente convertir "1, en un tipo numérico para obtener NAN, y luego tome una NAN negativa para obtener el valor todavía Nan. Finalmente ejecutar! Nan regresa verdadero. Lo siguiente es revisar el conocimiento de JavaScript involucrado en el código descomponiendo esta declaración:
1. Diferencia de análisis literal de la matriz del navegador
[1,] significa que una matriz se define usando la matriz de JavaScript literal. En IE6, 7, 8, hay dos elementos de la matriz, y los valores en la matriz son 1, indefinidos. En un navegador estándar, el indefinido después del primer elemento se ignora, y la matriz contiene solo un elemento 1.
2. El método toString () de la matriz
Al llamar al método toString () del objeto de matriz, se llamará al método toString () en cada elemento en la matriz. Si el valor del elemento es nulo o indefinido, se devolverá una cadena vacía, y el valor de cada elemento se deletreará en una cadena separada por comas ",".
3. One-Aity Minus Operator
Cuando se usa el operador Minus unario, si el número de operación es de tipo numérico, negará directamente el número de operación. De lo contrario, primero intentará convertir el número de operación a un tipo numérico. El proceso de conversión es equivalente a ejecutar la función de número y luego negativo el resultado.
4. No operación lógica
Devuelve verdadero si el operando es Nan, NULL o indefinido al realizar no operaciones lógicas.
JavaScript se puede escribir así:
La copia del código es la siguiente:
var ie =!-[1,];
alerta (es decir);
Si juzgamos desde una perspectiva no II, podemos ahorrar un bit, porque cuando somos compatibles, la mayoría de las veces, es decir, y no se inician la construcción. var noie = -[1,];
La copia del código es la siguiente:
if (-[1,]) {
alerta ("¡Este no es un navegador de IE!");
}demás{
alerta ("¡Este es un navegador, es decir!");
}
Según el conocimiento anterior, podemos obtener que el código var ie =!-[1,]; en realidad es equivalente a var ie =! (-número ([1,]. toString ())); El valor en IE6/7/8 es cierto.
Porque IE6/7/8 no ignorará el error [1,]. ToString (), es decir, lo que obtienes es "1"; y -number ([1,]. ToString ()) es -number ("1,") El resultado es nan; Entonces! (-Número ([1,]. ToString ())) es! (Nan) es verdadero. La premisa de todo es que IE6/7/8 tiene el error [1,]. ToString () => "1", mientras que otros navegadores (que deberían ser la mayoría de ellos ~~) son [1,]. ToString () => "1".
Recientemente descubrí que un amigo usaba esto para pedir a los usuarios que actualicen su navegador
<script>!-[1,] && alert ('Estás usando la versión IE6-8 del navegador. Se recomienda usar Chrome, Firefox, IE9+ para navegar con/n/n!'); </script>