2010-11-26 12 views
8

मैं बस अपना मूल जावास्क्रिप्ट ज्ञान बढ़ाना चाहता हूं।जावास्क्रिप्ट में यह क्या है: "var var1 = var1 || []"

कभी कभी मैं इस बयान को देखने, लेकिन मैं नहीं जानता कि यह क्या करता है:

var var1 = var1 || []; 

इसका मतलब है कि करता है क्या और/या क्या इसके लिए है, और आप इसे कैसे प्रयोग करते हैं?

धन्यवाद।

+0

लक्ष्य को पूरा करने के लिए एक दिलचस्प तरीका है। लेकिन यह यादृच्छिक रूप से पहली जगह क्यों शून्य हो जाएगा? – TheLQ

+0

@TheLQ: यह एक वैकल्पिक पैरामीटर हो सकता है। – SLaks

+3

@ स्लक्स: लेकिन फिर इसे 'var' की आवश्यकता नहीं होगी, है ना? – cambraca

उत्तर

3

जावास्क्रिप्ट में लॉजिकल ऑपरेटर वास्तव में दो वस्तुओं में से एक का मूल्यांकन करते हैं। जब आप a || b का उपयोग करते हैं तो यह b का मूल्यांकन करता है यदि a गलत है, या a यदि a सत्य है। इस प्रकार a || []a होगा a कोई मान जो सत्य है, या [] यदि a कोई मान है जो झूठा है।

यह बहुत अधिक if (!a) { a = [] };

+3

झूठी नहीं, बल्कि "झूठी"। अंतर सूक्ष्म लेकिन महत्वपूर्ण है। जावास्क्रिप्ट में गलत मूल्य 0, शून्य, झूठी, एक खाली स्ट्रिंग, अपरिभाषित, या NaN हो सकता है। 'शून्य || 5' रिटर्न '5', भले ही' शून्य! = झूठा '। –

1

|| ऑपरेटर अपने ऑपरेटरों के पहले "सत्य" का मूल्यांकन करता है।

[] एक खाली सरणी है। ([ "Hi!" ] एक स्ट्रिंग की एक सरणी है)

इसलिए, अभिव्यक्ति x || []x का मूल्यांकन करती है यदि यह "सत्य" या खाली सरणी है तो यह नहीं है।

यह var1 पैरामीटर वैकल्पिक होने की अनुमति देता है।

7

यह var1 पर एक खाली सरणी निर्दिष्ट करता है, यदि इसका बूलियन प्रतिनिधित्व गलत है (उदाहरण के लिए इसे प्रारंभ नहीं किया गया है)।

+2

जेएस में झूठे मूल्य: http://www.joeyjavas.com/2007/08/04/javascript-true-false-checking-for -boolean-मूल्यों /। मैं कहूंगा कि यदि "मान सत्य नहीं है", लेकिन ... –

5

मूल रूप से अगर var1NULL या false है, var1 एक खाली array करने के लिए सेट कर दिया जाएगा।

+3

झूठी मानों की अपूर्ण सूची। देखें http://www.joeyjavas.com/2007/08/04/javascript-true-false-checking-for-boolean-values/ (भी, नल कीवर्ड है, न्यूल सिर्फ एक पहचानकर्ता है) –

+0

हाँ, धन्यवाद उस! – Zlatev

+0

मैं वस्तु प्रकार के बीच एक अंतर (जो कुछ भी हो सकता है) और अभिव्यक्ति प्रकार (जो बूलियन है) के बीच एक अंतर देखना पसंद करेंगे।अभिव्यक्ति में var1 का मान एक बूलियन (सत्यता के लिए मूल्यांकन किया जाना) में परिवर्तित हो जाता है (var1 || [])। – Zach

11

असल में, ऐसा लगता है कि एक चर var1 पहले से मौजूद है और "सत्य" है। यदि ऐसा है, तो यह स्थानीय var1 को अपने मूल्य का उपयोग करता है; यदि नहीं, तो यह एक खाली सरणी आवंटित हो जाता है।

