2013-07-03 12 views
7

ho letto un articolo su Test for Internet Explorer in JavaScript in cui si afferma che un test rapido è:Veloce modo falsato-veritiero di controllare IE o no?

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

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

Ma uno dei comments ha mostrato un altro modo: (e devo dire, funziona)

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

E così chiedo:

Cosa c'è di così speciale con -[1,] che IE non lo riconosce mentre altri lo fanno?

p.s.

trovato un altro rapido falsy-truthy trucco

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

Si dovrebbe evitare di browser sniffing, quando possibile e invece fortemente preferiscono rilevamento caratteristica di ciò che è necessario fare. –

+3

Forse si dovrebbe concentrare il titolo questione più intorno al '- [1,]' parte, che sembra molto interessante – lifetimes

+1

@AndrewMarshall Ci sono alcuni scenarious dove si ha a che fare con hack particolari. per esempio: v'è un'etichetta che dice "UploadFile" e l'etichetta dovrebbe aprire un fileuploader (nascosto), come se si preme esso. ora - un attributo di Lbael con FOr farà il lavoro. ma si comporta diversamente in chrome vs Ie. e così, ho bisogno di rilevare. ci sono altre alternative, lo so, ma la mia domanda rimane. –

risposta

5

[1,].toString() in IE prima di versioni più recenti è stato 1, che quando prefisso aritmetica - sarebbe uscita Falsey NaN mentre gli altri browser potrebbe tornare [1,].toString() === 1 per un truthy -1.

sua una tecnica fiuto orribile, evitare del tutto e come altri hanno commentato rilevare il supporto per le funzionalità specifiche.