javascript - questions - डबल विस्मयादिबोधक बिंदु?




javascript programs (2)

संभावित डुप्लिकेट:
क्या है !! जावास्क्रिप्ट में ऑपरेटर नहीं (नहीं)
इससे क्या होता है !! ऑपरेटर (डबल विस्मयादिबोधक बिंदु) जावास्क्रिप्ट में मतलब है?

तो मैं कुछ कोड डीबग कर रहा था और इस पर भाग गया:

var foo.bar = 0; // this is actually passed from another function, adding it for context

function(foo)
    var someVar = !!foo.bar;
    if(foo.bar){
      // ..stuff happens
    }
    else{
      // .. something else happens
    }
}

ठीक है मेरे प्रश्न यह है कि क्या बात है !! जो कुछ भी कर रहा है वह 0 === false बना रहा है।

  1. क्या boolean(foo.bar) की तुलना में इसका उपयोग करने के लिए कोई फायदा है?

  2. foo.bar का मूल्यांकन किसी भी रूप में किया जा सकता है क्योंकि 0 === false पहले से ही 0 === false , तो रूपांतरण के माध्यम से क्यों जाएं? (कुछ और का पुन: उपयोग नहीं किया जाता है)


जैसा कि ऊपर बताया गया है, यह एक ऑब्जेक्ट को बुलियन प्रकार के साथ मजबूर करता है। आप अपने लिए देख सकते है:

(function typecheck() {
  var a = "a";
  var b = !a;
  var c = !!a;

  alert("var a = " + typeof(a) + "\n" +
        "var b = " + typeof(b) + "\n" +
        "var c = " + typeof(c));
})();

यदि आप बस तुलना कर रहे हैं, तो रूपांतरण केवल बाद में आपको एक प्रकार का दबाव बचाता है।

एफवाईआई, निम्नलिखित मान जावास्क्रिप्ट में गलत करने के लिए मजबूर हैं:

  • असत्य
  • 0
  • ""
  • शून्य
  • अपरिभाषित

मुझे लगता है कि जवाब यह है कि वास्तव में बहुत अधिक बिंदु नहीं है। हम अनुमान लगा सकते हैं कि यह कैसे आया:

  • हो सकता है कि फ़ंक्शन के पहले संस्करण ने कई स्थानों में कुछ someVar का उपयोग किया हो, या ऐसे तरीकों से जो सचमुच true या false होने से लाभान्वित हो जाएं, इसलिए इससे अधिक समझदारी हुई।
  • हो सकता है कि जिस व्यक्ति ने फ़ंक्शन लिखा है उसका उपयोग करने के लिए उपयोग किया जाता है !! true / false परिवर्तित करने के लिए उन्होंने यह भी ध्यान नहीं दिया कि यह आवश्यक नहीं था।
  • हो सकता है कि जिस व्यक्ति ने फ़ंक्शन लिखा है, वह महसूस करता है कि प्रत्येक गणना (इस मामले में, बूलियन रूपांतरण) को इसके परिणाम में कुछ चर निर्दिष्ट करके सार्थक नाम दिया जाना चाहिए।
  • हो सकता है, चूंकि जावास्क्रिप्ट में बूलियन रूपांतरण आश्चर्यजनक रूप से त्रुटि-प्रवण है (उसमें new Boolean(false) एक वास्तविक मूल्यवान मूल्य है), जिस व्यक्ति ने फ़ंक्शन लिखा है, वह महसूस करता है कि इसे हमेशा स्पष्ट रूप से स्पष्ट रूप से किया जाना चाहिए - भले ही प्रभाव वही है - केवल त्रुटि के संभावित बिंदु के रूप में इसे ध्यान में कॉल करने के लिए।
    • यह, ज़ाहिर है, यह मानता है कि जिस व्यक्ति ने समारोह लिखा है वह सोचता है !! एक "स्पष्ट" बूलियन रूपांतरण के रूप में। तकनीकी रूप से यह नहीं है - यह वही अंतर्निहित बूलियन रूपांतरण का उपयोग करता है जो करता है - लेकिन यदि आप इस मुहावरे में उपयोग किए जाते हैं, तो यह एक स्पष्ट रूपांतरण की मात्रा है।

लेकिन मेरी व्यक्तिगत राय में, इनमें से कोई भी कारण बहुत अच्छा नहीं है!





javascript