खाली JavaScript श्रृंखला पर विचार करें? नियम क्या हैं?जावास्क्रिप्ट प्रकार कास्टिंग
उत्तर
http://forums.whirlpool.net.au/archive/966449 से:
a == false
:
इस मामले में, बाएं हाथ की ओर के प्रकार वस्तु है, दाएँ हाथ की ओर के प्रकार बूलियन है। जावास्क्रिप्ट पहले बूलियन को एक संख्या में परिवर्तित करता है, जो 0
प्रदान करता है। फिर यह ऑब्जेक्ट को "आदिम" में परिवर्तित करता है, जो खाली स्ट्रिंग प्रदान करता है। इसके बाद यह खाली स्ट्रिंग की तुलना 0
से करता है। खाली स्ट्रिंग को एक संख्या में परिवर्तित किया जाता है, जो 0
प्रदान करता है, जो संख्यात्मक रूप से 0
के बराबर है, इसलिए संपूर्ण अभिव्यक्ति का परिणाम true
है।
सभी गोरी विवरणों के लिए ECMAScript spec के §11.9.3 देखें।
(!a)
:
इस मामले में जावास्क्रिप्ट बूलियन सच करने के लिए वस्तु बदल देता है, तो यह उलट, झूठी हो जाती है।
+1 अच्छा और सही उत्तर (या मुझे लगता है कि एक सही उत्तर का संदर्भ)। – user113716
यहां उल्लिखित ईसीएमए स्पेक का सीधा लिंक है: http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3 – JKirchartz
!
ऑपरेटर जांचता है कि इसका ऑपरेंड "झूठा" है या नहीं।
निम्नलिखित सत्य हैं:
!false
!0
!null
!NaN
!undefined
!""
ढीला समानता है, जो falsiness साथ कोई संबंध नहीं है के लिए ==
ऑपरेटर जाँच करता है।
विशेष रूप से, a == b
संचालन संख्याओं में कनवर्ट करेगा, फिर संख्याओं की तुलना करें।
संख्या वाले तारों में संख्याओं को परिवर्तित किया गया है जिनमें वे शामिल हैं; बूलियन 0
और 1
में परिवर्तित हो जाते हैं।
यदि परिभाषित किया गया है तो valueOf
पर कॉल करके ऑब्जेक्ट्स को परिवर्तित किया जाता है।
इस प्रकार, निम्न में से सभी सत्य हैं:
"1" == 1
"0" == false
"1" == true
"2" != true
"2" != false
({ valueOf:function() { return 2; } }) == 2
({ valueOf:function() { return 1; } }) == true
जब ==
ऑपरेटर के माध्यम से एक आदिम मूल्य के लिए एक वस्तु की तुलना, वस्तु एक आदिम मूल्य ही (संख्या या स्ट्रिंग) में coerces। में इस मामले []
0
में coerces, तो false
0
में coerces:
[] == false
0 == false
0 == 0
जो सच है।
!
ऑपरेटर बूलियन में प्रवेश करता है और फिर मूल्य को बदल देता है। []
बूलियन में true
(किसी भी वस्तु के साथ) है। तब false
![]
!true
false
==
ऑपरेटर बनने के लिए उलटने जब ऑपरेंड में से एक है, तो बूलियन, अन्य संख्या को टाइप बदल देता है।
[] == 0;
बराबर है करने के लिए:
0 == 0;
आप विनिर्देश पर The Abstract Equality Comparison Algorithm का पूरा विवरण देख सकते हैं।
आप देख सकते हैं, एक खाली सरणी वस्तु, जब संख्या में परिवर्तित, 0
पैदा करता है:
+[]; // 0
Number(0);
यह वास्तव में, क्योंकि इसके toString विधि एक खाली स्ट्रिंग का उत्पादन होता है उदाहरण के लिए:
[].toString(); // ""
+""; // 0
Number(""); // 0
+1 इसे समझाने का अच्छा तरीका, टाइप रूपांतरणों के माध्यम से आगे बढ़ना। – user113716
यह सुनिश्चित नहीं है कि यह प्रश्न का उत्तर देता है, लेकिन जावास्क्रिप्ट के टाइपकास्टिंग अजीबता के आसपास होने के लिए एक नई लाइब्रेरी है:
एक वाक्य में, टाइपकास्ट सभी साधारण समस्याओं को हल करता है, ताकि आप बड़े लोगों पर ध्यान केंद्रित कर सकें। टाइपकास्ट जावास्क्रिप्ट में दृढ़ता से टाइप किए गए चर के लिए एक पूर्ण मंच बनाकर जावास्क्रिप्ट के साथ क्या गलत है।
- 1. जेनेरिक प्रकार कास्टिंग
- 2. सी #: कास्टिंग प्रकार गतिशील
- 3. PHP प्रकार कास्टिंग प्राथमिकता
- 4. सूचक/पता प्रकार कास्टिंग
- 5. कास्टिंग
- 6. सी # वापस var प्रकार के लिए कास्टिंग?
- 7. जेनेरिक्स और सही प्रकार के लिए कास्टिंग
- 8. असेंबली के विभिन्न स्थानों ने प्रकार कास्टिंग
- 9. जावा: ऑरे प्रकार का ऑब्जेक्ट कास्टिंग
- 10. जावास्क्रिप्ट: एक ऑब्जेक्ट कास्टिंग जो eval
- 11. सादा वस्तुओं कास्टिंग सर्वर प्रतिक्रिया जावास्क्रिप्ट में
- 12. जावास्क्रिप्ट प्रकार
- 13. कास्टिंग प्रतिनिधि
- 14. "डबल कास्टिंग"
- 15. जावा: गतिशील प्रकार कास्टिंग का उपयोग कर enums
- 16. PHP: एक गतिशील रूप से निर्धारित प्रकार के लिए कास्टिंग
- 17. गैर-सदस्य रूपांतरण कार्य; विभिन्न प्रकार कास्टिंग, उदा। ओपनजीएल वेक्टर
- 18. एक सामान्य तत्व प्रकार कास्टिंग नीचे की ओर
- 19. जावा में जेनेरिक प्रकार कास्टिंग क्लासकास्ट अपवाद नहीं बढ़ाता है?
- 20. डाउनकास्टिंग (यानी व्युत्पन्न प्रकार कास्टिंग) हमेशा गलत है?
- 21. डायनामिक ऑब्जेक्ट निहित कास्टिंग
- 22. सी # Enums और कास्टिंग
- 23. स्वचालित कास्टिंग
- 24. सी # कास्टिंग
- 25. एम्पसेंड कास्टिंग
- 26. स्पष्ट कास्टिंग
- 27. जावास्क्रिप्ट सामग्री प्रकार
- 28. जावास्क्रिप्ट MIME प्रकार
- 29. जावास्क्रिप्ट चर प्रकार (बाइट)
- 30. कास्टिंग: (newtype) बनाम newtype
संभावित डुप्लिकेट [क्यों चेतावनी (!! "0") और चेतावनी (झूठी == "0") दोनों आउटपुट जावास्क्रिप्ट में सच है] (http://stackoverflow.com/questions/4567393/why-do -alert0-and-alertfalse-0-दोनों-आउटपुट-सत्य-इन-जावास्क्रिप्ट) – SLaks
पॉइंटिंग के लिए धन्यवाद। लेकिन वास्तव में, मैं सामान्य नियमों के लिए पूछता हूं। – Evgenyt
जब ढीले '==' ऑपरेटर की बात आती है, तो नियम इतने सामान्य नहीं होते हैं।आपको [इस उत्तर] द्वारा संदर्भित सार समानता तुलना एल्गोरिदम के माध्यम से पढ़ना चाहिए (http://stackoverflow.com/questions/4626361/javascript-type-casting/4626420#4626420)। – user113716