जवाबों:
यहाँ बहुत कुछ चल रहा है, लेकिन मूल रूप से, यह अल्पविराम ऑपरेटर के लिए आता है ।
अल्पविराम ऑपरेटर अपने दोनों ऑपरेंड (बाएं से दाएं) का मूल्यांकन करता है और दूसरे ऑपरेंड का मान लौटाता है।
यह कोड:
aaa = 1,2,3
के बराबर है:
aaa = 1;
2;
3;
तो aaaअनुमानित रूप से घोषित किया गया है और 1. मान दिया गया है। ध्यान दें कि कंसोल पर आउटपुट अंतिम विवरण का परिणाम है, 3।
यह कोड:
var bbb = 1,2,3
एक सिंटैक्स त्रुटि है क्योंकि वैरिएबल घोषणाओं में कॉमा का उपयोग एक ही पंक्ति में कई चर घोषित करने के लिए किया जाता है। जैसा कि एमडीएन लेख बताता है,
ध्यान दें कि में अल्पविराम
varबयान है न अल्पविराम ऑपरेटर है, क्योंकि यह एक अभिव्यक्ति के भीतर मौजूद नहीं है। बल्कि,varउनमें से कई को एक में संयोजित करने के लिए बयानों में यह एक विशेष चरित्र है ।
तो यह कोड लगभग बराबर है:
var bbb = 1;
var 2;
var 3;
बेशक, 2एक वैध पहचानकर्ता नहीं है, इसलिए यह उस बिंदु पर विफल रहता है।
यह कोड:
var bbb = (1,2,3)
पहले के समान है, सिवाय इसके कि संख्यात्मक मान एक कोष्ठक में लिपटे हुए हैं, पहले उनका मूल्यांकन किया जाता है। तो यह पूरी तरह से इसके बराबर है:
1;
2;
var bbb = 3;
=में var bbb = 1;के =रूप में ही नहीं है aaa = 1;- वे व्याकरण में विभिन्न प्रस्तुतियों (प्रारंभिक बनाम AssignmentExpression) से आते हैं और सिर्फ एक ही टोकन का उपयोग करने के लिए होता है।
a = 1, 2, 3वह कोष्ठबद्ध किया जा सकता है, जैसा (a = 1), 2, 3कि मूल्यांकन करता है a = 1; 2; 3(और रिटर्न 3, जैसे b = (a = 1, 2, 3)3 से बी असाइन करेगा)। इसके विपरीत, के a = (1, 2, 3)रूप में मूल्यांकन करता है 1; 2; a = 3और 3 लौटाता है
(1 + 2) * 3, 1 + 2पहले मूल्यांकन किया जाता है और उस अभिव्यक्ति के परिणाम को बाकी मूल्यांकन के लिए बाहरी अभिव्यक्ति में बदल दिया जाता है।
जावास्क्रिप्ट में कॉमा के कई उपयोग हैं। अभिव्यक्ति में:
a = 1, 2, 3;
यह एक ऑपरेटर है जो बस अपने दाहिने हाथ का तर्क देता है। लेकिन यह varघोषणाओं के वाक्य-विन्यास का भी हिस्सा है , जो हैं:
var var1 [ = val1 ], var2 [ = val2 ], var3 [ = val3 ], ...;
(जहां [...]इसका मतलब है कि वह हिस्सा वैकल्पिक है)। आपकी varघोषणा अल्पविराम के बाद चर नामों को याद कर रही है, इसलिए यह पार्स नहीं करता है। आपको वह प्रभाव मिल सकता है जो आप चाहते थे:
var a = (1, 2, 3);
कोष्ठक अल्पविरामों को परिवर्तनीय घोषणाओं के बीच परिसीमाकों के बजाय संचालकों के रूप में माना जाता है।
आपके उदाहरण में, अल्पविराम का उपयोग दो संदर्भों में किया जाता है:
var बयानvarकथन का वाक्य विन्यास है:
var varname1 [= value1 [, varname2 [, varname3 ... [, varnameN]]]];
यहाँ, अल्पविराम का उपयोग वैरिएबल नाम-मान युग्मों को अलग करने के लिए किया जाता है। निम्नलिखित काम नहीं करेगा क्योंकि एक चर नाम अंक के साथ शुरू नहीं हो सकता है ( पहचानकर्ता नाम देखें ):
var bbb = 1, 2, 3;
// SyntaxError: Unexpected number
अल्पविराम ऑपरेटर अपने दोनों ऑपरेंड (बाएं से दाएं) का मूल्यांकन करता है और दूसरे ऑपरेंड का मान लौटाता है। निम्न अभिव्यक्तियाँ निम्नानुसार काम करती हैं:
aaa = 1, 2, 3;
aaa = 1, 2 पैदावार २
aaa = 1पहले मूल्यांकन किया जाता है क्योंकि =की तुलना में उच्च प्राथमिकता है,2, 3 पैदावार ३var bbb = (1, 2, 3);
(1, 2, 3)पैदावार3bbbको मान दिया गया है3aaa = 1, 2, 3=> अल्पविराम ऑपरेटर अलग करने के लिए निम्नलिखित 3 बयानों प्रयोग किया जाता है: aaa=1, 2और 3। अल्पविराम ऑपरेटर का परिणाम अंतिम विवरण 3 का मूल्य है। हालांकि, आआ को 1 का मान दिया गया है, जैसा कि ओपी के स्क्रीनशॉट से स्पष्ट रूप से देखा जा सकता है। इसका कारण ऑपरेटर की पूर्ववर्तीता है, जिसमें कोमा संचालक की सबसे कम वरीयता है।
पहले मामले में:
आआआ = 1,2,3
अल्पविराम अभिव्यक्ति विभाजक के रूप में कार्य करता है। यह करने के लिए एक कार्य करता है aaa, तो यह गणना करता है 2और इसे त्याग देता है, फिर यह गणना करता है 3और इसे त्याग देता है।
क्षण में:
var bbb = 1,2,3
varकीवर्ड जावास्क्रिप्ट संकलक है कि एक के बाद अगली बात कहता है ,एक और चर नाम होना चाहिए। यह नहीं मिल रहा है, इसलिए यह मर जाता है और gags।
var bbb = (1,2,3)
यहाँ, संकलक पहले इसका मूल्यांकन 1और उपेक्षा करता है। तब यह उसका मूल्यांकन 2और उपेक्षा करता है। फिर यह मूल्यांकन करता है 3और इसे स्टैक पर छोड़ दिया जाता है ताकि इसे सौंपा जाएbbb
अलग-अलग अभिव्यक्तियों के लिए अल्पविराम का उपयोग करना आम नहीं है, यह कभी-कभी चीजों में उपयोगी होता है जैसे कि forदिखता है।
for (i = 0, l = 10; i < l; i++) {
console.log(i);
}
var a1,a2,a3;बस तीन स्थानीय चर घोषित करेगा।