में खराब अभ्यास माना जाता है जैसा कि मैंने कहीं पढ़ा है, इसे उपयोग करने की सलाह दी जाती है! == और === इसके बजाए।तुलनात्मक उदाहरणों का उपयोग क्यों समझाते हुए एक उदाहरण की आवश्यकता है! = और == को जावास्क्रिप्ट
उत्तर
"सख्त समानता ऑपरेटर (===) का उपयोग करें जब आप यह जांचना चाहते हैं कि दो ऑपरेंड एक ही प्रकार और मूल्य के हैं। नियमित समानता ऑपरेटर (==) का उपयोग करें यदि आप केवल मूल्य के बारे में सोचते हैं और प्रकार कोई फर्क नहीं पड़ता। उदाहरण के लिए, एक ऑपरेंड नंबर 5 है और दूसरा ऑपरेंड स्ट्रिंग "5" है, मानक समानता ऑपरेटर सच हो जाएगा, लेकिन, क्योंकि वे एक ही प्रकार के नहीं हैं, एक सख्त समानता ऑपरेटर विवरण झूठा है।" http://www.webreference.com/js/column26/stricteq.html
यह इस बात पर निर्भर करता है कि आप क्या करने की कोशिश कर रहे हैं।
! == और === दोनों मूल्य और प्रकार की तुलना करें।
5 == "5"
उपर्युक्त सत्य वापस आ जाएगा। यदि यह आपके इरादे से नहीं है, तो आपको इसके बजाय यह करना चाहिए:
5 === "5"
वह झूठी वापसी करेगा।
उनसे बचने का मूल कारण यह है कि ==
और !=
सख्त ===
और !==
ऑपरेटरों की तुलना में अधिक महंगा हैं। यह अन्य प्रमुख समस्या के कारण है, ==
और !=
दोनों दो मानों की तुलना की जा रही हैं, तो दोनों स्ट्रिंग रूपांतरण के लिए एक निहित प्रदर्शन करते हैं।
एक तुच्छ उदाहरण है
चेतावनी ({toString: function() {वापसी "1"} == 1)
यह सच का उत्पादन करेगा - के रूप में toString दोनों मूल्यों पर बुलाया जाएगा, और स्ट्रिंग परिणामों की तुलना तब की जाएगी। इस विशेष मामले में यह स्पष्ट रूप से बेतुका है, लेकिन यह वास्तविक दुनिया के मामलों में भी एक समस्या हो सकती है।
ठीक है, मुझे लगता है कि आपको प्राप्त "सलाह" शायद अच्छी तरह से इरादा है, लेकिन वास्तव में एक पूरी टिप्पणी नहीं है।
जावास्क्रिप्ट गतिशील रूप से टाइप किया गया है, जिसका अर्थ है कि चर फ्लाई पर और बिना कास्टिंग के प्रकार (स्ट्रिंग, संख्या, बूलियन) बदल सकते हैं। पार्सर शिकायत नहीं करेगा अगर आप यह
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
यह एक आम गलतफहमी है। चर "प्रकार बदलना" नहीं है। गतिशील भाषाओं के प्रकार पर मूल्यों की एक संपत्ति है, चर के नहीं। मानों में एक निश्चित प्रकार होता है, और चर के पास – Javier
अच्छा भेद नहीं होता है, जेवियर। स्पष्टीकरण के लिए धन्यवाद! –
इस बारे में अधिक जानकारी के लिए Douglas Crockford's Code Conventions for the JavaScript Programming Language=== और! == ऑपरेटर्स पढ़ें।
=== और! == ऑपरेटरों का उपयोग करना लगभग हमेशा बेहतर होता है। == और! = ऑपरेटर टाइप जबरन करते हैं। विशेष रूप से, झूठी मानों के विरुद्ध की तुलना करने के लिए == का उपयोग न करें।
Totty देखते हैं जवाब से
, या Douglas Crockford's The Elements of JavaScript Style, part two: Idioms है, जो और अधिक विस्तार में truthiness, falsiness और जावास्क्रिप्ट प्रकार बलात्कार की अवधारणाओं दृष्टिकोण पढ़ें।
===
और !==
का अर्थशास्त्र लगभग हमेशा माध्य है। जब आप एक आदिम से दूसरे की तुलना कर रहे हैं, तो आप यह जांचना चाहते हैं कि उनके पास एक ही मूल्य है या नहीं। जब आप किसी ऑब्जेक्ट की तुलना दूसरे ऑब्जेक्ट की तुलना में कर रहे हैं, तो आप यह जांचना चाहते हैं कि क्या वे एक ही चीज़ का संदर्भ देते हैं या नहीं।
संपादित करें: "गलत" मानों की तुलना करने के बारे में गलत जानकारी हटा दी गई। मैं बस कहूंगा कि ==
ऑपरेटर undefined
से null
, ""
से 0
से null
को अलग नहीं कर सकता है। हाँ, मैं उस आखिरी के बारे में गंभीर हूँ।
व्यक्तिगत रूप से, दूसरों ने कहा है कि उत्कृष्ट रूप से मान्य कारणों के अतिरिक्त, मुझे यह जानना पसंद है कि मैं जो तुलना कर रहा हूं वह वही है जो मैं चाहता हूं। मेरे लिए, निम्नलिखित के बीच का अंतर महत्वपूर्ण है, भले ही वे दोनों !myVar
:
false === myVar
'undefined' === typeof myVar
- 1. गैर-प्रोग्रामर को एसवीएन समझाते हुए
- 2. प्रोग्रामर को नेस्टेड सरणी समझाते हुए
- 3. क्या "जेनेरिक" प्रोग्रामर को लिस्प मैक्रोज़ समझाते हुए एक सरल उदाहरण है?
- 4. उदाहरण की आवश्यकता है: ggplot2
- 5. एंटी-एजीआईएल पैटर्न समझाते हुए लेख
- 6. मुझे और अधिक निपुण व्यावहारिक उदाहरणों की आवश्यकता है
- 7. क्यों "{} \" की आवश्यकता है?
- 8. का उपयोग करते हुए की जगह और regex, जावास्क्रिप्ट
- 9. क्यों #को printf() का उपयोग करने की आवश्यकता नहीं है?
- 10. एसबीटी 0.11 रन कार्य उदाहरणों की आवश्यकता
- 11. ट्विस्ट की आवश्यकता क्यों है?
- 12. उदाहरण का उपयोग करते हुए क्रिप्टो ++
- 13. "बिलकुल" उदाहरणों की संख्या "सक्रिय" उदाहरणों की संख्या से कहीं अधिक क्यों है?
- 14. मुझे एक लोकप्रिय ढांचे का उपयोग करने की आवश्यकता क्यों है?
- 15. फ़ोरट्रान पॉइंटर को एक लक्ष्य की आवश्यकता क्यों होती है?
- 16. जावास्क्रिप्ट में var {VariableName} = आवश्यकता ('') का उपयोग क्यों करें?
- 17. सत्र का उपयोग करते समय session_start की आवश्यकता क्यों है?
- 18. वेब को HTTP की आवश्यकता क्यों है?
- 19. प्रिंटवाइटर की आवश्यकता क्यों है?
- 20. जावास्क्रिप्ट का उपयोग करते हुए "इस =" समारोह
- 21. क्यों वेक्टर की आवश्यकता है?
- 22. हमें लक्ष्य नामस्थान की आवश्यकता क्यों है?
- 23. व्यापक सी # सिस्टम की आवश्यकता है। थ्रेडिंग। उदाहरण उदाहरण
- 24. हाइबरनेट: एक AnnotationConfiguration उदाहरण का उपयोग करने की आवश्यकता है ... त्रुटि
- 25. एक उदाहरण की आवश्यकता है कि एसिंक HTTP अनुरोध
- 26. एक ड्रूपल फॉर्म में फ़ील्ड संग्रह को जोड़ने पर एक उदाहरण की आवश्यकता है - ड्रूपल 7
- 27. जावास्क्रिप्ट setInvertal का उपयोग करते हुए सीपीयू
- 28. टाइपफ़ोफ़ की आवश्यकता क्यों है?
- 29. का उपयोग करते हुए कोलन जावास्क्रिप्ट में चर नाम (उदाहरण के लिए एक:। ख: ग)
- 30. क्यों PreparedStatement.setNull को sqlType की आवश्यकता है?
प्रदर्शन आपकी चिंताओं का कम से कम है। गैर-प्रकार-जांच संस्करणों के साथ "झूठी सकारात्मक" की संभावना है। –