che è più veloce:che è più veloce: se (var == 'valore'), o se (/value/.test(var))
if (var == 'value')
o
if (/value/.test(var))
che è più veloce:che è più veloce: se (var == 'valore'), o se (/value/.test(var))
if (var == 'value')
o
if (/value/.test(var))
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
.
Grazie a tutti! I commenti e le risposte hanno aiutato moltissimo. – Upworks
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.
Ma '===' è più rigoroso di '==', quindi non è davvero una sostituzione drop-in. – Blender
@Blender: è molto più simile all'equivalente delle due cose specificate dall'OP. – chaos
In realtà non è "Di molto" ... – jondavidjohn
una differenza di velocità enorme, ma il primo è sicuramente più leggibile e più senso ...
dang mi hai battuto su jsperf! –
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
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
Queste due operazioni non fanno la stessa cosa. Scegli quello che è appropriato per l'attività e non ottimizzarlo prematuramente. – zzzzBov
Guarda http://jsperf.com/regex-vs-string-equals/2 :-) –