2011-04-22 14 views
6

MDN कहता है:जावास्क्रिप्ट: क्या प्राचीन तारों में विधियां हैं?

आदिम, आदिम मूल्य

एक डेटा है कि एक वस्तु नहीं है और किसी भी विधियां नहीं हैं। जावास्क्रिप्ट में 5 आदिम डेटाटाइप: स्ट्रिंग, संख्या, बूलियन, शून्य, अपरिभाषित। शून्य और अपरिभाषित अपवाद के साथ, सभी प्राइमेटिव मानों में समकक्ष हैं जो आदिम मानों के आसपास लपेटते हैं, उदा। एक स्ट्रिंग ऑब्जेक्ट स्ट्रिंग आदिम के चारों ओर लपेटता है। सभी प्राइमेटिव अपरिवर्तनीय हैं।

तो जब हम कहते हैं एक "s".replace या "s".anything यह new String("s").replace और new String("s").anything के बराबर है?

उत्तर

12

नहीं, स्ट्रिंग प्राइमेटिव के पास विधियां नहीं हैं। सांख्यिक पुरातन के रूप में, जावास्क्रिप्ट क्रम उन्हें पूर्ण विकसित "स्ट्रिंग" वस्तुओं जब आह्वान करने के लिए बढ़ावा देने की तरह निर्माणों द्वारा ऐसा करने के लिए होगा:

var space = "hello there".indexOf(" "); 

कुछ भाषाओं में (विशेष रूप से अच्छी तरह से, जावा, लेकिन मुझे लगता है शब्द सामान्य उपयोग में है) यह कहा जाता है कि उचित होने पर भाषा "ऑब्जेक्ट्स" में उनके ऑब्जेक्ट रैपर में प्राइमेटिव होती है। टोकन व्याकरण की अनियमितताओं के कारण संख्याओं के साथ यह थोड़ा और जटिल है; आप केवल

var foo = 27.toLocaleString(); 

क्योंकि "।" जिस तरीके से आपको इसकी आवश्यकता होगी, उसका अर्थ नहीं समझा जाएगा; हालांकि:

var foo = (27).toLocaleString(); 

ठीक काम करता है। स्ट्रिंग पुरातन — और बूलियन, उस बात के — व्याकरण अस्पष्ट नहीं है, उदाहरण के लिए इतनी के लिए के साथ:

var foo = true.toString(); 

काम करेंगे।

+0

हेस बीटीडब्ल्यू डबल डॉट सिंटैक्स "मानक" है? 27 की तरह ..toLocaleString() – Pacerier

+0

वैसे यह कम से कम क्रोम में काम करता प्रतीत होता है ... मुद्दा यह है कि निम्न स्तर "टोकन व्याकरण" पहले हुक करेगा। " संख्या पर, फ़्लोटिंग-पॉइंट नंबरों के तरीके के कारण ("23.223") देखें। लेकिन उस डबल-डॉट ट्रिक * को * काम करना चाहिए, क्योंकि टोकननाइज़र दूसरे "।" पर रुक जाएगा, जिससे इसे संदर्भ संदर्भ अभिव्यक्ति बनाने के लिए पार्सर पर छोड़ दिया जाएगा। – Pointy

+0

व्यक्तिगत रूप से, मैं '(27) .toLocaleString()' पसंद करता हूं क्योंकि थोड़ा सा ट्रैक खोना आसान है। " वहां फंस गया लेकिन यह सिर्फ एक स्टाइलिस्ट राय है और यह अधिक मूल्यवान नहीं है :-) – Pointy

4

तकनीकी रूप से सही उत्तर "नहीं" है।

असली दुनिया का जवाब "नहीं है, लेकिन यह वैसे भी काम करेगा"। ऐसा इसलिए है क्योंकि जब आप की तरह

"s".replace() 

कुछ करना दुभाषिया जानता है कि आप वास्तव में स्ट्रिंग पर संचालित करने के लिए के रूप में यदि आप इसे

var str = new String("s") 

साथ बनाया था चाहते हैं और इसलिए के रूप में अगर आपको लगता है कि किया था कार्य करता है।

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