2011-06-09 11 views
5

मैं नवीनतम फ़ायरफ़ॉक्स (4.0.1) और फायरबग (1.7.2) का उपयोग कर रहा हूं।कंसोल में परिवर्तनीय घोषणाएं "अपरिभाषित" क्यों लौटती रहती हैं?

जब भी मैं कंसोल में एक परिवर्तनीय घोषणा दर्ज करता हूं, एक इटालिसिक "अपरिभाषित" चेतावनी वापस आती है।

तो उदाहरण के लिए यदि मैं "var x = 5;" दर्ज करता हूं तो प्रतिक्रिया "5" की बजाय "अपरिभाषित" है।

बाद में अगर मैं कंसोल में "x" दर्ज करता हूं, तो 5 का उचित मान वापस कर दिया जाता है। हालांकि त्रुटि/चेतावनी एक उपद्रव का थोड़ा सा है, वास्तव में कारण और संकल्प जानना चाहेंगे, और यदि मैं अकेला अनुभव कर रहा हूं।

दिलचस्प बात यह है कि अगर मैं "var" का उपयोग नहीं करता हूं लेकिन केवल "x = 5" का उपयोग करके मान घोषित करता हूं तो कंसोल में सही व्यवहार प्रदर्शित होता है और "5" वापस आ जाता है।

उत्तर

4

(यह सिर्फ एक अनुमान है, मैं जावास्क्रिप्ट की भाषा के नियमों का या Firebug पर विवरण पर एक विशेषज्ञ नहीं हूँ।)

प्रतिक्रिया सांत्वना आप देता है आपके द्वारा दर्ज लाइन के मूल्यांकन का परिणाम है । मुझे लगता है कि घोषणाvar x = ... एक ऐसा बयान है जिसमें कोई मूल्य नहीं है, जबकि सरल असाइनमेंट (x = ...) सी विरासत के अनुरूप है और "सब कुछ एक अभिव्यक्ति है" कार्यात्मक भाषाओं का दृष्टिकोण, एक अभिव्यक्ति जो मूल्यांकन करती है निर्दिष्ट मूल्य।

+0

मुझे ऐसा भी लगता है। :) (+1) – R1234

+2

आप सही हैं; विशेष रूप से, [घोषणा बयान spec के § 12.2 प्रति कुछ नहीं लौटाता है, और असाइनमेंट एक्सप्रेशन प्रति § 11.13.1] (http://stackoverflow.com/a/13180929/201952) असाइन किए गए मान को वापस कर देता है। – josh3736

+0

@ josh3736 बहुत बढ़िया, यह खोजने के लिए धन्यवाद! – delnan

0

Firebug अभिव्यक्ति का मूल्यांकन का परिणाम रिपोर्ट कर रहा है, बराबर करने के लिए:

eval typeof ("var x = 5;");
"अपरिभाषित"

टाइपो eval ("x = 5;");
"संख्या"

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

  • कोई संबंधित समस्या नहीं^_^