Difference between the javascript String Type and String Object? -


मैं ECMA-262 मानक ( ECMAScript भाषा विशिष्टता, 3rd संस्करण , यदि यह इसके लिए मायने रखता है - मुझे स्ट्रिंग टाइप / स्ट्रिंग ऑब्जेक्ट पर 3 व 5 संस्करण के बीच कोई अंतर नहीं मिला है।)

एक बात जो मुझे चकरा देती है: स्ट्रिंग टाइप और स्ट्रिंग के बीच अंतर वस्तु। हां, मुझे इस अर्थ में अंतर पता है कि स्ट्रिंग प्रकार 16-बिट UTF-16 इकाइयों का अनुक्रम है और स्ट्रिंग ऑब्जेक्ट एक अंतर्निहित ऑब्जेक्ट है जिसमें आंतरिक वर्ग संपत्ति को "स्ट्रिंग" और इसके आंतरिक मूल्य गुण स्ट्रिंग प्रकार के मान पर सेट किया गया है।

लेकिन विनिर्देश पढ़ना, स्ट्रिंग प्रकार किसी भी तरीके को बेनकाब नहीं करता है; यह है, यह किसी भी अतिरिक्त गुणों के बिना एक मूल्य है इस कोड को लें, वस्तुतः अपेक्षित सभी चीजें:

  document.writeln (typeof "foo"); // 'स्ट्रिंग' document.writeln (प्रकार का नया स्ट्रिंग ("foo")); // 'ऑब्जेक्ट'  

पहला प्रकार वास्तविक स्ट्रिंग प्रकार है और दूसरी वस्तु प्रकार है (यह एक ऑब्जेक्ट है वर्ग स्ट्रिंग , लेकिन इसका डेटा प्रकार ऑब्जेक्ट है)। हालांकि, इसे देखते हुए:

  "foo" .charAt (0); FooStrObj = नया स्ट्रिंग ("फू"); fooStrObj.charAt (0);  

वे दोनों एक ही कार्य का पर्दाफाश करते हैं, लेकिन ECMA-262 मानक में परिभाषित स्ट्रिंग प्रकार पर कोई कार्य नहीं है; यह सभी कार्यों को प्रदर्शित करता है String.prototype ऑब्जेक्ट से हैं (और मैं इस तथ्य के कोई भी संदर्भ नहीं देख सकता कि स्ट्रिंग प्रकार जादुई रूप से ईसीएमए-ईआरएमए में String.prototype ऑब्जेक्ट के सभी गुणों और कार्यों को उजागर करता है। 262 मानक) तो मूल स्ट्रिंग प्रकार मान के रूप में अपने आंतरिक मान के साथ स्ट्रिंग ऑब्जेक्ट को स्वचालित रूप से प्रचारित स्ट्रिंग प्रकार Em> संपत्ति?

और यदि वे ठीक उसी तरह से व्यवहार करते हैं (जो सभी इरादों और उद्देश्यों के लिए वे लगते हैं), तो स्ट्रिंग ? < स्ट्रिंग्स जेएस में एक वैल्यू टाइप हैं, इसलिए उनके पास कोई गुण नहीं है, कोई प्रोटोटाइप नहीं है। , आदि। उन पर संपत्ति का उपयोग करने का कोई भी प्रयास तकनीकी रूप से जेएस [[ToObject]] रूपांतरण (सार में नए स्ट्रिंग) का प्रदर्शन कर रहा है।

अंतर को भेद करने का आसान तरीका (ब्राउज़र में)

  a = "foo" ab = "bar" चेतावनी ("ab =" + ab); // अपरिभाषित ए = नया स्ट्रिंग ("फू"); ए बी = "बार"; चेतावनी ("एबी =" + ए.बी.); // बार  

इसके अतिरिक्त जबकि

  "foo" == नया स्ट्रिंग ("foo")  

सच == ऑपरेटर

  "फू" === नई स्ट्रिंग ("फू")  

असफल हो जायेगा।


Comments

Popular posts from this blog

apache - 504 Gateway Time-out The server didn't respond in time. How to fix it? -

c# - .net WebSocket: CloseOutputAsync vs CloseAsync -

c++ - How to properly scale qgroupbox title with stylesheet for high resolution display? -