2015-12-03 7 views
5

You Don't Know JS - the Coercion Chapter में मैंने पढ़ा है कि दबाव के साथ, आपको कभी भी परिणाम नहीं मिलता है जो ऑब्जेक्ट या सरणी जैसे जटिल मूल्य है। बॉक्सिंग को सटीक अर्थ में मजबूर नहीं माना गया था। हुड के पीछे जावास्क्रिप्ट में मुक्केबाजी से मुक्केबाजी कैसे अलग है? मैं वास्तव में सतह पर कोई अंतर नहीं देख सकता।जावास्क्रिप्ट में मुक्केबाजी मजबूरन है?

+1

* "... ऑब्जेक्ट फ़ंक्शन की तरह" * एक "ऑब्जेक्ट फ़ंक्शन" क्या है? –

+0

संभावित डुप्लिकेट [ऑटोबॉक्सिंग और जबरदस्ती के बीच क्या अंतर है?] (Http://stackoverflow.com/questions/11086114/what-is-the-difference-between-autoboxing-and-coercion) –

+1

@ क्रिस्टियनलास्कोव्स्की: यह एक है * जावा * सवाल। पुस्तक, और प्रश्न पर टैग, * जावास्क्रिप्ट * के बारे में हैं। –

उत्तर

12

यह मोटे तौर पर अर्थशास्त्र का विषय है।

पहले, आइए परिभाषित ", मुक्केबाजी" जाने के बाद से अवधि आमतौर पर जावास्क्रिप्ट में (उदाहरण के लिए यह कल्पना में प्रकट नहीं होता) नहीं किया जाता है:

"बॉक्सिंग" एक वस्तु एक आदिम चारों ओर लपेटकर है मूल्य। उदाहरण के लिए, new Number(42) आदिम संख्या 42

केवल स्वचालित जावास्क्रिप्ट में किया मुक्केबाजी है के लिए एक Number ऑब्जेक्ट बनाएगी:

  1. आप इस तरह, एक आदिम पर एक विधि का उपयोग करते:

    console.log("testing".toUpperCase()); 
    

    "testing" एक प्राचीन स्ट्रिंग है, और इस प्रकार विधियों (और नहीं) में विधियां नहीं हैं। जब जावास्क्रिप्ट इंजन एक प्राइमेटिव रूट के साथ एक प्रॉपर्टी एक्सेसर ऑपरेशन देखता है, तो यह उस प्राइमेटिव को समेकित ऑब्जेक्ट में परिवर्तित करता है (उदाहरण के लिए String ऑब्जेक्ट में एक आदिम स्ट्रिंग) उदाहरण के लिए। एक बार अभिव्यक्ति के काम को पूरा करने के बाद उस वस्तु को फेंक दिया जाता है।

  2. जब आप ढीला मोड में Function#call या Function#apply करने के लिए पहले तर्क के रूप में एक आदिम उपयोग करें, यह आदेश कॉल के दौरान this होने के लिए में बॉक्सिंग रहा है। (सख्त मोड में, this एक आदिम हो सकता है।)

अनबॉक्सिंग है, ज़ाहिर है, बातचीत: मुक्केबाजी वस्तु से आदिम हो रही है।

विनिर्देश में भाषा कॉल मुक्केबाजी "रूपांतरण":

§7.1.13 से:

सार आपरेशन ToObject प्रकार वस्तु के एक मूल्य के लिए तर्क धर्मान्तरित ...

हालांकि, यह अनबॉक्सिंग दोनों "रूपांतरण" और "जबरन" कहता है:

§7.1.1 से

:

सार आपरेशन ToPrimitive धर्मान्तरित एक गैर ऑब्जेक्ट प्रकार

§4.3.16 से करने के लिए अपने इनपुट तर्क:

एक बूलियन वस्तु मजबूर किया जा सकता है एक बूलियन मूल्य के लिए

§4.3.19 से:

स्ट्रिंग ऑब्जेक्ट हो सकता है एक स्ट्रिंग मान को ...

मजबूर दिन के अंत में, क्या मायने रखती है कि हम क्या समझ है तब होता है जब। मुझे संदेह है कि के बीच एक मजबूत भेद और कॉरर्स को जानबूझकर लेखकों द्वारा नहीं बनाया गया है।

संबंधित मुद्दे