2011-12-19 15 views
16

जावास्क्रिप्ट जावा के रूप में गैर-कड़ाई से टाइप की गई भाषा है, उदाहरण के लिए।जावास्क्रिप्ट प्रकार रूपांतरण: (सत्य और 1) बनाम (सच | 1)

हम जानते हैं, यह dependently परिणाम का मूल्य धर्मान्तरित संदर्भ पर:

"2" + "3" परिणाम "23"

"2" * "3" परिणाम 6

यह काफी स्पष्ट और समझने के लिए ठीक है।

मैं सिर्फ निम्नलिखित भाव की कोशिश की और भ्रमित हो गया:

true && 1 परिणाम 1
true || 1 परिणाम true

क्यों पहली संख्या देता है और दूसरा बूलियन देता है?

जावास्क्रिप्ट रूपांतरण नियमों को ध्यान में रखते हुए, मुझे boolean अभिव्यक्ति के संदर्भ के कारण दोनों मामलों में boolean मान प्राप्त होने की उम्मीद है।

उत्तर

8

चेक Douglas Crockford's site, यह कहते हैं:

& & ऑपरेटर आमतौर पर कहा जाता है और तार्किक है। इसे गार्ड भी कहा जा सकता है। यदि पहला ऑपरेंड झूठा, शून्य, अपरिभाषित है, "" (खाली स्ट्रिंग), या संख्या 0 तो यह पहला ऑपरेंड देता है। अन्यथा, यह दूसरा ऑपरेंड देता है। यह एक अशक्त की जांच लिखने के लिए एक सुविधाजनक तरीका प्रदान करता है:

var value = p && p.name; /* The name value will only be retrieved from 
p if p has a value, avoiding an error. */ 

|| ऑपरेटर आमतौर पर लॉजिकल या कहा जाता है। इसे डिफ़ॉल्ट भी कहा जा सकता है। यदि पहला ऑपरेंड गलत, शून्य, अपरिभाषित, "" खाली स्ट्रिंग) है, या संख्या 0, है तो यह दूसरा ऑपरेंड देता है। अन्यथा, यह पहले ऑपरेंड देता है। ,

value = v || 10; /* Use the value of v, but if v doesn't have a value, 
use 10 instead. */ 
+0

स्पष्टीकरण के लिए धन्यवाद - यह गार्ड और डिफ़ॉल्ट – sergionni

+0

के बारे में दिलचस्प बात है आपका स्वागत है। सब कुछ, मैं विनिर्देश के बजाय जावास्क्रिप्ट पर डगलस पेज को पढ़ने की सिफारिश करता हूं। मेरी राय में समझना बहुत आसान है। http://javascript.crockford.com/ –

+0

ग्रेट स्पष्टीकरण! काश मैं आपको +3 दे सकता हूं। –

9

quote MDC;

&&; expr1 लौटाता है अगर इसे गलत में परिवर्तित किया जा सकता है; अन्यथा, expr2 देता है। इस प्रकार, जब बूलियन मानों के साथ उपयोग किया जाता है, और यदि दोनों ऑपरेटरों सत्य हैं तो सत्य वापस आते हैं; अन्यथा, झूठी वापसी करता है।
||; Expr1 लौटाता है अगर इसे सत्य में परिवर्तित किया जा सकता है; अन्यथा, expr2 देता है। इस प्रकार, जब बूलियन मूल्यों के साथ प्रयोग किया जाता है, || यदि कोई ऑपरेंड सत्य है तो सच हो जाता है; अगर दोनों झूठे हैं, तो झूठी वापसी होती है।

तो पहले उदाहरण में, 1 वापस किया जा रहा है क्योंकि expr1 को गलत में परिवर्तित नहीं किया जा सकता है।

दूसरे उदाहरण में, true को सत्य में परिवर्तित किया जा सकता है, इसलिए यह वापस आ गया है।

+0

बहुत धन्यवाद वास्तव में आप मुझे याद दिलाना, कि मोज़िला संसाधन जावास्क्रिप्ट प्रलेखन – sergionni

0

तुम भी जैसे अन्य कर सकते हैं:

var myVar = Math.random() > 0.5; 

myVar && doFunc(); 

जो एक ही है के रूप में

if(myVar) { 
    doFunc(); 
} 

|| मूल रूप से इसका मतलब है

"अगर पहली बात गलत है, दूसरे के पास जाओ"

&& मूल रूप से इसका अर्थ है "यदि पहली बात सही है, तो दूसरे पर जाएं"

यही कारण है कि आप कार्यों के शीर्ष पर इस तरह चीजों को देखने के:

function myFunction(options) { 
    options = options || {}; 
} 

जिसका मतलब है: यदि विकल्प falsey है, यह {}

9

इस प्रकार का रूपांतरण के साथ कोई संबंध नहीं है।

|| पहला सच्चाई ऑपरेंड देता है। 1 || true आपको 1

&& पहला फाल्सी ऑपरेंड, या दूसरा ऑपरेंड देता है यदि दोनों सत्य हैं।

का पेज 58 देखें ECMAScript specification

+0

के रूप में बहुत ही मूल्यवान है, धन्यवाद, कभी नहीं के बारे में "पहले पिछले" दृष्टिकोण – sergionni

0

आप तर्कसंगत मूल्यांकन (जो & &, ||) के साथ कास्टिंग (*/+ ऑपरेटर यह करेंगे) भ्रमित कर रहे हैं।

+0

कर सकते हैं जाना जाता है: यह डिफ़ॉल्ट मान भी निर्दिष्ट करने के लिए एक सुविधाजनक तरीका प्रदान आपका उत्तर प्राप्त नहीं करें – sergionni

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