दिलचस्प पोस्ट
Jquery क्लिक घटना jquery का उपयोग गतिशील रूप से बनाया तत्व पर गोलीबारी नहीं LD_PRELOAD तंत्र का उपयोग करके 'malloc' ओवरराइड करना "जीआईटी चेकआउट मूल / <शाखा>" चलाने के बाद गिट मुझे "किसी भी शाखा में नहीं है" क्यों बताता है? पर्ल की बैकल्टी, सिस्टम और एप के बीच क्या अंतर है? JSF में statelessness की उपयोगिता क्या है? एक यूआईएलबल के पाठ रंग की संपत्ति को कैसे सजीव करना है? कैसे कार्य करते हुए कुछ कॉलम में अलग-अलग स्ट्रिंग्स को स्ट्र्रेस करने के लिए AndroidManifest में Google Play सेवाएं v13 त्रुटि मेटा-डेटा एवीएक्स सीपीयू निर्देशों का प्रयोग करना: "/ आर्क: एवीएक्स" के बिना खराब प्रदर्शन एक्सएलएल के लिए एक्सएलएल का उपयोग करें खंड पर रीस्यूम () और ऑन पॉज़ () बैकस्टैक पर नहीं बुलाया गया है मेवेन परियोजना को ग्रहण में आयात करना एक ही नाम के साथ स्थिर और उदाहरण तरीकों? कैसे मैं Unescape और Reescape स्ट्रिंग को नेट में कर सकता हूं? 'और' बनाम '&&' ऑपरेटर के रूप में

कैसे करता है? ~ (टिल्ड / बैंग बैंग टिल्ड नहीं) एक 'शामिल / शामिल' अर्रे विधि कॉल के परिणाम को बदलते हैं?

अगर आप यहां jQuery के inArray पेज पर टिप्पणियां पढ़ते हैं , तो एक दिलचस्प घोषणा है:

 !!~jQuery.inArray(elm, arr) 

अब, मेरा मानना ​​है कि एक डबल विस्मयादिबोधक बिंदु परिणाम को boolean टाइप करके true के मूल्य के साथ बदल देगा। मुझे क्या समझ में नहीं आ रहा है कि इस सब में टिल्ड ( ~ ) ऑपरेटर का क्या उपयोग है?

 var arr = ["one", "two", "three"]; if (jQuery.inArray("one", arr) > -1) { alert("Found"); } 

if कथन को रिफैक्टर करना:

 if (!!~jQuery.inArray("one", arr)) { alert("Found"); } 

टूट – फूट:

 jQuery.inArray("one", arr) // 0 ~jQuery.inArray("one", arr) // -1 (why?) !~jQuery.inArray("one", arr) // false !!~jQuery.inArray("one", arr) // true 

मैंने यह भी गौर किया है कि अगर मैंने टिल्ड को सामने रखा है, तो परिणाम -2

 ~!!~jQuery.inArray("one", arr) // -2 

मैं टिल्ड के उद्देश्य को यहां नहीं समझता हूं। क्या कोई इसे समझा सकता है या किसी संसाधन के प्रति मुझे बता सकता है?

वेब के समाधान से एकत्रित समाधान "कैसे करता है? ~ (टिल्ड / बैंग बैंग टिल्ड नहीं) एक 'शामिल / शामिल' अर्रे विधि कॉल के परिणाम को बदलते हैं?"

टिल्ड ऑपरेटर वास्तव में jQuery का हिस्सा बिल्कुल नहीं है – यह जावास्क्रिप्ट में एक बिटवायर नॉट ऑपरेटर है।

द ट्रिल्ड (~) का महान रहस्य देखें

आप अपने प्रयोगों में अजीब संख्या प्राप्त कर रहे हैं क्योंकि आप एक पूर्णांक पर थोड़ी-थोड़ी तार्किक आपरेशन कर रहे हैं (जो, मुझे पता है कि, दो पूरक के रूप में संग्रहीत किया जा सकता है या ऐसा कुछ …)

दो के पूरक बताते हैं कि कैसे द्विआधारी में एक नंबर का प्रतिनिधित्व करने के लिए। मुझे लगता है कि मैं सही था।

एक विशेष कारण है कि आप कभी-कभी देखेंगे $.inArray सामने।

मूल रूप से,

 ~$.inArray("foo", bar) 

ऐसा करने का एक छोटा रास्ता है

 $.inArray("foo", bar) !== -1 

$.inArray आइटम की अनुक्रमणिका को सरणी में देता है अगर पहले तर्क मिल जाता है, और यह -1 देता है यदि उसे नहीं मिला है। इसका मतलब यह है कि यदि आप "सरणी में यह मान है" का बूलियन ढूंढ रहे हैं, तो आप बूलियन की तुलना नहीं कर सकते, क्योंकि -1 सत्य मान है, और जब $ .inArray 0 देता है (एक झूठा मूल्य ), इसका मतलब है कि इसका वास्तव में सरणी के पहले तत्व में पाया गया है।

