"जावास्क्रिप्ट: शून्य (0)" का क्या अर्थ है?


1378
<a href="javascript:void(0)" id="loginlink">login</a>

मैंने ऐसे hrefकई बार देखे हैं , लेकिन मुझे नहीं पता कि इसका क्या मतलब है।


12
javascript:कई URI योजनाओं में से एक है: en.wikipedia.org/wiki/URI_scheme , जैसे data:
सिरो सेंटिल्ली 冠状 病毒 iro i 法轮功 '

3
आप बस href="javascript:"उसी उद्देश्य के लिए उपयोग कर सकते हैं । जैसा कि इस प्रश्न के उत्तर में कहा गया है , यह void(0)भाग मूल रूप से उन ब्राउज़र के शुरुआती संस्करणों के लिए javascript:था जहां URI हैंडलिंग अलग थी। लेकिन अब मुझे ऐसा वर्जन भी नहीं मिला, जहां शॉर्टहैंड काम न करे, कम से कम IE7 इसे सही तरीके से हैंडल करता है।
उपयोगकर्ता

1
मैंने href = "जावास्क्रिप्ट: //" भी देखा है, क्या यह बेहतर है?
रोशनीबाई

href = "जावास्क्रिप्ट: //" मेरे लिए काम नहीं कर रहा है शून्य (0) पूरी तरह से काम करता है।
सैंडिप

जवाबों:


1040

voidऑपरेटर दिया अभिव्यक्ति और फिर रिटर्न का मूल्यांकन करता है undefined

voidऑपरेटर अक्सर प्राप्त करने के लिए केवल प्रयोग किया जाता है undefinedआदिम मूल्य, आमतौर पर उपयोग करते हुए " void(0)" (जो के बराबर है " void 0")। इन मामलों में, वैश्विक चर undefined का उपयोग इसके बजाय किया जा सकता है (यह मानते हुए कि इसे गैर-डिफ़ॉल्ट मान को नहीं सौंपा गया है)।

एक स्पष्टीकरण यहां दिया गया है: voidऑपरेटर

hrefलिंक के साथ आप ऐसा करना चाहते हैं इसका कारण यह है कि आम तौर पर, एक javascript:URL ब्राउज़र को उस जावास्क्रिप्ट के मूल्यांकन के परिणाम के एक सादे पाठ संस्करण पर पुनर्निर्देशित करेगा। लेकिन अगर परिणाम है undefined, तो ब्राउज़र उसी पृष्ठ पर रहता है। void(0)एक छोटी और सरल स्क्रिप्ट है जिसका मूल्यांकन करता है undefined


9
इसका क्या मतलब है जब href को "अपरिभाषित आदिम मूल्य" दिया जाता है?
OMG

7
"सामान्य रूप से एक जावास्क्रिप्ट: url उस जावास्क्रिप्ट का मूल्यांकन करने के परिणाम के एक सादे पाठ संस्करण में ब्राउज़र को रीडायरेक्ट करेगा। क्या आप यहां एक उदाहरण बना सकते हैं? मैंने ऐसा उपयोग कभी नहीं देखा है।"
OMG

87
फ़ीनिक्स किस बारे में बात कर रहा है, इसका एक उदाहरण <a href="javascript: dosomething();"> यह है अब! </a>। यदि डोसोमेस्टिंग झूठी हो जाती है, तो लिंक पर क्लिक करने से ब्राउज़र को पृष्ठ से बाहर निकलने और "झूठा" प्रदर्शित करने का कारण होगा। हालाँकि ... <a href="javascript: dosomething(); void(0)"> अब यह करें! </a> समस्या से बचा जाता है। आगे बढ़ो और जावास्क्रिप्ट पेस्ट करें: 1 + 1; आपके ब्राउज़र में पता बार। ब्राउज़र को "2"
ब्रेटन

9
क्योंकि शून्य एक अपरिपक्व ऑपरेटर है। शून्य कोई मान नहीं है, न ही यह एक फ़ंक्शन है। इसे अपने दाईं ओर संचालित करने के लिए एक मूल्य की आवश्यकता होती है, या यह एक त्रुटि फेंक देगा।
ब्रेटन

14
त्रुटि कंसोल में देखने का प्रयास करें? यह निश्चित रूप से एक वाक्यविन्यास त्रुटि फेंकता है। यह अमान्य जावास्क्रिप्ट है। डगलस क्रॉकफोर्ड ने एक ही ऑपरेटर / फ़ंक्शन / मूल्य भ्रम के कारण शून्य से दूर रहने की पुष्टि की है, जिससे निपटने के लिए बहुत महंगा है।
ब्रेटन

