2013-12-12 10 views
12
console.log(true+true); //2 
console.log(typeof(true+true)); //number 
console.log(isNaN(true+true)); //false 

एक संख्या उत्पन्न करने वाले 2 बूलियन प्रकारों को एक साथ क्यों जोड़ रहा है? मैं समझता हूं कि अगर वे बराबर नहीं थे (1/0 (बाइनरी?)) यह एक बूलियन प्रकार पर अंकगणित करने की कोशिश करने के लिए अजीब होगा, लेकिन मुझे इस तर्क के पीछे तर्क नहीं मिल रहा है।जावास्क्रिप्ट बूलियन

+2

क्योंकि वे संख्याओं 'संख्या (सत्य) + संख्या (सत्य) === 2' –

+0

में परिवर्तित हो जाते हैं क्योंकि' सत्य' 1 है जब किसी संख्या में स्वत: रूपांतरित होता है। कार्रवाई में जावास्क्रिप्ट की गतिशील प्रकार प्रणाली। –

+0

'true'' 1' – elclanrs

उत्तर

9

ऐसा नहीं है कि तरह काम करता है कि यह कैसे काम करने के लिए निर्दिष्ट है, क्योंकि है कि के रूप में यह परिभाषित करने के बिना var x कर सकता है।

एक्मास्क्रिप्ट मानक निर्दिष्ट करता है कि जब तक कि तर्कों में से कोई भी स्ट्रिंग नहीं है, + ऑपरेटर को संख्यात्मक जोड़ और स्ट्रिंग कॉन्सटेनेशन नहीं माना जाता है। संख्यात्मक मानों में रूपांतरण का स्पष्ट रूप से उल्लेख किया गया है:

ToNumber (lprim) और ToNumber (rprim) को अतिरिक्त ऑपरेशन लागू करने का परिणाम लौटाएं।

(जहां lprim और rprim बाएं हाथ की आदिम रूपों और दाएँ हाथ के तर्क, क्रमशः)

ECMAScript भी बूलियन्स के लिए To Number रूपांतरण स्पष्ट रूप से निर्दिष्ट करता है:

परिणाम 1 है यदि तर्क सत्य है। अगर तर्क गलत है तो परिणाम +0 है।

इसलिए, true + true प्रभावी रूप से 1 + 1, या 2 का मतलब है।

0

जावास्क्रिप्ट एक गतिशील रूप से टाइप की गई भाषा है, क्योंकि आपको यह निर्धारित करने की ज़रूरत नहीं है कि आप किस प्रकार टाइप करते हैं, जैसे bool x या int i। जब यह एक ऐसा ऑपरेशन देखता है जो वास्तव में नहीं किया जा सकता है, तो यह ऑपरेंड को जो कुछ भी करने की आवश्यकता है उसे परिवर्तित कर देगा ताकि वे उस ऑपरेशन को उन पर कर सकें। इसे टाइप जबरन के रूप में जाना जाता है। आप बुलियन नहीं जोड़ सकते हैं, इसलिए जावास्क्रिप्ट बूलियन को उस चीज़ पर डालेगा जो इसे जोड़ सकता है, स्ट्रिंग या संख्या की तरह कुछ। इस मामले में, इसे किसी संख्या में डालने का अर्थ होता है क्योंकि 1 को अक्सर सत्य का प्रतिनिधित्व करने के लिए उपयोग किया जाता है और झूठी के लिए 0। तो जावास्क्रिप्ट true के 1 एस को डालेगा, और उन्हें

0

जावास्क्रिप्ट को कम से कम टाइप किया गया है, और यह स्थिति को फिट करने के लिए चीजों को स्वचालित रूप से अन्य चीजों में परिवर्तित करता है। यही कारण है कि आप एक int या bool

http://msdn.microsoft.com/en-us/library/6974wx4d(v=vs.94).aspx

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