2011-12-21 10 views
5

तेजी से होता है कौन सा:कौन सा तेजी से होता है: अगर (वर == 'मान') या अगर (/value/.test(var))

if (var == 'value') 

या

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

, तो आप पर विचार करना चाहिए जो एक, और अधिक स्पष्ट स्पष्ट है , और सही (मुझे लगता है कि गैर स्ट्रिंग मानों के लिए कुछ अंतर है)। – delnan

+0

वे दो ऑपरेशन एक ही काम नहीं करते हैं। उस कार्य को चुनें जो कार्य के लिए उचित है, और समय-समय पर अनुकूलन न करें। – 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

@ ब्लेंडर: यह ओपी निर्दिष्ट दो चीजों के बराबर है। – chaos

+0

यह वास्तव में "बहुत से नहीं" ... – jondavidjohn

1
नहीं

एक विशाल गति अंतर है, लेकिन पूर्व निश्चित रूप से अधिक पठनीय है और अधिक समझ में आता है ...

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

पूछने एक तेजी से होता है जो करने के बजाय
+0

डांग आप मुझे jsperf करने के लिए हराया! –

+0

यह परीक्षण ओपी के मामले के लिए पूरी तरह से उपयुक्त नहीं है (भले ही हम मान लें कि उसका मतलब '/^मूल्य $ /। परीक्षण (var)') है। समतुल्यता खराब है क्योंकि परीक्षण केस-असंवेदनशील तुलना की है, इसलिए '==' और '===' नामक परीक्षण वास्तव में 'toLowerCase() 'की (बल्कि भारी) लागत को अवशोषित कर रहे हैं। – chaos