दिलचस्प पोस्ट
मापदंडों के साथ कॉल सबलेट और जावा कोड से जावा कोड खोलें JQuery का उपयोग कर देशी टूलटिप छुपाएं प्रमुख अधिसूचना – एंड्रॉइड लॉलीपॉप कोणीय 2: 'एनजीएमोडेल' से बाध्य नहीं किया जा सकता क्योंकि यह 'इनपुट' की ज्ञात संपत्ति नहीं है क्या ईथर 6 चर के बिना ईएस 6 (ईसीएमएस्क्रिप्ट 6) में लूप एक्स बार की कोई व्यवस्था है? जावा के toLowerCase () और toUpperCase () के साथ लोकेल का उपयोग करना उद्देश्य सी संदेश प्रेषण तंत्र मैं सी # में एक विशिष्ट समय पर एक चेतावनी कैसे उत्पन्न करूं? एंड्रॉइड पर 20% पारदर्शी पृष्ठभूमि कैसे बनाएं नेस्टेड रीसाइक्लर देखने की ऊँचाई अपनी सामग्री को लपेट नहीं करती है जावास्क्रिप्ट में वैरिएबल टाइप ढूँढना उत्पत्ति को ggplot2 (R) में 0 पर प्रारंभ करने के लिए मजबूर करें MySQL – सभी कॉलम का चयन करें जहां एक कॉलम अलग है Django लगातार डेटाबेस कनेक्शन पायथन 3 प्रकार त्रुटि: sys.stdout.write () के साथ बाइट नहीं होना चाहिए।

JavaScript >>> ऑपरेटर क्या है और आप इसे कैसे उपयोग करते हैं?

मैं मोज़िला से कोड देख रहा था जो कि सरणी के लिए एक फिल्टर विधि जोड़ती है और इसमें कोड की एक पंक्ति होती थी जो मुझे उलझन में डालती थी

var len = this.length >>> 0; 

मैंने कभी नहीं देखा है >>> पहले जावास्क्रिप्ट में इस्तेमाल किया।
यह क्या है और यह क्या करता है?

Solutions Collecting From Web of "JavaScript >>> ऑपरेटर क्या है और आप इसे कैसे उपयोग करते हैं?"

यह न केवल नंबर पर नॉन-नंबर को परिवर्तित नहीं करता है, यह उन्हें उन संख्याओं में कनवर्ट करता है जिन्हें 32-बिट हस्ताक्षरित ints के रूप में व्यक्त किया जा सकता है।

यद्यपि जावास्क्रिप्ट के नंबर दोहरे सटीक फ़्लोट्स (*) हैं, बिट-बिट ऑपरेटर ( << , >> ,,, और ~ ) को 32-बिट इंटिजर्स पर ऑपरेशन के संदर्भ में परिभाषित किया गया है। बिटवर्ड ऑपरेशन करना 32-बिट हस्ताक्षरित इंट संख्या को बदलता है, गणना करने से पहले और फिर नंबर पर परिवर्तित होने से पहले, 32 से अधिक किसी भी अंश और उच्च स्थान बिट्स को खो देता है।

तो 0 बिट्स >>0 दाहिनी ओर से बदलाव की तरह कोई वास्तविक प्रभाव नहीं के साथ एक बिटवायर ऑपरेशन करना, एक नंबर को गोल करने का एक त्वरित तरीका है और यह सुनिश्चित करना कि यह 32-बिट इंट रेंज में है इसके अतिरिक्त, ट्रिपल >>> ऑपरेटर, अपनी अहस्ताक्षरित ऑपरेशन करने के बाद, इसकी गणना के परिणामों को संख्या को हस्ताक्षरित पूर्णांक के बजाय एक अहस्ताक्षरित पूर्णांक के रूप में परिवर्तित करता है, इसलिए इसे 32-बिट- एक बड़ी संख्या के रूप में दो के पूरक संस्करण का उपयोग करना >>>0 सुनिश्चित करता है कि आपको 0 और 0xFFFFFFFF के बीच पूर्णांक मिला है।

