दिलचस्प पोस्ट
एक बड़े शब्द अनुक्रम में शीर्ष कश्मीर के सबसे अधिक शब्द खोजने के लिए सबसे अधिक कुशल तरीका पंक्तियों का चयन करना जहां स्तंभ में 'hsa ..' की तरह एक स्ट्रिंग है (आंशिक स्ट्रिंग मैच) jQuery, एक्सएमएल को विकल्प नामक नोड्स के साथ पार्स नहीं करेगा एक्सटेंशन विधि से अपवाद या NullReferenceException? ब्राउज़र के पसंदीदा / बुकमार्क को जावास्क्रिप्ट से जोड़ें लेकिन सभी ब्राउज़रों के लिए (मेरा Chrome में काम नहीं करता है)? जावास्क्रिप्ट में एक वैरिएबल वैल्यू से ऑब्जेक्ट प्रॉपर्टी कैसे बनाऊं? एक इनपुट स्ट्रीम से एंड्रॉइड पढ़ना कुशलता से क्यों गिट कहते हैं "खींचो संभव नहीं है क्योंकि आपने फ़ाइलें अनारोल्ड कर दी हैं"? क्या NSUserDefaults में मूल्यों को संचय में कोई सीमा है? Preg_replace () और preg_replace_callback के साथ संशोधक बदलें एंड्रॉइड में मैं कैसे गतिशील रूप से दृश्य की स्थिति निर्धारित कर सकता हूं? MySQL पाठ बनाम ब्लॉब बनाम कलोब पाठ फ़ाइल जावा में विशाल डेटा लिखने का सबसे तेज़ तरीका यह विवेक विंडोज फॉर्म में काम नहीं कर रहा है .jpg का उपयोग करते हुए jQuery UI स्वत: पूर्ण बाँधें ()

जावास्क्रिप्ट में असाइनमेंट को नष्ट करना

जैसा कि जावास्क्रिप्ट 1.7 के लिए मोज़िला परिवर्तक में देखा जा सकता है, उन्होंने नाशिक असाइनमेंट को जोड़ दिया है। अफसोस की बात है कि मैं सिंटैक्स का बहुत शौक नहीं हूं (क्यों एक और बी दो बार लिखें?):

var a, b; [a, b] = f(); 

ऐसा कुछ बहुत बेहतर होगा:

 var [a, b] = f(); 

यह अभी भी पीछे संगत होगा। पायथन-जैसी विध्वंस पिछड़ा संगत नहीं होगा।

वैसे भी जावास्क्रिप्ट 1.5 के लिए सबसे अच्छा समाधान है कि मैं साथ आने में सक्षम है:

 function assign(array, map) { var o = Object(); var i = 0; $.each(map, function(e, _) { o[e] = array[i++]; }); return o; } 

कौन सा काम करता है:

 var array = [1,2]; var _ = assign[array, { var1: null, var2: null }); _.var1; // prints 1 _.var2; // prints 2 

लेकिन यह वास्तव में बेकार है क्योंकि _ का कोई अर्थ नहीं है नामों को स्टोर करने के लिए यह सिर्फ एक खाली शेल है लेकिन दुख की बात है क्योंकि जावास्क्रिप्ट में पॉइंटर्स नहीं हैं प्लस पक्ष पर आप मूल मान निर्दिष्ट कर सकते हैं यदि मान का मिलान नहीं किया जाता है। यह भी ध्यान रखें कि यह समाधान सरणी को टुकड़ा करने की कोशिश नहीं करता है। तो आप कुछ ऐसा नहीं कर सकते {first: 0, rest: 0} । लेकिन यह आसानी से किया जा सकता है, यदि कोई ऐसा व्यवहार चाहता है

बेहतर समाधान क्या है?

वेब के समाधान से एकत्रित समाधान "जावास्क्रिप्ट में असाइनमेंट को नष्ट करना"

सबसे पहले, var [a, b] = f() सिर्फ जावास्क्रिप्ट में ठीक काम करता है 1.7 – यह कोशिश करो!

दूसरा, आप with() थोड़े से उपयोग सिंटैक्स का उपयोग कर सकते हैं:

 var array = [1,2]; with (assign(array, { var1: null, var2: null })) { var1; // == 1 var2; // == 2 } 

बेशक, यह आपको मौजूदा चर के मूल्यों को संशोधित करने की अनुमति नहीं देगा, इसलिए आईएमएचओ यह जावास्क्रिप्ट 1.7 की सुविधा से बहुत कम उपयोगी है। कोड में मैं अब लिख रहा हूं, मैं ऑब्जेक्ट सीधे सीधे लौटाता हूं और अपने सदस्यों का संदर्भ देता हूं – मैं 1.7 सुविधाओं की अधिकता के लिए इंतजार करूँगा।

आपको डमी "_" चर की आवश्यकता नहीं है आप विंडो ऑब्जेक्ट स्कोप का उपयोग कर सीधे "ग्लोबल" चर बना सकते हैं:

 window["foo"] = "bar"; alert(foo); // Gives "bar" 

यहां कुछ और बिंदु हैं:

  • मैं इस समारोह का नाम "असाइन" नहीं करता क्योंकि यह एक सामान्य शब्द है।
  • जेएस 1.7 सिंटैक्स जैसी अधिक निकटता के लिए, मैं फ़ंक्शन को पहला तर्क के रूप में गंतव्य लेता हूं और दूसरा तर्क के रूप में स्रोत लेता हूं।
  • गंतव्य चर को पारित करने के लिए किसी आशय का उपयोग करना बहुत अच्छा है, लेकिन जेएस 1.7 के साथ भ्रमित किया जा सकता है जहां गंतव्य वास्तव में एक वस्तु है और एक सरणी नहीं है। मैं बस एक स्ट्रिंग के रूप में चर नामों की अल्पविराम से सीमांकित सूची का उपयोग करना पसंद करता हूं।

यहां बताया गया है कि मैं किसके साथ आया हूं:

 function destructure(dest, src) { dest = dest.split(","); for (var i = 0; i < src.length; i++) { window[dest[i]] = src[i]; } } var arr = [42, 66]; destructure("var1,var2", arr); alert(var1); // Gives 42 alert(var2); // Gives 66 

यहाँ मैं PHPstorm 10 में क्या किया है:

फ़ाइल -> सेटिंग -> भाषाएं और फ़्रेमवर्क -> …

… जावास्क्रिप्ट 1.8.5 जावास्क्रिप्ट भाषा संस्करण को सेट करें …

-> लागू करें क्लिक करें

मानक जावास्क्रिप्ट में हम सभी प्रकार की कुटिलता के लिए उपयोग करते हैं, और एक मध्यवर्ती चर का उपयोग करके विध्वंस करने वाले असाइनमेंट का अनुकरण करना बहुत बुरा नहीं है:

 function divMod1(a, b) { return [ Math.floor(a / b), a % b ]; } var _ = divMod1(11, 3); var div = _[0]; var mod = _[1]; alert("(1) div=" + div + ", mod=" + mod ); 

हालांकि मुझे लगता है कि निम्नलिखित पैटर्न अधिक सोनात्मक है:

 function divMod2(a, b, callback) { callback(Math.floor(a / b), a % b); } divMod2(11, 3, function(div, mod) { alert("(2) div=" + div + ", mod=" + mod ); }); 

ध्यान दें, कि दो परिणामों को एक सरणी के रूप में लौटने के बजाय, हम उन्हें कॉलबैक फ़ंक्शन में तर्क के रूप में पास करते हैं।

( http://jsfiddle.net/vVQE3/ पर चल रहे कोड देखें)