यह केवल गैर-संख्याओं को संख्या में परिवर्तित नहीं करता है, यह उन्हें संख्याओं में परिवर्तित करता है जिन्हें 32-बिट अहस्ताक्षरित इनट्स के रूप में व्यक्त किया जा सकता है।
हालांकि JavaScript की संख्या डबल परिशुद्धता तैरता (*), बिटवाइज़ ऑपरेटर्स हैं ( <<
, >>
, &
, |
और ~
) 32-बिट पूर्णांकों पर संचालन के संदर्भ में परिभाषित कर रहे हैं। एक बिटवाइज़ ऑपरेशन करना संख्या को 32-बिट हस्ताक्षरित इंट में परिवर्तित करता है, गणना करने से पहले 32 से किसी भी अंश और उच्च-स्थान के बिट्स को खो देता है और फिर वापस संख्या में परिवर्तित होता है।
तो बिना किसी वास्तविक प्रभाव के एक बिटवाइज़ ऑपरेशन करना, जैसे 0 बिट्स की राइट-शिफ्ट >>0
, एक नंबर राउंड करने का एक त्वरित तरीका है और यह सुनिश्चित करना है कि यह 32-बिट इंट रेंज में है। इसके अतिरिक्त, ट्रिपल >>>
ऑपरेटर, अपने अहस्ताक्षरित ऑपरेशन को करने के बाद, अपनी गणना के परिणामों को दूसरे के हस्ताक्षरित पूर्णांक के बजाय एक अहस्ताक्षरित पूर्णांक के रूप में परिवर्तित करता है, इसलिए इसका उपयोग नकारात्मक को 32-बिट-टू-सप्लीमेंट में परिवर्तित करने के लिए किया जा सकता है। एक बड़ी संख्या के रूप में संस्करण। का उपयोग करते हुए >>>0
यह सुनिश्चित करती है 0 और 0xFFFFFFFF के बीच एक पूर्णांक मिल गया है।
इस मामले में यह उपयोगी है क्योंकि ECMAScript 32 बिट अहस्ताक्षरित ints के संदर्भ में सरणी अनुक्रमित को परिभाषित करता है। तो अगर आप array.filter
एक तरह से लागू करने की कोशिश कर रहे हैं जो वास्तव में ECMAScript पांचवें संस्करण के मानक को डुप्लिकेट करता है, तो आप संख्या को इस तरह 32-बिट अहस्ताक्षरित इंट में डाल देंगे।
(वास्तविकता में इसके लिए थोड़ा व्यावहारिक जरूरत है उम्मीद है कि लोगों की स्थापना करने के लिए नहीं जा रहे हैं के रूप में array.length
करने के लिए 0.5
, -1
, 1e21
या 'LEMONS'
। लेकिन इस जावास्क्रिप्ट लेखकों के बारे में हम बात कर रहे हैं तो आप कभी पता नहीं है, ...)
सारांश:
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
(*: ठीक है, वे फ़्लोट्स की तरह व्यवहार करने के रूप में परिभाषित किए गए हैं। यह मुझे आश्चर्यचकित नहीं करेगा अगर कुछ जावास्क्रिप्ट इंजन वास्तव में प्रदर्शन के कारणों के लिए जब यह उपयोग कर सकते हैं, लेकिन यह एक कार्यान्वयन विवरण होगा जिसे आपको लेने की आवश्यकता नहीं होगी। का लाभ।)