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




void (10)

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

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

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

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

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

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


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

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

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


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

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

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

function myVoid(expr) {
    return undefined;
}

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

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

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

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

<a href="javascript:void(0)" onclick="call print function">Print</a>

हमें 'href' आवश्यकता क्यों है, जबकि अकेले 'onclick' काम पूरा हो सकता है? क्योंकि अगर हम 'href' छोड़ देते हैं, जब उपयोगकर्ता "प्रिंट" टेक्स्ट पर माउस कर्सर "I" में बदल जाएगा। 'href' होने से कर्सर को प्रदर्शित करने 'href' अनुमति मिलती है जैसे कि यह एक हाइपरलिंक था: एक पॉइंटिंग हाथ।

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


एक और उदाहरण जहां javascript.void(0) का उपयोग किया जाता है। मुझे यकीन नहीं है कि यह सही तरीका है, लेकिन नौकरी करता है

$(document).ready(function() {
  jQuery(".show-hide-detail").hide();
  jQuery(".show-hide-detail:first").show();
  jQuery(".show-hide-btn a").click(function() {
    var thid_data = jQuery(this).attr('data-id');
    jQuery(".show-hide-btn a").removeClass('active');
    jQuery(this).addClass('active');
    if (!jQuery("#" + thid_data).is(":visible")) {
      jQuery(".show-hide-detail").hide();
      jQuery("#" + thid_data).show();
    }
  });
});
<section>
  <div class="features">
    <div class="container">
      <h1>Room Dimensions</h1>
      <p class="description">
        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed tempor arcu non ligula convallis, vel tincidunt ipsum posuere.sollicitudin. Duis iaculis, arcu ut hendrerit pharetra, elit augue pulvinar magna
      </p>
      <div class="dimension-btn show-hide-btn">
        <a class="active" data-id="LivingRoom">Living Room</a>
        <a href="javascript:void(0)" data-id="DiningRoom">Dining Room</a>
        <a href="javascript:void(0)" data-id="Kitchen">Kitchen</a>
        <a href="javascript:void(0)" data-id="MasterBedroom">Master Bedroom</a>
        <a href="javascript:void(0)" data-id="Bedroom2">Bedroom 2</a>
        <a href="javascript:void(0)" data-id="Bedroom3">Bedroom 3</a>
        <a href="javascript:void(0)" data-id="Bathroom">Bathroom</a>
        <a href="javascript:void(0)" data-id="Gym">Gym</a>
        <a href="javascript:void(0)" data-id="SwimmingPool">Swimming Pool</a>
      </div>
      <div class="row">
        <div class="LivingRoom Dimension-detail show-hide-detail" id="LivingRoom" style="display: block;"></div>
        <div class="LivingRoom Dimension-detail show-hide-detail" id="DiningRoom" style="display: none;"></div>
        <div class="LivingRoom Dimension-detail show-hide-detail" id="Kitchen" style="display: none;"></div>
        <div class="LivingRoom Dimension-detail show-hide-detail" id="MasterBedroom" style="display: none;"></div>
        <div class="LivingRoom Dimension-detail show-hide-detail" id="Bedroom2" style="display: none;"></div>
        <div class="LivingRoom Dimension-detail show-hide-detail" id="Bedroom3" style="display: none;"></div>
        <div class="LivingRoom Dimension-detail show-hide-detail" id="Bathroom" style="display: none;"></div>
        <div class="LivingRoom Dimension-detail show-hide-detail" id="SwimmingPool" style="display: none;"></div>
        </div>
      </div>
    </div>



</section>


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

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

<A HREF="" 

टैग जैसे कि:

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

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

इसलिए यदि आप इनलाइन जावास्क्रिप्ट को निष्पादित करने के लिए ए एचआरईएफ टैग का उपयोग करना चाहते हैं, तो आपको एचआरईएफ के लिए एक वैध मान निर्दिष्ट करना होगा जो कि बहुत जटिल नहीं है (व्हाइटस्पेस नहीं है), और फिर जावास्क्रिप्ट को ऑनक्लिक जैसे ईवेंट एट्रिब्यूट टैग में प्रदान करें , OnMouseOver, OnMouseOut, आदि

सामान्य जवाब ऐसा कुछ करना है:

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

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

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

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

इसके बाद आप एक एआरईएफ टैग को 'middleofpage' पर कूदने के लिए बदल सकते हैं और ऑनक्लिक ईवेंट में जावास्क्रिप्ट निष्पादित कर सकते हैं, ऐसा होने पर ऐसा होता है:

<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>

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

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

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

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


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

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

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

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

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

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

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

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


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

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

something === undefined

बनाम

something === void 0

इस कारण से कुछ minification विधियों शून्य 0 के साथ अपरिभाषित प्रतिस्थापित।


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

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

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

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

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

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

void ऑपरेटर दिए गए अभिव्यक्ति का मूल्यांकन करता है और फिर अपरिभाषित करता है। यह पेज को रीफ्रेश करने से बचाता है।







void