2012-05-05 11 views
15

संभव डुप्लिकेट:
What does the || operator do?ऑब्जेक्ट मान में दो लंबवत रेखाएं जावास्क्रिप्ट में क्या होती हैं?

हो सकता है कि किसी को एक बेहतर कोड स्निपेट प्रदान कर सकते हैं, लेकिन क्या || निम्नलिखित ?:

var time = $(el).data('start') || new Date(); 

में क्या मतलब है यह एक or है ऑपरेटर और यदि हां, तो यह कैसे समझ में आता है कि एक चर के दो अलग-अलग मान हो सकते हैं?

+0

में लिखा जा सकता हाय @Esailija, धन्यवाद। –

+0

जो कार्रवाई मैंने आशा की थी वह इस प्रश्न को हटाना था, क्योंकि यह पहले से ही पूछे जाने वाले और उत्तर दिए गए किसी भी से अलग नहीं है। – Esailija

+1

मैंने आपके द्वारा उल्लिखित लिंक के समान कुछ खोजने के लिए गुगल किया लेकिन "दो, डबल वर्टिकल लाइन जावास्क्रिप्ट" जैसे कीवर्ड का उपयोग करके कुछ भी नहीं मिला। क्योंकि सादे अंग्रेजी में बहुत कुछ नहीं था, इसलिए मैंने सवाल पूछने का फैसला किया। –

उत्तर

33

यह OR ऑपरेटर है। क्या आप को समझने की जरूरत है:

  • गैर बूलियन मूल्यों एक बूलियन करने के लिए परिवर्तित कर रहे हैं जब एक तर्क ऑपरेटर में इस्तेमाल किया। false में कनवर्ट करने वाले मान को "गलत" कहा जाता है और true में कनवर्ट करने वाले मान को "सत्य" कहा जाता है। झूठी मानों में 0, undefined, null जैसी चीजें शामिल हैं, और इसी तरह। Truthy and Falsy: When All is Not Equal in JavaScript पर और देखें।

  • OR ऑपरेटर शॉर्ट सर्किट: यह भाव का मूल्यांकन रहता है जब तक यह पाता है पर कि true है, और फिर बंद हो जाता है।

तो, var time = $(el).data('start') || new Date(); "el तत्व की start डेटा के लिए सेट time, या, कि यदि falsy है, वर्तमान समय का उपयोग करें" का मतलब है।

+0

हाय @apsillers, "झूठी" और "सच्चाई" के स्पष्टीकरण के लिए धन्यवाद। मैंने उन लोगों को पहले सुना लेकिन कभी नहीं पता था कि उनका क्या मतलब है। –

+0

सरल और सीधे बिंदु पर - महान जवाब। – Yatrix

5

इसका मतलब है 'या'। इस उदाहरण में यह $(el).data('start') के वैरिएबल time के मान को असाइन करता है या यदि यह मौजूद नहीं है या इसके बजाय false देता है, तो यह new Date() से लौटाए गए मान को असाइन करता है। या, जैसा कि और अधिक स्पष्ट रूप टिप्पणी में, Malovolio द्वारा नोट:

... अगर $(el).data('start') "falsy" (अर्थात्, अपरिभाषित अशक्त 0, झूठी कोई रिक्त स्ट्रिंग है,,,, या NaN) है, तो new Date() है मूल्यांकन और time को सौंपा गया।

एक तार्किक ऑपरेटर के महत्वपूर्ण पहलू:

तार्किक ऑपरेटरों आम तौर पर बूलियन साथ (तार्किक) मूल्यों उपयोग किया जाता है; जब वे हैं, वे एक बूलियन मूल्य वापस करते हैं। हालांकि, & & और || ऑपरेटर वास्तव में निर्दिष्ट ऑपरेटरों में से एक का मान वापस करते हैं, इसलिए यदि इन ऑपरेटरों को गैर-बूलियन मानों के साथ उपयोग किया जाता है, तो वे एक गैर-बूलियन मान वापस कर सकते हैं।

संदर्भ:

+0

धन्यवाद @ डेविड, बहुत उपयोगी। इसे अब पा लिया है। –

+1

अधिक सटीक रूप से, यदि '$ (एल) .डेटा ('स्टार्ट')' "गलत है" (यानी, अपरिभाषित, शून्य, 0, झूठी, खाली स्ट्रिंग, या 'NaN') है, तो' नई तिथि() 'मूल्यांकन किया जाता है और' समय' को सौंपा जाता है। आश्चर्यजनक रूप से, खाली सूचियों और खाली वस्तुओं को झूठा नहीं माना जाता है। – Malvolio

-1

इसका अर्थ है logical sumvar time = $(el).data('start') || new Date(); यदि $(el).data('start')undefined या false मान होगा तो timenew Date फ़ंक्शन से मूल्य होगा।

+0

धन्यवाद @ डेनिस। 'तार्किक योग' 'या' से अलग कैसे है? –

+1

डाउनवॉटर के लिए क्या गलत लिखा गया है? –

+0

यह उत्तर क्यों दिया गया था? –

1

ऑपरेटर के तरीके || मूल्यांकन किया जाता है कि यदि पहला भाग सत्य-ईश है, तो उसने इसे वापस कर दिया। यदि पहला भाग झूठा-आश है, तो यह दूसरा लौटाता है। ऊपर भाव इसलिए के बराबर है:

if ($(el).data('start')) { 
    time = $(el).data('start'); 
} else { 
    time = new Date(); 
} 
5
exp1 || exp2 

exp1 मूल्यांकन करता है। यदि exp1 सत्य है तो exp2 का मूल्यांकन नहीं किया जाता है (शॉर्ट सर्किट मूल्यांकन के रूप में जाना जाता है)। यदि exp1 झूठा लौटाता है तो एक्सप 2 का मूल्यांकन किया जाता है। यदि exp1 या exp2 सत्य है तो (exp1 || exp2) सत्य के रूप में मूल्यांकन करता है।

लेकिन जावास्क्रिप्ट में, आप ऑपरेटर का उपयोग करके मूल्य निर्धारित कर सकते हैं।

a = something 

if (prop) 

a = prop 

इस संदर्भ के लिए के रूप में

a = prop || something