2012-03-21 17 views

उत्तर

11

क्या ब्लॉकस्टेटमेंट्स 0 लौटते हैं ...?

नहीं, blocks उनके भीतर अंतिम अभिव्यक्ति का मूल्य वापस कर देता है। JavaScript कंसोल, जो 9 दिखाएगा में

{1 + 8} 

...: तुम बस कार्य करके यह देख सकते हैं।

{1 + ''} + 10 // 10
{1 + ''} + '' // 0
इस क्यों होता है?

चूंकि ब्लॉक एक मान देता है, तो उस मान का उपयोग नहीं किया जाता है। {1 + ''} + 10 // 10 कोड दो अलग-अलग आइटम के रूप में मूल्यांकन किया जाता है:

{1 + ''} // "1" 
+10  // 10 

... या मानक खरोज और अर्धविराम से उन लेखन:

{ 
    1 + ''; 
} 
+10; 

... और आप एक दूसरे का परिणाम देख रहे हैं, जैसा कि पहले व्यक्ति बिल्कुल नहीं थे। + अतिरिक्त ऑपरेटर नहीं है, यह unary+ है (unary - के समान, लेकिन यह इसके ऑपरेंड के चिह्न को नहीं बदलता है)। +10, ज़ाहिर है, 10; और +''0 है क्योंकि एक स्ट्रिंग में ऑपरेटर को लागू करने से स्ट्रिंग को संख्या में परिवर्तित किया जाता है, और Number('')0 है।

आप साबित कर सकते हैं कि आप इस कोशिश कर रहा द्वारा एकल + बजाय इसके अलावा ऑपरेटर को देख रहे हैं:

{1 + ''} * 10 

... है जो वास्तव में

{ 
    1 + ''; 
} 
*10; 

यह एक वाक्य रचना त्रुटि के साथ विफल क्योंकि कोई यूनरी * नहीं है।

फेलिक्स कृपया अपने उदाहरण में नीचे टिप्पणी, + के लिए में बताते हैं के रूप में इसके अलावा ऑपरेटर (जो तार श्रृंखलाबद्ध समाप्त हो गया है | आपके मामले में,) होने के लिए, यह between two expressions होना जरूरी होता है, और एक ब्लॉक statement है, expression नहीं।

+0

धन्यवाद! मैं शुरू में उलझन में था क्योंकि '{''} + '' '' '' '' '' '' एनएन' देता है, लेकिन अब मुझे एहसास हुआ है कि यह + के कारण है। – callumacrae

+2

यह 100% सही नहीं है: http://es5.github.com/#x12.1 * "स्टेटमेंटलिस्ट का मूल्यांकन करने का परिणाम लौटाएं।" *। यह कोई फर्क नहीं पड़ता है क्योंकि आप एक ब्लॉक एक कथन है और इसलिए अभिव्यक्ति के अंदर उपयोग नहीं किया जा सकता है (कम से कम मैं इसे समझता हूं)। –

+0

@ फ़ेलिक्सक्लिंग: इसके लिए धन्यवाद! मैंने गलत बिट हटा दिया है ("ब्लॉक कुछ भी वापस नहीं करते हैं")। और अब मुझे व्याकरण में खोदना है (जिसके पास मेरे पास इस समय करने का समय नहीं है) अंतर्निहित कारण को समझने के लिए ब्लॉक और अभिव्यक्ति को अलग और अलग रखा गया है।वे हैं, और मुझे पता था कि वे हैं, लेकिन मुझे नहीं पता कि व्याकरण का सटीक हिस्सा यह कहता है कि ... :-) जैसा कि आपने कहा था, बयान बनाम अभिव्यक्तियों के साथ करना है। –