2008-10-23 13 views
16

में खराब अभ्यास माना जाता है जैसा कि मैंने कहीं पढ़ा है, इसे उपयोग करने की सलाह दी जाती है! == और === इसके बजाए।तुलनात्मक उदाहरणों का उपयोग क्यों समझाते हुए एक उदाहरण की आवश्यकता है! = और == को जावास्क्रिप्ट

उत्तर

24

"सख्त समानता ऑपरेटर (===) का उपयोग करें जब आप यह जांचना चाहते हैं कि दो ऑपरेंड एक ही प्रकार और मूल्य के हैं। नियमित समानता ऑपरेटर (==) का उपयोग करें यदि आप केवल मूल्य के बारे में सोचते हैं और प्रकार कोई फर्क नहीं पड़ता। उदाहरण के लिए, एक ऑपरेंड नंबर 5 है और दूसरा ऑपरेंड स्ट्रिंग "5" है, मानक समानता ऑपरेटर सच हो जाएगा, लेकिन, क्योंकि वे एक ही प्रकार के नहीं हैं, एक सख्त समानता ऑपरेटर विवरण झूठा है।" http://www.webreference.com/js/column26/stricteq.html

19

यह इस बात पर निर्भर करता है कि आप क्या करने की कोशिश कर रहे हैं।

! == और === दोनों मूल्य और प्रकार की तुलना करें।

5 == "5" 

उपर्युक्त सत्य वापस आ जाएगा। यदि यह आपके इरादे से नहीं है, तो आपको इसके बजाय यह करना चाहिए:

5 === "5" 

वह झूठी वापसी करेगा।

3

उनसे बचने का मूल कारण यह है कि == और != सख्त === और !== ऑपरेटरों की तुलना में अधिक महंगा हैं। यह अन्य प्रमुख समस्या के कारण है, == और != दोनों दो मानों की तुलना की जा रही हैं, तो दोनों स्ट्रिंग रूपांतरण के लिए एक निहित प्रदर्शन करते हैं।

एक तुच्छ उदाहरण है

चेतावनी ({toString: function() {वापसी "1"} == 1)

यह सच का उत्पादन करेगा - के रूप में toString दोनों मूल्यों पर बुलाया जाएगा, और स्ट्रिंग परिणामों की तुलना तब की जाएगी। इस विशेष मामले में यह स्पष्ट रूप से बेतुका है, लेकिन यह वास्तविक दुनिया के मामलों में भी एक समस्या हो सकती है।

+1

प्रदर्शन आपकी चिंताओं का कम से कम है। गैर-प्रकार-जांच संस्करणों के साथ "झूठी सकारात्मक" की संभावना है। –

1

ठीक है, मुझे लगता है कि आपको प्राप्त "सलाह" शायद अच्छी तरह से इरादा है, लेकिन वास्तव में एक पूरी टिप्पणी नहीं है।

जावास्क्रिप्ट गतिशील रूप से टाइप किया गया है, जिसका अर्थ है कि चर फ्लाई पर और बिना कास्टिंग के प्रकार (स्ट्रिंग, संख्या, बूलियन) बदल सकते हैं। पार्सर शिकायत नहीं करेगा अगर आप यह

var int = 3; // Is typeof Number 
int = 'haha!'; // is typeof String 

लेकिन, यह कहना नहीं है कि जावास्क्रिप्ट पूरी तरह से अनजान है। समानता और असमानता ऑपरेटर (== और! =) मूल्यांकन मूल्यों की तुलना करते हैं, और प्रकार को अनदेखा करते हैं।

सख्त समानता और सख्त असमानता ऑपरेटर (=== और! ==) प्रकार के बारे में परवाह करें। तो वे वापसी मूल्य निर्धारित करने से पहले मूल्य और प्रकार की तुलना करेंगे।

अधिक यहाँ

http://devedge-temp.mozilla.org/library/manuals/2000/javascript/1.5/guide/expr.html#1010037

+0

यह एक आम गलतफहमी है। चर "प्रकार बदलना" नहीं है। गतिशील भाषाओं के प्रकार पर मूल्यों की एक संपत्ति है, चर के नहीं। मानों में एक निश्चित प्रकार होता है, और चर के पास – Javier

+0

अच्छा भेद नहीं होता है, जेवियर। स्पष्टीकरण के लिए धन्यवाद! –

4

=== और! == ऑपरेटर्स पढ़ें।

=== और! == ऑपरेटरों का उपयोग करना लगभग हमेशा बेहतर होता है। == और! = ऑपरेटर टाइप जबरन करते हैं। विशेष रूप से, झूठी मानों के विरुद्ध की तुलना करने के लिए == का उपयोग न करें।

इस बारे में अधिक जानकारी के लिए Douglas Crockford's Code Conventions for the JavaScript Programming Language

Totty देखते हैं जवाब से

, या Douglas Crockford's The Elements of JavaScript Style, part two: Idioms है, जो और अधिक विस्तार में truthiness, falsiness और जावास्क्रिप्ट प्रकार बलात्कार की अवधारणाओं दृष्टिकोण पढ़ें।

3

=== और !== का अर्थशास्त्र लगभग हमेशा माध्य है। जब आप एक आदिम से दूसरे की तुलना कर रहे हैं, तो आप यह जांचना चाहते हैं कि उनके पास एक ही मूल्य है या नहीं। जब आप किसी ऑब्जेक्ट की तुलना दूसरे ऑब्जेक्ट की तुलना में कर रहे हैं, तो आप यह जांचना चाहते हैं कि क्या वे एक ही चीज़ का संदर्भ देते हैं या नहीं।

संपादित करें: "गलत" मानों की तुलना करने के बारे में गलत जानकारी हटा दी गई। मैं बस कहूंगा कि == ऑपरेटर undefined से null, "" से 0 से null को अलग नहीं कर सकता है। हाँ, मैं उस आखिरी के बारे में गंभीर हूँ।

0

व्यक्तिगत रूप से, दूसरों ने कहा है कि उत्कृष्ट रूप से मान्य कारणों के अतिरिक्त, मुझे यह जानना पसंद है कि मैं जो तुलना कर रहा हूं वह वही है जो मैं चाहता हूं। मेरे लिए, निम्नलिखित के बीच का अंतर महत्वपूर्ण है, भले ही वे दोनों !myVar:

false === myVar 
'undefined' === typeof myVar 
संबंधित मुद्दे