2011-12-21 15 views
5

che è più veloce:che è più veloce: se (var == 'valore'), o se (/value/.test(var))

if (var == 'value') 

o

if (/value/.test(var)) 
+3

Invece di chiedere che uno è più veloce, si dovrebbe considerare che uno è più chiara, più evidente e corretto (presumo che ci sia qualche differenza per i valori non stringa). – delnan

+0

Queste due operazioni non fanno la stessa cosa. Scegli quello che è appropriato per l'attività e non ottimizzarlo prematuramente. – zzzzBov

+0

Guarda http://jsperf.com/regex-vs-string-equals/2 :-) –

risposta

6

if (a == 'b') sarà più veloce di if (/b/.test(a)), ma non sono chiamate identiche.

'something' == 'some' è false, mentre /some/.test('something') è true.

L'unico motivo per passare da uno all'altro sarebbe se l'altro è più appropriato. Se sei preoccupato per la velocità, confronta il tuo script e controlla dove sono i colli di bottiglia prima di preoccuparti di una specifica istruzione if.

+0

Grazie a tutti! I commenti e le risposte hanno aiutato moltissimo. – Upworks

8

if(var == 'value'). Di molto. Ma se vuoi davvero veloce, fai if(var === 'value'). L'equivalenza rigorosa ha molto meno lavoro da fare rispetto all'equivalenza forzata.

+1

Ma '===' è più rigoroso di '==', quindi non è davvero una sostituzione drop-in. – Blender

+0

@Blender: è molto più simile all'equivalente delle due cose specificate dall'OP. – chaos

+0

In realtà non è "Di molto" ... – jondavidjohn

1
Non

una differenza di velocità enorme, ma il primo è sicuramente più leggibile e più senso ...

http://jsperf.com/string-vs-regex-test/2

+0

dang mi hai battuto su jsperf! –

+0

Questo test non è del tutto appropriato per il caso dell'OP (anche se presumiamo che intendesse '/^value $ /. Test (var)'). L'equivalenza fa male perché il test è di confronto case-insensitive, quindi i test che sono nominalmente di '==' e '===' stanno effettivamente assorbendo il costo (piuttosto pesante) di 'toLowerCase()'. – chaos

Problemi correlati