O julgamento mais curto do IE no passado foi feito pelo recurso que o IE não suporta guias verticais.
A cópia do código é a seguinte:
var ie =!+"/v1";
São necessários apenas 7bytes! Veja este artigo, "32 bytes, Ehr ... 9, Ehr ... 7 !!! Sabe se o seu navegador é IE", conta a história de como os estrangeiros reduziram o julgamento do IE de 32 bytes para 7 bytes! Mas esse registro foi quebrado por um russo em 8 de janeiro deste ano. Agora, são necessários apenas 6 bytes! Ele usa a diferença entre o IE e os navegadores padrão em matrizes de processamento. Para navegadores padrão, se o último caractere da matriz for uma vírgula, o mecanismo JS removerá automaticamente.
A cópia do código é a seguinte:
var ie =!-[1,];
Esse código foi chamado de código de julgamento mais curto do mundo antes do IE9. Embora o código seja curto, ele contém muito conhecimento básico de JavaScript. Neste exemplo, quando o código é executado, o método tostring () da matriz será chamado primeiro. Execute [1,]. ToString () em IE6, 7, 8 receberá "1". Então a expressão se torna!-"1". Em seguida, tente converter "1" em um tipo numérico para obter a NAN e, em seguida, pegue uma NAN negativa para obter o valor ainda nan. Finalmente execute! Nan retorna verdadeiro. O seguinte é revisar o conhecimento JavaScript envolvido no código, decompondo esta declaração:
1. A diferença de análise literal da matriz do navegador
[1,] significa que uma matriz é definida usando a matriz de JavaScript literal. No IE6, 7, 8, existem dois elementos da matriz, e os valores na matriz são 1, indefinidos. Em um navegador padrão, o indefinido após o primeiro elemento é ignorado e a matriz contém apenas um elemento 1.
2. O método ToString () da matriz
Ao chamar o método ToString () do objeto Array, o método ToString () será chamado em cada elemento na matriz. Se o valor do elemento for nulo ou indefinido, uma sequência vazia será retornada e o valor de cada item será escrito em uma string separada por vírgulas ",".
3. Operador menos
Ao usar o operador unário menos, se o número da operação for um tipo numérico, ele negará diretamente o número da operação. Caso contrário, você tentará primeiro converter o número da operação em um tipo numérico. O processo de conversão é equivalente à execução da função numérica e, em seguida, negativo o resultado.
4. Não-operação lógica
Retorna true se o operando for nan, nulo ou indefinido ao executar não operações lógicas.
JavaScript pode ser escrito assim:
A cópia do código é a seguinte:
var ie =!-[1,];
alerta (ou seja);
Se julgarmos de uma perspectiva fora da AE, podemos economizar um pouco, porque quando somos compatíveis, na maioria das vezes, ou seja, a construção de partidas não iniciantes. var notie = -[1,];
A cópia do código é a seguinte:
if (-[1,]) {
alerta ("Este não é o navegador do IE!");
}outro{
alerta ("Este é o navegador do IE!");
}
Do conhecimento acima, podemos obter que o código var ie =!-[1,]; é realmente equivalente a var ie =! (-Número ([1,]. ToString ())); O valor no IE6/7/8 é verdadeiro.
Porque o IE6/7/8 não ignorará o bug [1,]. ToString (), isto é, o que você recebe é "1"; e -Number ([1,]. ToString ()) é -Number ("1") O resultado é NAN; Então! (-Número ([1,]. ToString ())) é! (NAN) é verdadeiro. A premissa de tudo é que o IE6/7/8 tem o bug [1,].
Recentemente, descobri que um amigo usou isso para levar os usuários a atualizar seu navegador
<Cript>!-[1,] && alert ('Você está usando a versão IE6-8 do navegador. Recomenda-se usar o Chrome, Firefox, IE9+ para navegar com/n/n!'); </script>