~ बिटवाइस्ट ऑपरेटर को लागू करने से -1 बनने का कारण बनता है, और 0 को `1 बनने का कारण बनता है। इस प्रकार, सरणी में मान नहीं खोजना और फाल्सी वैल्यू (0) में बीटावर्ड न होने वाले परिणामों को लागू करना, और अन्य सभी मान गैर-0 नंबर लौटाएंगे, और एक सत्य परिणाम का प्रतिनिधित्व करेंगे

 if (~$.inArray("foo", ["foo",2,3])) { // Will run } 

और यह इरादा के रूप में काम करेगा

!!~expr रिटर्न false जब expr -1 ; यह अन्यथा true देता true यह इस तरह काम करता है:

  -1 = 1111 1111 1111 1111 1111 1111 1111 1111b // two's complement representation of -1 ~-1 = 0000 0000 0000 0000 0000 0000 0000 0000b // ~ = bitwise not = invert all bits !0 = true !true = false 

1 के अलावा अन्य का मान कम से कम एक बिट को शून्य पर सेट होगा; इसे सच्चाई मूल्य पैदा करेगा; आवेदन ! ऑपरेटर दो बार एक सच्ची मूल्य की पैदावार के साथ बूलीयन सच है।

उपरोक्त उल्लिखित फ़ंक्शन सही होता है यदि खोजी गई स्ट्रिंग / एरे में निर्दिष्ट सुई होती है:

 !!~"abc".indexOf("d") // indexOf() returns -1, the expression evaluates to false !!~"abc".indexOf("a") // indexOf() returns 0, the expression evaluates to true !!~"abc".indexOf("b") // indexOf() returns +1, the expression evaluates to true 

मैं व्यक्तिगत रूप से सोचता हूं कि यह कोडिंग खराब है क्योंकि आप इस कोड की एक पंक्ति को समझने में कितना समय व्यतीत करते हैं। यह आसानी से इस प्रकार लिखा जा सकता है:

 return this.modifiedPaths.indexOf(path) != -1; // note: indexOf returns a number >= -1 

~foo.indexOf(bar) का प्रतिनिधित्व करने के लिए एक सामान्य लयबद्धता है क्योंकि फ़ंक्शन मौजूद नहीं है।

सामान्यतया "फर्जी" मूल्यों की जावास्क्रिप्ट की अवधारणा के कारण बूलियन को डाली अनावश्यक है इस मामले में इसका उपयोग फ़ंक्शन के उत्पादन को true या false लिए बाध्य करने के लिए किया जाता है।

jQuery.inArray() "नहीं मिला" के लिए -1 देता है, जिसका पूरक ( ~ ) 0 इस प्रकार, ~jQuery.inArray() "पाया नहीं" के लिए एक ~jQuery.inArray() मूल्य ( 0 ) देता है, और "पाया" के लिए एक सत्य मान (एक नकारात्मक पूर्णांक)। !! फिर वास्तविक बूलीयन में false / true false / true औपचारिक रूप देगा। तो, !!~jQuery.inArray() "पाया" के लिए true और "नहीं मिला" के लिए false

~ ऑपरेटर बिटवाइस पूरक ऑपरेटर है inArray() से पूर्णांक परिणाम -1 है, जब तत्व नहीं मिला है, या कुछ गैर-नकारात्मक पूर्णांक 1 के बिटwise पूरक (बाइनरी में सभी 1 बिट्स में प्रतिनिधित्व) शून्य है। किसी भी गैर-नकारात्मक पूर्णांक का बिटwise-पूरक हमेशा गैर-शून्य होता है

इस प्रकार, !!~i जब मैं पूर्णांक "i" एक गैर-नकारात्मक पूर्णांक है, और जब "i" बिल्कुल -1 होता है तो false

ध्यान दें कि ~ पूर्णांक को पूर्ण रूप से संचालन करने के लिए; यानी, यह पूर्णांक के लिए गैर-पूर्णांक फ़्लोटिंग बिंदु मानों को बल देता है, साथ ही गैर-संख्यात्मक मान भी।

टिल्ड बिटवर्ड नहीं है – यह मूल्य के प्रत्येक बिट को बदल देती है अंगूठे का एक सामान्य नियम के रूप में, यदि आप किसी संख्या पर ~ उपयोग करते हैं, तो इसका चिन्ह उलटा हो जाएगा, फिर 1 को घटाया जाएगा।

इस प्रकार, जब आप ~0 , तो आपको -1 मिलता है (0 उलटा है -0, घटाना 1 है -1)।

यह अनिवार्य रूप से एक विस्तृत, अति सूक्ष्म अनुकूलित तरीका है जो हमेशा बूलियन के मूल्य प्राप्त करने का तरीका है

सभी 4 बाइट्स के लिए ~ इस सूत्र के बराबर है -(N+1)

इसलिए

 ~0 = -(0+1) // -1 ~35 = -(35+1) // -36 ~-35 = -(-35+1) //34 

आप सही हैं: यह कोड false होगा जब indexOf कॉल रिटर्न -1; अन्यथा true

जैसा कि आप कहते हैं, यह कुछ और तरह का उपयोग करने के लिए अधिक समझदार होगा

 return this.modifiedPaths.indexOf(path) !== -1; 

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

उदाहरण के लिए, द्विआधारी में संख्या 0 है 0000000 , जबकि -1 है 11111111 । इसी तरह, बाइनरी में 1 00000001 है, जबकि 11111110

मेरा अनुमान है कि यह वहीं है क्योंकि यह कुछ अक्षर छोटा है (पुस्तकालय लेखकों के बाद हमेशा होते हैं)। यह उन कार्यों का भी उपयोग करता है जो केवल कुछ मशीन चक्र लेते हैं जब मूल कोड में संकलित होते हैं (किसी संख्या की तुलना के विपरीत)।

मैं एक और जवाब से सहमत हूं कि यह एक ओवरकिल है, लेकिन शायद तंग लूप में समझ हो सकती है (हालांकि प्रदर्शन लाभ अनुमान की आवश्यकता है, हालांकि, अन्यथा समय से पहले अनुकूलन हो सकता है।)

मुझे लगता है, चूंकि यह एक बिटवायर ऑपरेशन है, यह जांचने के लिए सबसे तेज़ (कम्प्यूटेशनल सस्ता) तरीका है कि क्या पथ संशोधित पट में दिखाई देता है।

जैसा कि (~(-1)) === 0 , इसलिए:

 !!(~(-1)) === Boolean(~(-1)) === Boolean(0) === false