435

तकनीकी उत्तर के अलावा, javascript:voidलेखक का अर्थ है डूइंग इट गलत।

javascript:छद्म URL (*) का उपयोग करने का कोई अच्छा कारण नहीं है । व्यवहार में यह भ्रम पैदा करेगा या त्रुटियों को किसी को 'बुकमार्क लिंक', 'नए टैब में खुले लिंक' और इसी तरह की चीजों की कोशिश करनी चाहिए। यह काफी बार होता है, अब लोगों को मध्य-क्लिक-फॉर-न्यू-टैब की आदत हो गई है: यह एक लिंक की तरह दिखता है, आप इसे एक नए टैब में पढ़ना चाहते हैं, लेकिन यह एक वास्तविक लिंक नहीं है। और मध्य-क्लिक किए जाने पर रिक्त पृष्ठ या JS त्रुटि जैसे अवांछित परिणाम देता है।

<a href="#">एक आम विकल्प है जो यकीनन कम खराब हो सकता है। हालाँकि, आपको return falseअपने onclickईवेंट हैंडलर से लिंक के अनुसरण और पेज के शीर्ष तक स्क्रॉल करने से रोकने के लिए याद रखना चाहिए ।

कुछ मामलों में लिंक को इंगित करने के लिए एक वास्तविक उपयोगी स्थान हो सकता है। उदाहरण के लिए यदि आपके पास एक नियंत्रण है, तो आप उस पर क्लिक कर सकते हैं जो पहले से छिपा हुआ है <div id="foo">, इससे <a href="#foo">लिंक करने के लिए उपयोग करने के लिए कुछ समझ में आता है। या अगर एक ही काम करने का एक गैर-जावास्क्रिप्ट तरीका है (उदाहरण के लिए, 'thispage.php? Show = foo' जो शुरू से दिखने वाला फू सेट करता है), तो आप उससे लिंक कर सकते हैं।

अन्यथा, यदि कोई लिंक केवल कुछ स्क्रिप्ट को इंगित करता है, तो यह वास्तव में लिंक नहीं है और इसे इस तरह से चिह्नित नहीं किया जाना चाहिए। सामान्य दृष्टिकोण को जोड़ने के लिए होगा onclickएक करने के लिए <span>, <div>या एक <a>एक के बिना hrefयह स्पष्ट आप उस पर क्लिक कर सकते हैं बनाने के लिए किसी तरह से और यह शैली। यह वही है जो StackOverflow [लेखन के समय किया था; अब यह उपयोग करता है href="#"]।

इसका नुकसान यह है कि आप कीबोर्ड नियंत्रण खो देते हैं, क्योंकि आप एक स्पैन / डिव / नंगे पर टैब नहीं कर सकते हैं या इसे अंतरिक्ष के साथ सक्रिय नहीं कर सकते हैं। क्या यह वास्तव में नुकसान है, इस बात पर निर्भर करता है कि तत्व किस तरह की कार्रवाई करने का इरादा रखता है। आप कुछ प्रयास के साथ, tabIndexतत्व में एक जोड़कर और अंतरिक्ष स्पेसप्रेस के लिए सुनकर कीबोर्ड की सहभागिता की नकल करने का प्रयास कर सकते हैं । लेकिन यह कभी भी 100% वास्तविक ब्राउज़र व्यवहार को पुन: उत्पन्न नहीं करता है, कम से कम नहीं क्योंकि विभिन्न ब्राउज़र कीबोर्ड पर अलग-अलग तरीके से प्रतिक्रिया कर सकते हैं (गैर-दृश्य ब्राउज़रों का उल्लेख नहीं करने के लिए)।

यदि आप वास्तव में एक ऐसा तत्व चाहते हैं जो लिंक नहीं है, लेकिन जिसे माउस या कीबोर्ड द्वारा सामान्य रूप से सक्रिय किया जा सकता है, तो आप जो चाहते हैं वह एक है <button type="button">(या <input type="button">साधारण पाठ्य सामग्री के लिए बस उतना ही अच्छा है)। आप इसे पुनर्स्थापित करने के लिए हमेशा CSS का उपयोग कर सकते हैं, इसलिए यदि आप चाहें तो यह एक बटन की तुलना में अधिक लिंक जैसा दिखता है। लेकिन चूंकि यह एक बटन की तरह व्यवहार करता है, इसलिए वास्तव में आपको इसे चिह्नित करना चाहिए।

