2012-01-26 21 views
22

wtfjs पर, मैंने पाया कि निम्नलिखित कानूनी जावास्क्रिप्ट है।जावास्क्रिप्ट "टुपल" नोटेशन: इसका क्या मतलब है?

",,," == Array((null,'cool',false,NaN,4)); // true 

तर्क (null,'cool',false,NaN,4) मेरे लिए एक टपल की तरह दिखता है, लेकिन जावास्क्रिप्ट tuples है नहीं है!

मेरे जावास्क्रिप्ट कंसोल में कुछ त्वरित परीक्षण निम्नलिखित उत्पन्न करते हैं।

var t = (null,'cool',false,NaN,4); // t = 4 
(null,'cool',false,NaN,4) === 4; // true 
(alert('hello'), 42); // shows the alert and returns 42 

यह बयान के अर्धविराम ; अलग की गई सूची की तरह व्यवहार करने के लिए वास्तव में, बस पिछले बयान का मूल्य लौटने प्रकट होता है।

क्या कोई संदर्भ है जो इस वाक्यविन्यास और इसके अर्थशास्त्र का वर्णन करता है? यह क्यों अस्तित्व में है, यानी इसका उपयोग कब किया जाना चाहिए?

+0

यह अल्पविराम ऑपरेटर है: http://javascriptweblog.wordpress.com/2011/04/04/the-javascript-comma-operator/ – Lepidosteus

+1

कॉमा ऑपरेटर भी (एबी) कार्यों की श्रृंखला चलाने के लिए उपयोग किया जा सकता है एक टर्नरी शाखा के अंदर, क्योंकि यह आखिरी बयान के परिणाम को वापस कर देगा: 'var a = isTrue? (बी = एफ (सी), जी (बी)): (बी = जी (सी), एफ (बी)) '। शायद ही कभी बुद्धिमान, लेकिन कभी-कभी उपयोगी होता है यदि पठनीयता पर बहुत संक्षिप्त कोड पसंद किया जाता है, या त्वरित डिबगिंग उद्देश्यों के लिए। – Fx32

+0

इसे जावास्क्रिप्ट में 'अभिव्यक्ति' कहा जाता है, यह केवल अल्पविराम ऑपरेटर का प्रभाव नहीं है हालांकि यह एक छोटा सा हिस्सा निभाता है; अल्पविराम ऑपरेटर की वजह से यह अभिव्यक्ति हल हो गई है। आप किसी भी मूल्यांकन अभिव्यक्ति के किसी भी परिवर्तनीय चर के लिए एक मूल्य निर्धारित कर सकते हैं। भले ही वह अभिव्यक्ति अपरिभाषित है। – Relic

उत्तर

30

आप comma operator के प्रभाव को देख रहे हैं (इस मामले 3 में) होगा ।

अल्पविराम ऑपरेटर अपने दोनों ऑपरेटरों (बाएं से दाएं) का मूल्यांकन करता है और दूसरे ऑपरेंड का मूल्य देता है।

परिणामी मूल्य जब a,b,c,...,n मूल्यांकन किया जाता है हमेशा सबसे दायीं ओर अभिव्यक्ति के मूल्य हो जाएगा, हालांकि श्रृंखला में सभी भाव अभी भी मूल्यांकन किया जाता है (बाएं से दाएं)।

+0

धन्यवाद, शब्द 'अल्पविराम ऑपरेटर' वह है जिसे मैं ढूंढ रहा था। – Grilse

1

इस alert((null,'cool',false,NaN,4)) आज़माएं और फिर आप देख सकते हैं।

demo

कारण क्योंकि अल्पविराम ऑपरेटर सभी बयानों का मूल्यांकन करता है और पिछले एक वापसी है।

इस लाइन की

सोचें: a = 1, b = 2, c = 3; यह प्रत्येक अभिव्यक्ति चलेंगे संक्षेप में यह तुम क्या चाहते करने के लिए चर सेट और पिछले मान

8

जैसा कि पहले से ही समझाया गया है कि यह व्यवहार , ऑपरेटर के कारण होता है। इसके कारण अभिव्यक्ति (null,'cool',false,NaN,4) हमेशा 4 का मूल्यांकन करेगी। आवंटित 4 तत्वों के साथ नई सरणी बनाता है - तो हम

",,," == Array(4) 

Array(4) है। स्ट्रिंग के साथ तुलना के समय इस सरणी को स्ट्रिंग में परिवर्तित कर दिया गया है जैसे यह Array(4).toString() के साथ होगा। सरणी toString के लिए इस सरणी पर join(',') विधि की तरह कार्य करता है। इसलिए 4 तत्वों की खाली सरणी के लिए स्ट्रिंग ",,," का उत्पादन होगा।