2013-07-03 11 views
7

czytałem artykuł o Test for Internet Explorer in JavaScript który stanowi, że szybkie testy to:Szybki, falsyfikowany sposób sprawdzania IE czy nie?

var isMSIE = /*@[email protected]*/0; 

if (isMSIE) { 
    // do IE-specific things 
} else { 
    // do non IE-specific things 
} 

Ale jeden z comments pokazał inny sposób: (i muszę powiedzieć, że działa)

if (-[1,]) { 
// do non IE-specific things 
} else { 
// do IE-specific things 
} 

A więc pytam:

Co jest tak wyjątkowego w przypadku -[1,], że IE nie rozpoznaje go, a inni?

p.s.

znaleźć inny szybki falsy-truthy sztuczkę

IE='\v'=='v' 
+10

Powinieneś unikać podsłuchiwania przeglądarki, gdy tylko jest to możliwe, a zamiast tego zdecydowanie wolisz wykrywanie funkcji tego, co musisz zrobić. –

+3

Być może powinieneś skupić się na tytule pytania bardziej wokół części '- [1,]', która wydaje się całkiem interesująca. – lifetimes

+1

@AndrewMarshall Jest kilka scenariuszy, w których musisz poradzić sobie ze specjalnymi atakami. na przykład: jest etykieta z napisem "uploadfile", a etykieta powinna otworzyć plik ładujący (ukryty) tak, jakbyś go nacisnął. teraz - zadanie wykona Lbael z atrybutem FOr. ale zachowuje się inaczej w chrome vs Ie. i tak muszę wykryć. istnieje inna alternatywa, wiem, ale wciąż moje pytanie pozostaje. –

Odpowiedz

5

[1,].toString() w IE przed ostatnimi wersjami był 1, który po prefiksem arytmetyka - byłoby wyjście falsey NaN natomiast innych przeglądarek wróci [1,].toString() === 1 dla truthy -1.

To okropna technika wąchania, unikaj jej w całości i jak zauważyli inni, wykryj obsługę określonych funkcji.

Powiązane problemy