जावास्क्रिप्ट में Symbol
एस पर प्रलेखन पढ़ना, और कुछ वातावरण (क्रोम, फ़ायरफ़ॉक्स, नोड.जेएस) में भी परीक्षण करना, मुझे एहसास हुआ है कि अंतर्निहित स्ट्रिंग रूपांतरण की मेरी समझ त्रुटिपूर्ण है।प्रतीकों: जावास्क्रिप्ट में निहित स्ट्रिंग रूपांतरण कैसे काम करता है?
मैं धारणा है कि वस्तु के toString()
विधि जब एक स्ट्रिंग के लिए कनवर्ट करने का प्रयास कर बुलाया गया था के तहत हमेशा था, और अगर उस समारोह एक आदिम वापस नहीं किया था, तो यह वस्तु की toPrimitive()
विधि कहा जाता है, तो अगर वह नहीं था काम करें यह टाइप-त्रुटि होगी। हालांकि, इस स्पष्टीकरण को कवर करने के TypeError
कि Symbol
रों फेंक विफल रहता है:
var sym = Symbol("test");
try {
console.log(sym + "ing");
} catch (error) {
console.error(error);
}
TypeError: Cannot convert a Symbol value to a string
लेकिन यह स्पष्ट है कि Symbol
रों एक वैध toString()
विधि है। तो इसे क्यों नहीं कहा जाता है?
यह मेरे प्रश्न का उत्तर नहीं देता है: प्रतीक कैसे टाइप-त्रुटि की क्षमता को कार्यान्वित करता है और एक अंतर्निहित प्रकार-रूपांतरण के डिफ़ॉल्ट वर्कफ़्लो को सर्कवेट करता है? –
@ पैट्रिक रॉबर्ट्स सरल जवाब है "क्योंकि कल्पना इतनी कहती है"। वास्तविक जवाब यह होगा कि इंजन कार्यान्वयनकर्ताओं को spec का पालन करना होगा ताकि वे अपने आंतरिक में कुछ लागू कर सकें जो जांचता है कि एक स्ट्रिंग प्रकार रूपांतरण में 'प्रतीक' शामिल है या नहीं, तो अपवाद फेंकता है। 'प्रतीक' स्वयं इस व्यवहार को संभाल नहीं करता है। –
तो त्रुटि टाइप करने का कारण जावास्क्रिप्ट से सुलभ मैकेनिक के कारण नहीं है? –