2011-12-21 5 views
5

高速です::(VAR == '値')であればOR(/value/.test(var)の場合)

if (var == 'value') 

または

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

の代わりに高速である1尋ねる、あなたは、明確に、より明白である1考慮すべきです、そして正しい(私は文字列以外の値にいくつかの違いがあると仮定します)。 – delnan

+0

これらの2つの操作は同じことをしません。タスクに適したものを選択し、時期尚早に最適化しないでください。 – zzzzBov

+0

それを見てくださいhttp://jsperf.com/regex-vs-string-equals/2 :-) –

答えて

6

if (a == 'b')は、if (/b/.test(a))よりも高速ですが、同じ呼び出しではありません。

'something' == 'some'falseであり、/some/.test('something')trueである。

一方から他方に変更する唯一の理由は、もう一方の方が適切な場合です。速度が心配な方は、スクリプトのベンチマークを行い、特定のifステートメントについて心配する前にボトルネックがどこにあるかを確認してください。

+0

ありがとうございました!コメントと返信はすごく助けになりました。 – Upworks

8

if(var == 'value')。たくさん。しかし、あなたが本当に速くしたい場合は、if(var === 'value')を実行してください。厳格な等価性は、型強制の等価性よりもはるかに少ない作業をします。

+1

しかし、 '==='は '=='よりも厳密なので、実際はドロップイン置換ではありません。 – Blender

+0

@Blender:それは、OPが指定した2つのものよりはるかに近いです。 – chaos

+0

それは実際には「たくさん」ではありません... – jondavidjohn

1

ない巨大な速度差が、前者は間違いなくより読みやすく、より理にかなって...

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

+0

あなたは私をjsperfに打つ! –

+0

そのテストはOPのケースに完全には適切ではありません(たとえ彼が '/^value $ /。test(var)'を意味していたとしても)。大文字と小文字を区別しない比較のため、等価性は不十分です。したがって、 '=='と '==='のテストは、実際には 'toLowerCase()'の(かなり重い)コストを吸収しています。 – chaos