यह काम करता है क्योंकि जावास्क्रिप्ट || ऑपरेटर पहले सच्चाई ऑपरेंड का मूल्य देता है, या आखिरी वाला, यदि कोई सत्य नहीं है। var1 || var2var1 देता है यदि यह सच है, या var2 अन्यथा।

var somevar; 
somevar = 5 || 2; // 5 
somevar = 0 || 2; // 2 
somevar = 0 || null; // null 

मूल्यों है कि "truthy" नहीं हैं: false, 0, undefined, null, "" (रिक्त स्ट्रिंग), और NaN

कुछ उदाहरण हैं। रिक्त सरणी और वस्तुओं को जावास्क्रिप्ट में सच्चाई माना जाता है, कुछ अन्य भाषाओं के विपरीत।

3

जावास्क्रिप्ट या (||) कुछ अन्य भाषाओं के लिए थोड़ा अलग काम करता है, यह बूलियन के बजाय पहला "सत्य" मान देता है। इस मामले में यह कहने के लिए प्रयोग किया जा रहा है "var1 से var1 का मान सेट करें, लेकिन यदि वह मान" झूठा "है तो इसे [] पर सेट करें"।

यह अक्सर एक चर के लिए "डिफ़ॉल्ट" मान सेट करने के लिए प्रयोग किया जाता है जो पहले से सेट हो सकता है या नहीं, जैसे किसी फ़ंक्शन के लिए तर्क।

1

कथन var1 को एक खाली सरणी निर्दिष्ट करता है।


लंबा उत्तर और स्पष्टीकरण:

यह इसलिए होता है क्योंकि var1 उस समय आरंभ नहीं किया है।गैर-प्रारंभिक एक झूठा मूल्य है।

var1 = var1 || []; 

var1 आरंभ नहीं किया जाता है तो यह एक खाली सरणी हो जाता है, यह अगर एक खाली सरणी कुछ भी नहीं के रूप में अपनी, एक खाली सरणी करने के लिए आवंटित करता है, तो var1 false है होता है, है null, या:

इस बयान लेने any other value that javascript things of as false, यह एक खाली सरणी बन जाता है, अगर var1 कुछ अन्य मूल्य है, तो कुछ भी नहीं होता है क्योंकि यह स्वयं को सौंपा गया है। (लिंक के लिए धन्यवाद पीएसटी)।

संक्षेप में, यह एक बेवकूफ बयान है जो न तो पठनीय और न ही उपयोगी है, लेकिन आप यह जानना चाहते हैं कि इसका क्या अर्थ है। :)

1

उपयोग करने के लिए एक ओर जहां यह 'के रूप में एक मूर्खतापूर्ण बयान किया जा रहा है', मैं निम्नलिखित दो काउंटरों पेश बताया गया है स्पष्ट:

(बस उनके पैर की उंगलियों पर लोगों रखने के लिए और सुदृढ़ करने के लिए जावास्क्रिप्ट के "स्पष्ट विवरण" हैं।)

1)

var चर पहले से ही local है। जैसे

function x (y) { 
    var y = y || 42 // redeclaration warning in FF, however it's "valid" 
    return y 
} 
x(true) // true 
x()  // 42 

2)

var समारोह चौड़ा एनोटेशन (यह शीर्ष करने के लिए "फहराया" है) और उपयोग के बिंदु पर नहीं एक घोषणा है।

var var1 
if (!var1) { 
    var1 = [] 
} 
:

function x() { 
    y = true 
    var y = y || 42 
} 
x()  // true 

मैं पूर्ववर्ती दोनों में से किसी की तरह कोड पसंद नहीं है, लेकिन ...

उत्थापन की वजह से

, और अनुमति दी फिर से घोषणाओं, पोस्ट में कोड इन अर्थ विज्ञान है

संपादित करें मुझे पता नहीं है कि एड.5 में "सख्त मोड" उपरोक्त को कैसे प्रभावित करता है।

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