इस स्थिति में यह उपयोगी है क्योंकि ईसीएमएस्क्रिप्ट 32 बीट साइंस के बिना आरे इंडेक्स को परिभाषित करता है। इसलिए यदि आप array.filter को क्रियान्वित करने का प्रयास कर रहे हैं। array.filter जिस तरीके से array.filter पांचवें संस्करण मानक कहते हैं, तो ठीक उसी तरह से डुप्लिकेट करता है, तो आप इस तरह से 32-बिट अहस्ताक्षरित array.filter को इस तरह array.filter

(वास्तव में इस के लिए थोड़ा व्यावहारिक आवश्यकता है क्योंकि उम्मीद है कि लोग 0.5 , -1 , 1 1e21 या 'LEMONS' लिए array.length सेट नहीं करेंगे। लेकिन यह जावास्क्रिप्ट लेखकों के बारे में हम बात कर रहे हैं, इसलिए आप कभी नहीं जानते ..)

सारांश:

 1>>>0 === 1 -1>>>0 === 0xFFFFFFFF -1>>0 === -1 1.7>>>0 === 1 0x100000002>>>0 === 2 1e21>>>0 === 0xDEA00000 1e21>>0 === -0x21600000 Infinity>>>0 === 0 NaN>>>0 === 0 null>>>0 === 0 '1'>>>0 === 1 'x'>>>0 === 0 Object>>>0 === 0 

(*: ठीक है, उन्हें परिभाषित कर दिया जाता है जैसे फ्लोट्स की तरह व्यवहार करना। मुझे आश्चर्य नहीं होगा कि कुछ जावास्क्रिप्ट इंजन वास्तव में उपयोग किए जाने पर उपयोग किए जाने के दौरान उपयोग किए गए थे, लेकिन यह एक कार्यान्वयन विवरण होगा, जिसे आप किसी भी का लाभ।)

अहस्ताक्षरित सही पारी ऑपरेटर को मोज़िला के सभी सरणी अतिरिक्त विधि कार्यान्वयन में उपयोग किया जाता है, यह सुनिश्चित करने के लिए कि length संपत्ति एक अहस्ताक्षरित 32-बिट पूर्णांक है

सरणी ऑब्जेक्ट की length संपत्ति विनिर्देश में वर्णित है:

प्रत्येक सरणी ऑब्जेक्ट में लम्बाई की संपत्ति होती है जिसका मूल्य हमेशा 2 32 से कम एक गैर-पूर्णांक पूर्णांक होता है।

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

मोज़िला सरणी एक्स्ट्रा लागूकरण ECMAScript 5 अनुरूप होने का प्रयास करते हैं, Array.prototype.indexOf विधि (§ 15.4.4.14) के विवरण को देखें:

 1. चलो हे मूल्य से होकर ToObject को कॉल करने का नतीजा हो 
    तर्क के रूप में
 2. लैन वेल्यू को [[Get]] के आंतरिक विधि को कॉल करने का परिणाम दें 
    तर्क "लंबाई"
 3. इसे करने के लिए ToUint32 (lenValue) होना चाहिए।
 ....

जैसा कि आप देख सकते हैं, वे ToUint32 कार्यान्वयन पर ToUint32 के पालन करने के लिए ToUint32 पद्धति के व्यवहार को पुन: उत्पन्न करना चाहते हैं, और जैसा मैंने पहले कहा था, अहस्ताक्षरित सही बदलाव ऑपरेटर सबसे आसान तरीका है।

यह अहस्ताक्षरित सही बिट बदलाव ऑपरेटर है। इस और हस्ताक्षरित सही बिट पारी ऑपरेटर के बीच अंतर यह है कि अहस्ताक्षरित सही बिट शिफ्ट ऑपरेटर ( >>> ) शून्य से शून्य के साथ भरता है, और हस्ताक्षर किए सही बिट शिफ्ट ऑपरेटर ( >> ) साइन बिट के साथ भरता है, इस प्रकार स्थानांतरित होने पर संख्यात्मक मूल्य के चिह्न को बनाए रखना

