2010-10-28 18 views
27

यदि आप ईसीएमएस्क्रिप्ट 3 विनिर्देश को देखते हैं तो आप देखेंगे कि आदिम मूल्य प्रकार शून्य और अपरिभाषित नल और अपरिभाषित ऑब्जेक्ट्स के साथ नहीं हैं।क्यों संख्या अक्षरों की संख्या विधियों तक पहुंच नहीं है?

>> Null 
ReferenceError: Null is not defined 

अन्य आदिम मूल्य प्रकार संख्या, स्ट्रिंग और बूलियन प्रकार के साथ अंक, स्ट्रिंग और बूलियन वस्तुओं जो आप वैश्विक क्षेत्र से संदर्भित कर सकते हैं की क्या ज़रूरत है।

>>var n = 1; 
>>n.toString(); 
"1" 

रूप

>>var n = 1; 
>>Number.prototype.toString.call(n); 
"1" 

Booleans और एक ही है:

>>Number 
function Number() { [native code] } 
>>Boolean 
function Boolean() { [native code] } 

इन आदिम मूल्य प्रकार के लिए उद्देश्य ऐसे toString और valueOf उनके संबंधित आदिम मूल्य प्रकार के लिए तरीके के रूप में प्रदान करना है तार भी इस तरह से काम करते हैं:

>>var b = true; 
>>b.toString(); 
"true" 
>>Boolean.prototype.toString.call(b); 
"true" 

आप देख सकते हैं कि आदिम मूल्य वस्तुओं उनके साथ वस्तु के तरीकों का उपयोग कर रहे हैं जब आप प्रकार मिश्रण करने का प्रयास करें:

>>Boolean.prototype.toString.call(n); 
TypeError: Boolean.prototype.toString is not generic 
>>Number.prototype.toString.call(b) 
TypeError: Number.prototype.toString is not generic 

दिलचस्प बात यह है बूलियन और स्ट्रिंग शाब्दिक प्रकार के लिए पर्याप्त है, तो आप से सीधे इन तरीकों कॉल कर सकते हैं शाब्दिक:

>>true.toString(); 
"true" 
>>Boolean.prototype.toString.call(true) 
"true" 
>>"moo".toString(); 
"moo" 
>>String.prototype.toString.call("moo") 
"moo" 

आदिम मूल्यों बातिल और अपरिभाषित है, क्योंकि वे अशक्त और अपरिभाषित वस्तुओं के साथ इन बातों को नहीं कर सकते नहीं है:

>>Null 
ReferenceError: Null is not defined 
>>null.toString() 
TypeError: Cannot call method 'toString' of null 

आदिम मूल्य प्रकार संख्या दोनों के मिश्रण की तरह व्यवहार करती है। आप एक शाब्दिक पर toString कॉल कर सकते हैं अगर आप सीधे संख्या के प्रोटोटाइप वस्तु की विधि का उपयोग करें:

>>Number.prototype.toString.call(1); 
"1" 

लेकिन तुम तार और बूलियन के साथ की तरह आप कर सकते हैं शाब्दिक से ही विधि का उपयोग नहीं कर सकते हैं:

>>1.toString() 
SyntaxError: Unexpected token ILLEGAL 

क्यों क्या यह संख्या अक्षर है भले ही बूलियन और स्ट्रिंग से अलग-अलग व्यवहार करते हैं, भले ही कोई संख्या वस्तु हो?

(1).toString() 

नंबर दशमलव हो सकता है, इसलिए वाक्य रचना एक में समाप्त होने के लिए:

+0

यह भी देखें [मैं एक बिंदु के साथ एक पूर्णांक की संपत्ति का उपयोग क्यों नहीं कर सकता?] (http://stackoverflow.com/q/9380077/1048572) – Bergi

+0

ओह, अच्छे अंक। यकीन नहीं था। उस अन्य पोस्ट में अच्छी जानकारी थी। धन्यवाद! –

उत्तर

33

आप पहुँच यह उसी तरह, यह एक अलग पार्स मुद्दा यहाँ है, यह करने के लिए, एक अलग वाक्य विन्यास का उपयोग कर सकते हैं जब आप कोड को पार्स करने के लिए जाते हैं तो दशमलव थोड़ा अस्पष्ट होता है, वैध होने के लिए ब्रांड्स का उपयोग करें।

(1.).toString() 

सिर्फ 1.toString() यह एक दशमलव साथ एक नंबर के रूप में पार्स करने के लिए कोशिश कर रहा है के साथ हालांकि, और यह विफल रहता है: जब आप देखते हैं कि यह भी मान्य है यह थोड़ा स्पष्ट है।

+0

इसे() के साथ प्रयास करने पर विचार नहीं किया। इच्छा है कि मैं जवाब के रूप में दो उत्तरों को चिह्नित कर सकता हूं। तो मूल रूप से शाब्दिक संपत्ति है, लेकिन आपको बस अतिरिक्त दशमलव वाक्यविन्यास से निपटना होगा। धन्यवाद! –

+7

1.totoixed (2), 1.0.toFixed (2) माता-पिता के बिना काम करते हैं। – kennebec

+0

@kennebec - हाँ, वे भी काम करेंगे, मैं और अधिक संदेश दे रहा था कि '(anyType) .toString()' एक सतत प्रारूप होगा जो काम करेगा, क्षमा करें अगर वह पूरी तरह स्पष्ट नहीं था ... नहीं था इसका मतलब यह है कि विशेष रूप से संख्याओं के विकल्प नहीं थे। –

5

मुझे लगता है कि आपको this answer में किसी अन्य स्टैक ओवरफ़्लो प्रश्न में आपके प्रश्न का उत्तर मिलेगा।Theo के जवाब संक्षेप में:

[T]he parser expects a number followed by a dot to be a floating point literal. [...] [Y]ou only have to add another dot to make it work[.]

+0

वाह! मुझे लगा कि यह दशमलव के साथ कुछ करने के लिए था, लेकिन मैंने सोचा कि इसके लिए और भी कुछ होगा। दिलचस्प, देखो मुझे खुशी है मैंने पूछा। –

0

नल (राजधानी एन) एक चर नाम है। आरक्षित शब्द केस संवेदनशील हैं। शून्य शून्य वस्तु है। टाइपऑफ नल === "ऑब्जेक्ट" // सच

+0

'null.toString()' -> * अनकॉट टाइपरर: नल की संपत्ति 'toString' नहीं पढ़ सकता * –

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