क्यों किसी तरहइस अभिव्यक्ति का अर्थ क्या है "!!"
if(!!window.JSON) alert('exists');
बजाय
सिर्फ
if(window.JSON) alert('exists');
एक अभिव्यक्ति का प्रयोग करेंगे?
क्या "!!" के लिए कोई और उपयोग है चीज़ ?
क्यों किसी तरहइस अभिव्यक्ति का अर्थ क्या है "!!"
if(!!window.JSON) alert('exists');
बजाय
सिर्फ
if(window.JSON) alert('exists');
एक अभिव्यक्ति का प्रयोग करेंगे?
क्या "!!" के लिए कोई और उपयोग है चीज़ ?
! एक तार्किक अस्वीकृति है, !! तार्किक अस्वीकृति दो बार लागू होती है, यानी तार्किक पहचान
मैं मानता हूं कि जो कोड आप पढ़ रहे हैं वह केवल हानिकारक रूप से (भ्रामक रूप से) अनावश्यक है।
हाँ में परिवर्तित हो जाता है, लेकिन क्या सवाल में ऑब्जेक्ट से बूलियन तक एक अंतर्निहित प्रकार-कास्ट शामिल नहीं है? –
!!
बस एक बूलियन रूपांतरण का कारण होगा, यह आवश्यक सब पर इस if
बयान के साथ निर्माण अपनी पहली झलकी में भी, एक वस्तु बूलियन के लिए कोई मतलब नहीं है परिवर्तित करने का उपयोग करने के नहीं है, यह हमेशा सच हो जाएगा।
केवल मानों false
लिए मजबूर कर सकते हैं null
, undefined
, NaN
, 0
, और रिक्त स्ट्रिंग हैं और निश्चित रूप से किसी और false
कुछ भी true
को विवश होगा।
जब यह भावना !!
उपयोग करने के लिए बनाता है जब आप जब तार्किक &&
और ||
ऑपरेटर्स का उपयोग कर उदाहरण के लिए, एक बूलियन परिणाम प्राप्त करने के सुनिश्चित करना चाहते हैं।
उन ऑपरेटरों एक संकार्य के मूल्य लौट सकते हैं, और कोई बूलियन परिणाम, उदाहरण के लिए:
true && "foo"; // "foo"
"foo" || "bar" ; // "foo"
कल्पना कीजिए कि आप एक समारोह है कि परीक्षण दो मूल्यों है, और आप एक बूलियन परिणाम की उम्मीद:
function isFoo() {
return 0 && true;
}
isFoo(); // returns 0, here it makes sense to use !!
संपादित करें: अपने संपादित को देखते हुए, if (!!window.JSON)
सिर्फ अनावश्यक रूप में मैं पहले भी कहा है, क्योंकि if
statement अपने आप में wil एल बूलियन रूपांतरण internally बनाते हैं जब स्थिति अभिव्यक्ति का मूल्यांकन किया जाता है।
ऐसा लगता है कि आप 'function isFoo (obj) {return obj और & true;} isFoo (0); 'अंतिम उदाहरण में :) या' वापसी !! obj और & true; ' – Znarkus
' false && "foo" ' * झूठी * का मूल्यांकन करता है। – Gumbo
@ गम्बो: हाँ, एक टाइपो एस/झूठा/सच था, @ जेनर्कस, हाँ, एक्सपोज़िटरी उद्देश्यों के लिए बस कुछ;) धन्यवाद दोस्तों ... – CMS
वे शायद ऑब्जेक्ट को बूलियन में डालने की कोशिश कर रहे हैं। ऑब्जेक्ट में एक बुलियन ऑपरेटर (!
) लागू करके, यह एक बूल बन जाता है, लेकिन वे वास्तव में अस्वीकृति नहीं चाहते हैं, इसलिए वे पहले को रद्द करने के लिए दूसरा स्थान लागू करते हैं।
// !! = boolean typecasting in javascript
var one = 1
var two = 2;
if (one==true) app.alert("one==true");
if (!!one==true) app.alert("!!one==true");
if (two==true) app.alert("two==true"); // won't produce any output
if (!!two==true) app.alert("!!two==true");
यही कारण है कि आपको '===' का उपयोग करना चाहिए और स्पष्ट रूप से डालना चाहिए:' = 'प्रकार रूपांतरण नियम एक डब्ल्यूटीएफ के कुछ हैं – Christoph
यह एक बुलियन रूपांतरण है, जो पहली बार बूलियन में रूपांतरण सुनिश्चित करता है और फिर मूल मूल्य पर वापस आ रहा है।
हालांकि इसे गलत तरीके से यहां इस्तेमाल किया जाता है और केवल वास्तव में प्रासंगिक होगा यदि आप किसी अन्य चर को असाइन - प्रदर्शन के कारणों के
var isJSON = (!!window.JSON);
if (isJSON) doX;
if (isJSON) doY;
if (isJSON) doZ;
एकाधिक नकारात्मक को समझने के लिए, हालांकि कर रहे हैं के लिए, इसका कारण यही है। यदि आप अपने कोड में (!! (!!) !!! (!) !! obj) का उपयोग करते रहें, तो केवल आप इसे बनाए रख सकते हैं (यदि आपका भाग्यशाली) - मैं कोई अनावश्यक नहीं हूं! – simendsjo
http: // stackoverflow देखें।कॉम/प्रश्न/1406604/क्या-ऑपरेटर-डबल-विस्मयादिबोधक-बिंदु-माध्य-इन-जावास्क्रिप्ट/140776 9 # 140776 9; और आप सही हैं, इस मामले में यह अनावश्यक है, क्योंकि 'if()' पहले से ही बूलियन – Christoph