ड्राइव ने पर्याप्त रूप से समझाया है कि ऑपरेटर क्या है और यह क्या करता है। इसके पीछे इसका अर्थ है / इसका प्रयोग क्यों किया गया था:

0 किसी भी दिशा में स्थानांतरण करने से मूल संख्या null और 0 null हो जाएगी। ऐसा लगता है कि जिस उदाहरण कोड पर आप देख रहे हैं वह इस का उपयोग कर रहा है। this.length >>> 0 यह सुनिश्चित करने के लिए कि this.length संख्यात्मक है, भले ही यह। this.length परिभाषित नहीं हो।

कई लोगों के लिए, बिटवायर ऑपरेशन अस्पष्ट (और डगलस क्रॉकरफोर्ड / जेएसलिंंट ऐसी चीज़ों के उपयोग के खिलाफ सुझाव देते हैं)। इसका अर्थ यह नहीं है कि इसके गलत काम करना है, लेकिन कोड को अधिक पठनीय बनाने के लिए अधिक अनुकूल और परिचित तरीके मौजूद हैं। यह सुनिश्चित करने के लिए एक अधिक स्पष्ट तरीका है कि len 0 है या तो निम्न दो विधियों में से एक है

 // Cast this.length to a number var len = +this.length; 

या

 // Cast this.length to a number, or use 0 if this.length is // NaN/undefined (evaluates to false) var len = +this.length || 0; 

>>> अहस्ताक्षरित सही पारी ऑपरेटर ( देखें जावा पेज 1.5 के पृष्ठ 76 ), के विपरीत, >> पर हस्ताक्षर किए सही पारी ऑपरेटर

>>> नकारात्मक संख्याओं को स्थानांतरित करने के परिणामों में परिवर्तन होता है क्योंकि यह स्थानांतरण होने पर साइन बिट को संरक्षित नहीं करता है । इसका परिणाम उदाहरण के आधार पर समझा जा सकता है, व्याख्याकर्ता से:

 $ 1 >> 0 1 $ 0 >> 0 0 $ -1 >> 0 -1 $ 1 >>> 0 1 $ 0 >>> 0 0 $ -1 >>> 0 4294967295 $(-1 >>> 0).toString(16) "ffffffff" $ "cabbage" >>> 0 0 

तो संभव है कि यहाँ क्या किया जा सकता है लंबाई, या 0 प्राप्त करने के लिए यदि लंबाई अपरिभाषित है या नहीं एक पूर्णांक, ऊपर "cabbage" उदाहरण के अनुसार मुझे लगता है कि इस मामले में यह मानना ​​सुरक्षित है कि यह। this.length कभी नहीं < 0 फिर भी, मैं तर्क दूंगा कि यह उदाहरण एक गंदा हैक है , दो कारणों से:

  1. <<< ऋणात्मक संख्याओं का उपयोग करते समय, एक साइड इफेक्ट संभवत: ऊपर दिए गए उदाहरण में (या होने की संभावना) इरादा नहीं है।

  2. कोड का इरादा स्पष्ट नहीं है , क्योंकि इस प्रश्न का अस्तित्व सत्यापित करता है।

सबसे अच्छा अभ्यास संभवतः कुछ अधिक पठनीय उपयोग करने के लिए है जब तक प्रदर्शन बिल्कुल महत्वपूर्ण है:

 isNaN(parseInt(foo)) ? 0 : parseInt(foo) 

दो कारण:

  1. >>> का परिणाम "अभिन्न" है

  2. 0 = 0 (चूंकि जेएस एलएफएस को सांख्यिक संदर्भ में प्रयोग करने का प्रयास करेगा, क्योंकि यह "foo" >>> 0 आदि के लिए भी काम करेगा।)

याद रखें कि जेएस में ये संख्याएं डबल के आंतरिक प्रतिनिधित्व हैं यह लंबाई के लिए बुनियादी इनपुट सेनेटिटी का सिर्फ एक "त्वरित" तरीका है

हालांकि , 1 >>> 0 (उफ़, शायद वांछित लंबाई नहीं है!)