(*: साइट संलेखन में, वैसे भी। जाहिर है कि वे बुकमार्कलेट के लिए उपयोगी हैं। javascript:छद्म-URL एक वैचारिक विचित्रता है: एक लोकेटर जो किसी स्थान को इंगित नहीं करता है, लेकिन इसके बजाय वर्तमान स्थान के भीतर सक्रिय कोड को कॉल करता है। उन्होंने बड़े पैमाने पर सुरक्षा का कारण बनाया है। ब्राउज़र और वेबैप दोनों के लिए समस्याएं, और नेटस्केप द्वारा कभी भी आविष्कार नहीं किया जाना चाहिए। "


7
@Bobince द्वारा उत्कृष्ट पोस्ट के अलावा: मैंने कुछ शोध कुछ महीने पहले एस के क्रॉस-ब्राउज़र कीबोर्ड नेवीबिलिटी पर किए हैं href, जिनमें क्वर्क और साइड इफेक्ट शामिल हैं; आप में से कुछ इसे उपयोगी पा सकते हैं: jakub-g.github.com/accessibility/onclick
jakub.g

2
@ThinkBonobo: एसओ 2009 के बाद से कुछ बिंदु पर बदल गया है! अपडेट किया गया।
बॉबिन

59
यह एक राय है और इस सवाल का जवाब नहीं है। void(0)कई मामलों में जरूरत है; "#" एक हैक है जो अपने साथ समस्याओं की एक पूरी मेजबानी लाता है (यह मेरे द्वारा लिखे जा रहे ऐप में काम नहीं करेगा, जिसने मुझे इस पृष्ठ पर लाया है)।
felwithe

12
मैं @feltwithe से सहमत हूं। क्यों दूसरों को "यह एक विशेष तरीका है" के लिए मजबूर करें? प्रोग्रामिंग के 15 वर्षों में मुझे अभी तक यह देखना है कि आदर्श वाक्य "यह हमेशा इस तरह से किया जाना चाहिए" लोगों को अपने स्वयं के निर्माण की गड़बड़ी की ओर नहीं ले जाता है
स्टीवन डी सलास

4
UX के परिप्रेक्ष्य से फ़्रेग्मेंट-आईडी का उपयोग करना एक बुरा विचार है क्योंकि यह दस्तावेज़ को पृष्ठ के शीर्ष पर कूदने का कारण बनता है जब तक कि preventDefaultइसका उपयोग नहीं किया जाता है। कृपया इसे एंकर के रूप में बटन के रूप में उपयोग किए जाने की स्थिति में न करें।
जोश हबदास

124

इसका मतलब है कि यह कुछ नहीं करेगा। यह कोशिश है कि लिंक कहीं 'नेविगेट' न हो। लेकिन यह सही तरीका नहीं है।

आप वास्तव में सिर्फ घटना return falseमें होना चाहिए onclick, जैसे:

<a href="#" onclick="return false;">hello</a>

आमतौर पर इसका उपयोग तब किया जाता है जब लिंक कुछ 'जावास्क्रिप्ट-वाई' काम कर रहा हो। जैसे AJAX फॉर्म पोस्ट करना, या किसी इमेज को स्वैप करना, या जो भी हो। उस स्थिति में आप बस जो भी फ़ंक्शन करते हैं उसे रिटर्न कहा जाता है false

हालांकि, आपकी वेबसाइट को पूरी तरह से भयानक बनाने के लिए, आम तौर पर आप एक लिंक शामिल करेंगे जो एक ही कार्रवाई करता है, अगर यह ब्राउज़ करने वाला व्यक्ति जावास्क्रिप्ट को नहीं चलाने के लिए चुनता है।

<a href="backup_page_displaying_image.aspx"
   onclick="return coolImageDisplayFunction();">hello</a>

33
नहीं, नहीं - गलत झूठ डिफ़ॉल्ट व्यवहार को रोक देगा, इसलिए # दिखाई नहीं देगा
मगंर

22
जावास्क्रिप्ट: url प्रोटोकॉल एक डिफैक्टो मानक है, वास्तविक मानक नहीं है। तो href = "#" onclick = "असत्य लौटें;" मानकों के अनुरूप है, जबकि href = "जावास्क्रिप्ट: शून्य (0)" नहीं है, क्योंकि कोई आधिकारिक मानक नहीं है जो यह निर्दिष्ट करता है कि क्या करना चाहिए।
ब्रेटन

10
उस के ऊपर, डगलस क्रॉकफोर्ड को शून्य पसंद नहीं है, इसलिए jslint इसके बारे में शिकायत करेगा। मूल रूप से, चूंकि शून्य एक ऑपरेटर है, और मूल्य नहीं है, यह नरक के रूप में भ्रमित है, और इस तरह के कई प्रश्नों को जन्म देता है। इससे पूरी तरह से बचने के लिए बेहतर है। haha।
ब्रेटन

4
ब्रैंडन: ब्रेंटन की प्रतिक्रियाओं को देखें। जिस तरह से मैं अनुशंसा करता हूं वह सबसे अधिक समर्थित है और जैसा कि मैंने अपनी पोस्ट के दूसरे भाग में कहा था, 'उचित' साइट में आप कभी भी '#' का उपयोग नहीं करेंगे, क्योंकि आप कमी की कमी को संभालने के लिए फालबैक सिस्टम प्रदान करेंगे। जावास्क्रिप्ट।
नून सिल्क

19
पूरी तरह से भयानक उदाहरण सहित के लिए +1 । यहां तक ​​कि अगर आपके पास जावास्क्रिप्ट में कोई स्थिर HTML फ़ॉल-बैक नहीं है, तो आप हमेशा कुछ ऐसा कर सकते हैं <a href="enableJavaScriptToSeeMyCompletelyAwesomeSite.html" onclick="completelyAwesome();return false;">
ग्रांट वैग्नर

73

"#" बनाम जावास्क्रिप्ट के व्यवहार में एक बड़ा अंतर है: शून्य

"#" आपको पृष्ठ के शीर्ष पर स्क्रॉल करता है जबकि "जावास्क्रिप्ट: शून्य (0);" नहीं करता।

यदि आप डायनेमिक पेज कोड कर रहे हैं तो यह बहुत महत्वपूर्ण है। उपयोगकर्ता केवल शीर्ष पर वापस नहीं जाना चाहता है क्योंकि उसने पृष्ठ पर एक लिंक पर क्लिक किया है।


26
@ सैल्विन: स्क्रॉल-टू-टॉप-ऑफ़-पेज व्यवहार falseको इवेंट हैंडलर पर वापस दबाया जा सकता है : onclick="doSomething();return false;"या यदि doSomething()रिटर्न देता है false, तो आप उपयोग कर सकते हैं onclick="return doSomething();"
ग्रांट वैगनर

40
@GranWagner - या, 5 साल बाद e.preventDefault()
trysis

1
आप / संपादित करने के लिए चाहते हो सकता है के बाद से इस जवाब को नष्ट "#"करता है नहीं शीर्ष करने के लिए स्क्रॉल जब आप अवास्तविक लौटाते।
नवीन

4
@ नवीन आप सही हैं, लेकिन यह अब एक पुरानी प्रथा है। ट्रायसिस द्वारा की गई टिप्पणी को अब सही तरीका माना जाता है।
टिम सेगिन

66

यह HTML लिंक के लिए जावास्क्रिप्ट कार्यों को जोड़ने की एक बहुत ही लोकप्रिय विधि है।
उदाहरण के लिए: [Print]कई वेबपृष्ठों पर आपके द्वारा देखे जाने वाले लिंक इस तरह लिखे गए हैं:

<a href="javascript:void(0)" onclick="callPrintFunction()">Print</a>

हमें आवश्यकता क्यों है hrefजबकि onclickअकेले काम मिल सकता है? क्योंकि जब उपयोगकर्ता टेक्स्ट 'प्रिंट' पर होवर करते हैं जब कोई नहीं होता है href, तो कर्सर पॉइंटर (poin) के बजाय कैरेट (ꕯ) में बदल जाएगा। केवल hrefएक aटैग पर होने से यह हाइपरलिंक के रूप में मान्य होता है।

के लिए एक विकल्प href="javascript:void(0);", का उपयोग है href="#"। इस विकल्प को उपयोगकर्ता के ब्राउज़र में जावास्क्रिप्ट चालू करने की आवश्यकता नहीं है, इसलिए यह अधिक संगत है।


7
अगर जावास्क्रिप्ट को बंद कर दिया जाए तो कुछ भी उपयोगी नहीं है।
जैसेंन

12
आपको hrefइंगित हैंड कर्सर प्राप्त करने की आवश्यकता नहीं है; यह सब लेता है सीएसएस का एक सा है।
जॉन मोंटगोमरी

1
आप ऑन्लाइन के बजाय जावास्क्रिप्ट फ़ंक्शन को href में क्यों नहीं डालेंगे?
सिद्धार्थ गांधी

2
मैं @Sid से सहमत हूं - यदि आप इसका उपयोग किसी जावास्क्रिप्ट फ़ंक्शन को ट्रिगर करने के लिए कर रहे हैं तो <a href="javascript:callPrintFunction()">क्लीनर है (हालांकि यह शायद buttonएक anchor के बजाय होना चाहिए अगर यह वास्तव में आपको कहीं भी नहीं ले जाता है)।
डेवमॉन्गोज

href="#"बुरा आश्चर्य पैदा कर सकता है - जैसे कि एक्सर अनुरोध, उस लिंक पर एक क्लिक पर कॉल किया जाना। यदि हाल ही में उपयोगकर्ता को उस पते पर होना चाहिए जो साइट के रूट में नहीं था, तो मैंने एक कठिन समय डिबगिंग के लिए एक वेबसाइट डिबगिंग का अनुरोध किया था। #href के कारण यह पता पुनः लोड करने से पहले xhr अनुरोध पूरा हो गया।
जस्टमार्टिन

44

आप हमेशा अपने पर एक href होना चाहिए एक टैग। एक जावास्क्रिप्ट फ़ंक्शन को कॉल करना जो 'अपरिभाषित' लौटाता है, ठीक होगा। इसलिए '# ’से लिंक करना होगा।

इंटरनेट एक्सप्लोरर 6 में बिना किसी हाइपर के एंकर टैग को a:hoverलागू नहीं किया जाता है।

हां, यह भयानक है और मानवता के खिलाफ एक छोटा अपराध है, लेकिन फिर से तो इंटरनेट एक्सप्लोरर 6 सामान्य रूप से है।

आशा है कि ये आपकी मदद करेगा।

इंटरनेट एक्सप्लोरर 6 वास्तव में मानवता के खिलाफ एक प्रमुख अपराध है।


25

यह ध्यान देने योग्य है कि आप कभी-कभी शून्य को देखेंगे जब अपरिभाषित की जाँच की जाती है, केवल इसलिए कि इसे कम वर्णों की आवश्यकता होती है।

उदाहरण के लिए:

something === undefined

बनाम

something === void 0

इस वजह से शून्य से कुछ अपरिभाषित तरीके अपरिभाषित होते हैं।


10
एक उल्लेखनीय उदाहरण टाइपस्क्रिप्ट ( लाइव उदाहरण ) है, जो डिफ़ॉल्ट पैरामीटर मानों को जांचने के लिए संकलित करता है void 0। जब बहुत सारे तरीके डिफ़ॉल्ट परम मूल्यों का उपयोग कर रहे हैं, तो 3 वर्ण अंतर जल्दी से जुड़ जाता है।
जॉन वीज़

1
"कुछ विधियाँ विधियाँ इस कारण से अपरिभाषित को 0 से बदल देती हैं।" अंत में मैं इसे समझ गया! धन्यवाद @ उत्तर पूरी तरह से उत्तर के लिए।
अहमद महमूद

22

उपयोग का javascript:void(0)अर्थ है कि HTML का लेखक बटन तत्व के स्थान पर एंकर तत्व का दुरुपयोग कर रहा है।

एंकर टैग को अक्सर पृष्ठ को ताज़ा करने से रोकने के लिए "#" या "जावास्क्रिप्ट: शून्य (0)" पर href सेट करके छद्म बटन बनाने के लिए ऑनक्लिक घटना के साथ दुर्व्यवहार किया जाता है। लिंक को कॉपी / ड्रैग करना, नए टैब / विंडो में लिंक खोलना, बुकमार्क करना और जब जावास्क्रिप्ट अभी भी डाउनलोड हो रहा हो, तो त्रुटियां होती हैं, या अक्षम होने पर ये मान अप्रत्याशित व्यवहार का कारण बनते हैं। यह सहायक तकनीकों (जैसे, स्क्रीन रीडर) के लिए गलत अर्थ भी बताता है। इन मामलों में, इसके <button>बजाय इसका उपयोग करने की सिफारिश की जाती है । सामान्य तौर पर आपको उचित URL का उपयोग करके केवल नेविगेशन के लिए एक एंकर का उपयोग करना चाहिए।

स्रोत: MDN के <a>पृष्ठ


4
एक पुराने प्रश्न पर शब्दार्थ html लाने के लिए +1 ... लिंक जगह जाते हैं, बटन काम करते हैं - अगर हम नहीं चाहते कि यह एक बटन की तरह दिखे, तो हमें स्टाइल को साफ करना चाहिए।
केवल्लर

इसका बड़ा अपवाद छवि मानचित्र होंगे, जिन्हें जावास्क्रिप्ट को निष्पादित करने की आवश्यकता हो सकती है; और चूंकि यह एक बटन नहीं है, यह एक लिंक है जिसमें बहुभुज सीमाएं हैं, यह "केवल" तरीका है।

17

voidएक ऑपरेटर है जिसका उपयोग किसी undefinedमान को वापस करने के लिए किया जाता है ताकि ब्राउज़र एक नया पृष्ठ लोड न कर सके।

वेब ब्राउज़र एक URL के रूप में जो भी उपयोग किया जाता है उसे लेने और इसे तब तक लोड करने की कोशिश करेंगे जब तक कि यह एक जावास्क्रिप्ट फ़ंक्शन नहीं है जो अशक्त है। उदाहरण के लिए, यदि हम इस तरह से एक लिंक पर क्लिक करते हैं:

<a href="javascript: alert('Hello World')">Click Me</a>

फिर एक नया संदेश लोड किए बिना एक अलर्ट संदेश दिखाई देगा, और ऐसा इसलिए alertहै क्योंकि एक फ़ंक्शन है जो एक शून्य मान लौटाता है। इसका मतलब यह है कि जब ब्राउज़र एक नया पृष्ठ लोड करने का प्रयास करता है, तो यह शून्य दिखता है और इसमें कुछ भी लोड नहीं होता है।

शून्य ऑपरेटर के बारे में ध्यान देने वाली एक महत्वपूर्ण बात यह है कि इसके लिए एक मूल्य की आवश्यकता होती है और इसका उपयोग स्वयं नहीं किया जा सकता है। हमें इसका उपयोग इस तरह करना चाहिए:

<a href="javascript: void(0)">I am a useless link</a>

1
मैंने देखा है कि लोग जावास्क्रिप्ट का उपयोग करते हैं: शून्य के बजाय अशक्त ... लेकिन यह एक समस्या है। क्रोम नल काम करता है, फ़ायरफ़ॉक्स में, यह पृष्ठ नल लोड करने की कोशिश करता है। खुशी है कि आपने अपडेट किया। दिलचस्प बग।
गेविन पिकिन

मुझे जावास्क्रिप्ट जैसे कोडबेस में कुछ अन्य उपयोग मिले: null लेकिन जावास्क्रिप्ट के साथ: null () जो अपरिभाषित है, इसलिए यह काम करता है।
गेविन पिकिन

1
तो मूल रूप से यह jquery के प्रचलित डेफॉल्ट की तरह है और गलत है?
रॉबर्ट रोचा

16

इस अवधारणा को समझने के लिए सबसे पहले जावास्क्रिप्ट में शून्य ऑपरेटर को समझना चाहिए।

शून्य ऑपरेटर के लिए सिंटैक्स है: void «expr» जो एक्सपायर का मूल्यांकन करता है और अपरिभाषित रिटर्न देता है।

यदि आप फ़ंक्शन के रूप में शून्य लागू करते हैं, तो यह निम्नानुसार दिखता है:

function myVoid(expr) {
    return undefined;
}

इस शून्य ऑपरेटर का एक महत्वपूर्ण उपयोग है - एक अभिव्यक्ति के परिणाम को त्यागना।

कुछ स्थितियों में, अभिव्यक्ति के परिणाम के विपरीत अपरिभाषित लौटना महत्वपूर्ण है। फिर शून्य का उपयोग उस परिणाम को छोड़ने के लिए किया जा सकता है। ऐसी एक स्थिति में जावास्क्रिप्ट शामिल हैं: URL, जिन्हें लिंक से बचना चाहिए, लेकिन बुकमार्क के लिए उपयोगी हैं। जब आप उन URL में से किसी एक पर जाते हैं, तो कई ब्राउज़र वर्तमान दस्तावेज़ को URL "सामग्री" के मूल्यांकन के परिणाम से बदल देते हैं, लेकिन केवल तभी जब परिणाम अपरिभाषित न हो। इसलिए, यदि आप वर्तमान में प्रदर्शित सामग्री को बदले बिना एक नई विंडो खोलना चाहते हैं, तो आप निम्न कार्य कर सकते हैं:

javascript:void window.open("http://example.com/")

2
यह स्पष्ट करने के लिए धन्यवाद कि 'शून्य' का तर्क क्या है! यह अन्य उत्तरों में स्पष्ट नहीं था, केवल "शून्य एक तर्क लेता है"।
dbeachy1 18

अच्छा उत्तर लेकिन एक विवरण, शून्य कार्यान्वयन कुछ इस तरह होगा: function myVoid(expr) { expr(); return undefined; } आप एक्सपायर
जुआनमा मेनेंडेज़

1
@ जुआनमा मेंडेज़: सच नहीं है। कहा जाता है exprजब पहले से ही मूल्यांकन किया myVoid()जाता है ( उस अभिव्यक्ति के परिणाम को पैरामीटर के रूप में पारित किया जाता है)
उडो जी

@ यूडीजी मैं उत्सुक हूं, आप कैसे जानते हैं कि पुरुष? क्या आप समझा सकते हैं।
जुआनमा मेनेंडेज़

@JuanmaMenendez: फ़ंक्शन पैरामीटर में अभिव्यक्तियों का मूल्यांकन हमेशा फ़ंक्शन को कॉल करने से पहले किया जाता है। क्षमा करें, मेरे पास हाथ में कोई दस्तावेज नहीं है जो इसे स्पष्ट करता है लेकिन अपने आप को आज़माएं: function() { alert("foo"); }एक वैध अभिव्यक्ति हैvoid(function() { alert("foo"); })रिटर्न undefinedऔर अलर्ट नहीं दिखाता है, जबकि myVoid(function() { alert("foo"); })(आपके संस्करण में, गोपाल यादव का नहीं )।
उडो जी

14

voidऑपरेटर दिया अभिव्यक्ति का मूल्यांकन करता है और उसके बाद अनिर्धारित दिखाता है। यह पृष्ठ को ताज़ा करने से बचता है।


9

वेब डेवलपर्स उपयोग करते हैं javascript:void(0)क्योंकि यह aटैग के डिफ़ॉल्ट व्यवहार को रोकने का सबसे आसान तरीका है । void(*anything*)रिटर्न undefinedऔर यह एक मिथ्या मूल्य है। और एक falsy मूल्य लौटने की तरह है return falseमें onclickहोने की स्थिति aटैग कि अपनी डिफ़ॉल्ट व्यवहार को रोकने के।

इसलिए मुझे लगता javascript:void(0)है कि aटैग के डिफ़ॉल्ट व्यवहार को रोकने का सबसे सरल तरीका है ।


8

एक लिंक के पास एक HREF लक्ष्य होना चाहिए, जो इसे एक प्रयोग करने योग्य प्रदर्शन ऑब्जेक्ट बनाने में सक्षम करने के लिए निर्दिष्ट किया जाए।

अधिकांश ब्राउज़र उन्नत जावास्क्रिप्ट को पार्स नहीं करेंगे

<A HREF="" 

जैसे टैग:

<A href="JavaScript:var elem = document.getElementById('foo');" 

क्योंकि अधिकांश ब्राउज़रों में HREF टैग व्हॉट्सएप की अनुमति नहीं देता है, या व्हाट्सएप को% 20 में बदल देगा, हेक्स एक स्पेक्स के समान है, जो आपके जावास्क्रिप्ट को दुभाषिया के लिए बिल्कुल बेकार कर देता है।

इसलिए यदि आप इनलाइन जावास्क्रिप्ट को निष्पादित करने के लिए एक HREF टैग का उपयोग करना चाहते हैं, तो आपको HREF FIRST के लिए एक मान्य मान निर्दिष्ट करना होगा जो बहुत जटिल नहीं है (जिसमें व्हॉट्सएप शामिल नहीं है), और फिर जावास्क्रिप्ट को किसी इवेंट विशेषता टैग में प्रदान करें जैसे कि क्लिक करें , ऑनओवरओवर, ऑनमेसऑट इत्यादि।

विशिष्ट उत्तर कुछ ऐसा करना है:

<A HREF="#" onclick="var elem = document.getElementById('foo');">Get the object</a>

यह ठीक काम करता है लेकिन यह पेज को शीर्ष पर ले जाता है क्योंकि पाउंड साइन / हैश टैग ऐसा करने के लिए कहता है।

सिर्फ ए HREF टैग में पाउंड साइन / हैश टैग प्रदान करना वास्तव में रूट एंकर को निर्दिष्ट करता है, जो हमेशा पृष्ठ के शीर्ष पर डिफ़ॉल्ट रूप से होता है, आप A HREF टैग के अंदर NAME विशेषता निर्दिष्ट करके एक अलग स्थान निर्दिष्ट कर सकते हैं।

<A NAME='middleofpage'></A>

इसके बाद ऐसा होने पर आप अपने A HREF टैग को बदलकर 'Middleofpage' पर जा सकते हैं और जावास्क्रिप्ट को OnClick इवेंट में बदल सकते हैं:

<A HREF="#middleofpage" onclick="var elem = document.getElementById('foo');">Get the object</a>

कई बार ऐसा होगा जहाँ आप नहीं चाहते कि लिंक इधर-उधर उछले, जिससे आप दो काम कर सकते हैं:

<A HREF="#thislinkname" name='thislinkname' onclick="var elem = document.getElementById('foo');">Get the object</a>

अब यह क्लिक करने पर कहीं नहीं जाएगा, लेकिन यह पृष्ठ को वर्तमान व्यूपोर्ट से फिर से केंद्र में लाने का कारण बन सकता है। यह सुंदर नहीं है। A HREF का उपयोग करके इन-लाइन जावास्क्रिप्ट प्रदान करने का सबसे अच्छा तरीका क्या है, लेकिन उपरोक्त में से कोई भी कार्य किए बिना? जावास्क्रिप्ट: शून्य (0);

<A HREF="JavaScript:void(0);" onclick="var elem = document.getElementById('foo');">Get the object</a>

यह ब्राउज़र को NowHERE जाने के लिए कहता है, लेकिन इसके बजाय मान्य JavaScript निष्पादित करें: void (0); HREF टैग में पहले कार्य करें क्योंकि इसमें कोई व्हाट्सएप नहीं है, और URL के रूप में पार्स नहीं किया जाएगा। इसके बजाय संकलक द्वारा चलाया जाएगा। VOID एक कीवर्ड है, जिसे 0 रिटर्न की परिधि के साथ आपूर्ति की जाती है, जो कि रिटर्न मान को संभालने के लिए किसी भी अधिक संसाधनों का उपयोग नहीं करता है जो 0 को निर्दिष्ट किए बिना होता है (यह अधिक मेमोरी-मैनेजमेंट / प्रदर्शन अनुकूल है)।

अगली चीज़ जो होती है वह है OnClick निष्पादित होती है। पृष्ठ चलता नहीं है, कुछ भी प्रदर्शन-वार नहीं होता है।


एक एंकर की तरह अलग-अलग तरीकों से सभी को समझाने के लिए +1 किया जा सकता है। मैं हालांकि, एक <a>तत्व हमेशा कहीं न कहीं जाना चाहिए ; यदि इसके पृष्ठ पर केवल कुछ जावास्क्रिप्ट निष्पादित करने के लिए है, तो <button>इसके बजाय इसका उपयोग किया जाना चाहिए। उपयोग करना <button>दोनों अधिक अर्थपूर्ण है, और आपको इस पूरी बहस से अलग करता है कि एक एंकर में क्या हैक करना है hrefसंपादित करें: ऐसा लगता है कि नीचे दिए गए इस तर्क में @Ronnie Royston का जवाब पहले से ही नीचे दिया गया है।
रबाडाशॉ

1

जावास्क्रिप्ट: यूआरएल एक तरफ; यह वह जगह है जहाँ शून्य को छोटे कोड लिखने के लिए उपयोगी हो सकता है।

var error1 = false,
    error2 = false,
    error3 = false;

function error1() {

  error1 = true;
}

function myFunction() {

  // You can easily return and call a function at once, if you don't care about myFunction's return value
  if (!someCondition1)
    return error1();

  // What if you want to set a value first?
  if (!someCondition2) {
    error2 = true;
    return
  }

  // Shortest way to return and set a value at once
  if (!someCondition3)
    return void(error3 = true);

  // More code goes here
}

यह अच्छा होगा यदि डाउनवोटर्स कम से कम बता सकें कि उन्होंने डाउनवोट क्यों किया। मुझे पता है कि यह प्रश्न के विषय पर नहीं है, लेकिन मैं उन सभी लोगों के बारे में सोच रहा हूं जो खोज परिणामों से यहां आते हैं।
मैकीज क्रैस्कीज
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.