You Don't Know JS - the Coercion Chapter में मैंने पढ़ा है कि दबाव के साथ, आपको कभी भी परिणाम नहीं मिलता है जो ऑब्जेक्ट या सरणी जैसे जटिल मूल्य है। बॉक्सिंग को सटीक अर्थ में मजबूर नहीं माना गया था। हुड के पीछे जावास्क्रिप्ट में मुक्केबाजी से मुक्केबाजी कैसे अलग है? मैं वास्तव में सतह पर कोई अंतर नहीं देख सकता।जावास्क्रिप्ट में मुक्केबाजी मजबूरन है?
उत्तर
यह मोटे तौर पर अर्थशास्त्र का विषय है।
पहले, आइए परिभाषित ", मुक्केबाजी" जाने के बाद से अवधि आमतौर पर जावास्क्रिप्ट में (उदाहरण के लिए यह कल्पना में प्रकट नहीं होता) नहीं किया जाता है:
"बॉक्सिंग" एक वस्तु एक आदिम चारों ओर लपेटकर है मूल्य। उदाहरण के लिए, new Number(42)
आदिम संख्या 42
केवल स्वचालित जावास्क्रिप्ट में किया मुक्केबाजी है के लिए एक Number
ऑब्जेक्ट बनाएगी:
आप इस तरह, एक आदिम पर एक विधि का उपयोग करते:
console.log("testing".toUpperCase());
"testing"
एक प्राचीन स्ट्रिंग है, और इस प्रकार विधियों (और नहीं) में विधियां नहीं हैं। जब जावास्क्रिप्ट इंजन एक प्राइमेटिव रूट के साथ एक प्रॉपर्टी एक्सेसर ऑपरेशन देखता है, तो यह उस प्राइमेटिव को समेकित ऑब्जेक्ट में परिवर्तित करता है (उदाहरण के लिएString
ऑब्जेक्ट में एक आदिम स्ट्रिंग) उदाहरण के लिए। एक बार अभिव्यक्ति के काम को पूरा करने के बाद उस वस्तु को फेंक दिया जाता है।जब आप ढीला मोड में
Function#call
याFunction#apply
करने के लिए पहले तर्क के रूप में एक आदिम उपयोग करें, यह आदेश कॉल के दौरानthis
होने के लिए में बॉक्सिंग रहा है। (सख्त मोड में,this
एक आदिम हो सकता है।)
अनबॉक्सिंग है, ज़ाहिर है, बातचीत: मुक्केबाजी वस्तु से आदिम हो रही है।
विनिर्देश में भाषा कॉल मुक्केबाजी "रूपांतरण":
§7.1.13 से:
सार आपरेशन ToObject प्रकार वस्तु के एक मूल्य के लिए तर्क धर्मान्तरित ...
हालांकि, यह अनबॉक्सिंग दोनों "रूपांतरण" और "जबरन" कहता है:
§7.1.1 से:
सार आपरेशन ToPrimitive धर्मान्तरित एक गैर ऑब्जेक्ट प्रकार
§4.3.16 से करने के लिए अपने इनपुट तर्क:
एक बूलियन वस्तु मजबूर किया जा सकता है एक बूलियन मूल्य के लिए।
§4.3.19 से:
स्ट्रिंग ऑब्जेक्ट हो सकता है एक स्ट्रिंग मान को ...
मजबूर दिन के अंत में, क्या मायने रखती है कि हम क्या समझ है तब होता है जब। मुझे संदेह है कि के बीच एक मजबूत भेद और कॉरर्स को जानबूझकर लेखकों द्वारा नहीं बनाया गया है।
- 1. क्या मुक्केबाजी .NET में कचरा बनाती है?
- 2. मुक्केबाजी जब बुला toString()
- 3. रैपर और स्वत: मुक्केबाजी
- 4. Enum मुक्केबाजी और समानता
- 5. क्या खराब करता है: प्रतिबिंब या मुक्केबाजी?
- 6. ऑब्जेक्ट मुक्केबाजी में अंतर/सी # और वीबी.Net
- 7. सी # में गतिशील डेटा प्रकार पर मुक्केबाजी?
- 8. जावा में मैन्युअल मुक्केबाजी बनाम Autoboxing
- 9. क्या मुक्केबाजी और अनबॉक्सिंग में समान प्रदर्शन होता है?
- 10. जावा ने शून्य और मुक्केबाजी
- 11. जावा ऑटो मुक्केबाजी/unboxing wierdness
- 12. स्कैला 2.10, डबल.इसएनएएन, और मुक्केबाजी
- 13. ऑटो-मुक्केबाजी/अनबॉक्सिंग कौन करेगा?
- 14. मुक्केबाजी और अनबॉक्सिंग क्या है और व्यापार बंद क्या हैं?
- 15. क्या वीबी.नेट "अगर" ऑपरेटर मुक्केबाजी का कारण बनता है?
- 16. मुक्केबाजी/अनबॉक्सिंग और टाइप कास्टिंग के बीच क्या अंतर है?
- 17. क्या ये मुक्केबाजी/अनबॉक्सिंग उदाहरण हैं
- 18. क्या सभी सी # का परिणाम मुक्केबाजी/अनबॉक्सिंग
- 19. एक इंटरफ़ेस पर मुक्केबाजी रूपांतरण कास्टिंग कर रहा है?
- 20. यूनिवर्सल/जेनेरिक मुक्केबाजी किसी भी से AnyRef
- 21. कॉलिंग toString() मुक्केबाजी रोकने के लिए
- 22. .NET मुक्केबाजी/अनबॉक्सिंग बनाम कास्टिंग प्रदर्शन
- 23. डिवाइस सक्रियण दिनांक (अन-मुक्केबाजी दिनांक)
- 24. मजबूरन और दृश्य स्टूडियो में SourceSafe सह-अस्तित्व कर सकते हैं?
- 25. एकल तत्व आदिम सरणी में गुजरकर मुक्केबाजी से बचें
- 26. क्रोम डेवलपर टूल में ब्लैक-मुक्केबाजी स्क्रिप्ट विकल्प
- 27. क्यों ऑटो-मुक्केबाजी चेतावनी के रूप में चिह्नित किया गया?
- 28. एक विघटित स्कैला कोड में मुक्केबाजी/अनबॉक्सिंग को कैसे पहचानें?
- 29. जावास्क्रिप्ट में === क्या है?
- 30. टी: वर्ग परिणाम के मुकाबले जेनेरिक विधि मुक्केबाजी में क्यों परिणाम देती है?
* "... ऑब्जेक्ट फ़ंक्शन की तरह" * एक "ऑब्जेक्ट फ़ंक्शन" क्या है? –
संभावित डुप्लिकेट [ऑटोबॉक्सिंग और जबरदस्ती के बीच क्या अंतर है?] (Http://stackoverflow.com/questions/11086114/what-is-the-difference-between-autoboxing-and-coercion) –
@ क्रिस्टियनलास्कोव्स्की: यह एक है * जावा * सवाल। पुस्तक, और प्रश्न पर टैग, * जावास्क्रिप्ट * के बारे में हैं। –