2009-09-04 11 views
15

मैं एक बड़ी जे एस पुस्तकालय का उपयोग कर रहा कैनवास में कुछ ड्राइंग कार्रवाई करने। लाइब्रेरी कोड की समीक्षा (समायोजन परिवर्तन करने के लिए), मैं '||' में भाग गया हूं ऑपरेटर को एक फैशन में इस्तेमाल किया जा रहा है जिसे निश्चित रूप से बूलियन का मूल्यांकन नहीं करना चाहिए। क्या इसका मतलब यह है कि यह एक अलग ऑपरेटर है या क्या मुझे कुछ याद आ रही है? एक उदाहरण इस प्रकार है:जावास्क्रिप्ट || ऑपरेटर

var $time = Date.now || function(){ 
return +new Date; 
}; 
+0

मुझे लगता है कि यह होगा अगर दिनांक किसी कारण से 0 को वापस कर देता है, तो आप फ़ंक्शन के वापसी मूल्य पर $ time निर्धारित करेंगे ...? – peirix

+0

@peirix: आपने गलत अनुमान लगाया है। $ समय वर्तमान तिथि लौटने वाला एक फ़ंक्शन होगा। यह दिनांक का उपनाम है। अब यदि यह परिभाषित किया गया है (गैर-झूठा) या आपूर्ति किए गए फ़ंक्शन अन्यथा। –

+0

आह, यही कारण है कि मैंने इसे एक उत्तर के रूप में सेट नहीं किया है।कोई टिप्पणी कम करने का कोई तरीका नहीं: पी तो किसी को 'डेट.now' वैरिएबल के बारे में और जानना होगा कि यह कैसे काम करेगा, फिर? – peirix

उत्तर

13

|| operator पहले संकार्य का मूल्यांकन करता है, तो यह अन्यथा सच है या पिछले संकार्य के लिए परिवर्तित किया जा सकता है। यदि वह मौजूद है या घोषित समारोह अन्यथा तो अपने उदाहरण में $timeDate.now हो जाएगा।

+0

पहला गैर-झूठा ऑपरेटर, जो है। –

+10

पहला ऑपरेंड नहीं जिसे वास्तविक में परिवर्तित किया जा सकता है। अंतिम अभिव्यक्ति का उपयोग तब भी किया जाता है जब इसे गलत में परिवर्तित किया जाएगा। – googletorp

0

यह बहुत आम है जावास्क्रिप्ट है। यदि Data.now सही पर मूल्यांकन करता है, तो उस समय $ समय निर्धारित होता है, अन्यथा यह फ़ंक्शन पर सेट होता है।

+0

फ़ंक्शन में बंद होने वाली ब्रेस से जुड़ा हुआ नहीं है, इसलिए फ़ंक्शन पर $ टाइम सेट किया गया है, न कि यह आउटपुट है। – Quentin

+0

आह हाँ आप जल्दबाजी में चूक गए हैं कि जल्दबाजी में। अपडेट किया गया। – googletorp

0

मेरा मानना ​​है कि कोड कह रहा है कि DateTime.now चर मौजूद नहीं है, इसके बजाय +new Date का परिणाम लौटाएं।

+1

यह भी कह सकता है कि डेटटाइम .now '', 0, झूठी, शून्य है –

0

|| ऑपरेटर का उपयोग उदाहरण में $time पर मान असाइन करने के लिए किया जा रहा है।

यदि Date.now झूठे का मूल्यांकन करता है, तो $time को || ऑपरेटर (इस मामले में, एक फ़ंक्शन) के दाईं ओर मान असाइन किया गया है। Date.now सच है, तो यह कम cicuits को मूल्यांकन करता है और $time

17

वहां पहले से ही एक स्वीकृत जवाब है करने के लिए Date.now का मूल्य प्रदान करती है, लेकिन मैं उल्लेख करना चाहते, कि या-ऑपरेटर भी डिफ़ॉल्ट-ऑपरेटर कहा जाता है, तो क्योंकि यह एक बूलियन नहीं लौटाता है, बल्कि इसके बाएं या दाहिने हाथ तर्क के बजाय।

समान हैं और इनमें-ऑपरेटर, जो भी गार्ड-ऑपरेटर कहा जाता है के लिए चला जाता है।

चेक बाहर अधिक जानकारी के लिए crockford's Survey of the JavaScript Programming Language:

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

वर मूल्य = पी & & p.name;/* नाम मान केवल पी से पुनर्प्राप्त किया जाएगा यदि पी के पास कोई मान है, तो त्रुटि से परहेज करें। */

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

मूल्य = वी || 10;/* V के मान का उपयोग करें, लेकिन यदि v में कोई मान नहीं है, तो इसके बजाय 10 का उपयोग करें। */

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