2010-08-25 18 views
31

क्या निम्नलिखित कोड जावा स्क्रिप्ट में क्या करता है: x अपरिभाषित हैvar x = x || क्या करता है {};

var x = x || {}; 
+0

यह सवाल पुराने एक है, अन्य डुप्लिकेट है:

यह अभिव्यक्ति वैध आलसी संपत्ति प्रारंभ मुहावरे के एक उलझन संस्करण है। –

+0

जावास्क्रिप्ट में तार्किक अभिव्यक्तियों का मूल्यांकन बाएं से दाएं किया जाता है और इन्हें निम्नलिखित नियमों का उपयोग करके संभावित "शॉर्ट-सर्किट" मूल्यांकन के लिए परीक्षण किया जाता है: झूठा && (कुछ भी) शॉर्ट सर्किट का मूल्यांकन गलत है। सच || (कुछ भी) शॉर्ट-सर्किट सच है। उपर्युक्त उदाहरण में, यदि एक्स सत्य है, तो एक्स असाइन किया गया मान बन जाता है। यदि एक्स झूठा या अपरिभाषित है, तो दूसरा ऑपरेंड असाइनमेंट बन जाता है जो {} है। – tony

उत्तर

7

(या अशक्त, या किसी अन्य false मूल्य), यह एक खाली वस्तु बन जाता है।

2

असाइन एक नया खाली ऑब्जेक्ट को x अगर यह null (अपरिभाषित, गलत) है या यह मौजूदा है मूल्य नहीं तो null रहते हैं।

40

|| तार्किक OR है।

अभिव्यक्ति

var x = x OR {}; 

तो और अधिक स्पष्ट हो जाना चाहिए।

तो x एक falsy महत्व है (जैसे null, undefined, 0, ""), हम x एक खाली वस्तु {} असाइन करें, अन्यथा सिर्फ वर्तमान मान रखने के लिए। इस की लंबी संस्करण की तरह

var x = x ? x : {}; 
+1

उत्कृष्ट उत्तर। मैं एक सी प्रोग्रामर हूं और इससे कोई मतलब नहीं आया। – jakoh

+2

यदि इससे आपके लिए कोई समझ नहीं आती है, तो आप '!! वैल्यू 'के लिए भी देख सकते हैं जो कि' मूल्य 'की सच्चाई का प्रतिनिधित्व करने वाले बुलियन को लौटता है, कभी-कभी बहुत आसान होता है। –

+0

आपका लंबा संस्करण गलत है: उस मामले पर विचार करें जब x पहले परिभाषित किया गया था और इसे 'शून्य' पर सेट किया गया है। 'var x = x || {}; 'एक्स को किसी ऑब्जेक्ट को फिर से परिभाषित करेगा, जबकि' var x = (टाइपो x! == 'अपरिभाषित')? एक्स: {}; 'नहीं होगा। हालांकि इससे पहले अनुच्छेद सही है। –

0

लगेगा जब तक एक्स परिभाषित या एक मूल्य यह डिफ़ॉल्ट मान के रूप खाली ऑब्जेक्ट ले जाएगा असाइन किया गया है ..

है कि,

for example 
x = 10 
var x = x || {}; 

उत्पादन होना चाहिए

10 

यदि x मान निर्दिष्ट नहीं है। आउटपुट मान होना चाहिए,

undefined 
-1

यदि var x परिभाषित किया गया है तो यह परिभाषित मान होगा। जैसे [object Object]

उदाहरण के लिए खाली ऑब्जेक्ट वरना यह हो जाएगा, निम्नलिखित कोड ब्लॉक में, एक्स 10 हो जाएगा:

var x = 10; 
x = x || {} 

हालांकि, अगर:

var x = x || {}; 

तो x हो जाएगा [object Object]

4

किसी को कभी भी "var x = x || {};" लिखना नहीं चाहिए दर असल।

एकमात्र परिस्थिति जहां यह "var x = {};" के समान नहीं है वह तब होता है जब एक्स को पहले एक ही दायरे में शुरू किया गया था। वह अनैतिक है। नोट:

function() { 
    x = {foo:"bar"}; 
    var x = x || {}; 
} 

रूप में एक ही है, की तुलना में केवल भ्रामक,

function() { 
    var x = {foo:"bar"}; 
    x = x || {}; 
} 

न मामले में वहाँ प्रतीक "x" वैश्विक क्षेत्र में के मान के लिए किसी भी संदर्भ है।

function(foo) { 
    foo.x = foo.x || {}; 
    foo.x.y = "something"; 
} 
संबंधित मुद्दे