2010-06-21 5 views
6

Another question ने जावास्क्रिप्ट में कोड स्निपेट a >>> 0 के अर्थ के बारे में पूछा। यह पता चला है कि यह सुनिश्चित करने का एक चालाक तरीका है कि एक चर एक हस्ताक्षरित 32-बिट पूर्णांक है।जावास्क्रिप्ट में "पूर्णांक" रूपांतरण/टाइपकास्ट करने का बेवकूफ तरीका क्या है?

यह बहुत साफ है, लेकिन मुझे इसे दो कारणों से पसंद नहीं है।

  • अभिव्यक्ति का उद्देश्य स्पष्ट नहीं है, कम से कम मेरे लिए नहीं। जावास्क्रिप्ट में एक "पूर्णांक" करने के लिए एक मनमाना मूल्य में परिवर्तित करने का सबसे मुहावरेदार तरीका क्या है:
  • यह ऋणात्मक संख्याओं

इस ओर जाता है मुझे पूछने के लिए के लिए काम नहीं करता है? इसे हस्ताक्षरित पूर्णांक के लिए काम करना चाहिए, न केवल गैर-ऋणात्मक संख्याओं के लिए। मामले जहां यह इस तथ्य के कारण टूट जाता है कि पूर्णांक केवल जावास्क्रिप्ट में छिपाने में तैरते हैं स्वीकार्य हैं, लेकिन उन्हें स्वीकार किया जाना चाहिए। इसे किसी भी मामले में undefined या NaN वापस नहीं करना चाहिए (ये पूर्णांक नहीं हैं), लेकिन गैर-संख्यात्मक मानों के लिए 0 लौटाएं।

उत्तर

4

parseInt "सबसे बेवकूफ" तरीका है, क्योंकि यह वास्तव में वर्णन करता है कि आप इसे क्या करना चाहते हैं। parseInt की कमी यह है कि यदि आप एक गैर-संख्यात्मक स्ट्रिंग इनपुट करते हैं तो यह NaN लौटाता है।

एक और विधि बिटवाई ओरिंग 0 (| 0) है, जो नकारात्मक संख्याओं के लिए भी काम करती है। इसके अलावा, यह गैर-न्यूमेरिक स्ट्रिंग पर इसका उपयोग करते समय 0 देता है। एक और फायदा यह है कि वास्तविक संख्याओं पर इसका उपयोग करते समय यह parseInt से थोड़ा तेज है; तारों को खिलाते समय धीमा होता है।

  • 12.4 | 0 आउटपुट 12
  • -12.4 | 0 आउटपुट -12
  • "12.4" | 0 आउटपुट 12
  • "not a number" | 0 आउटपुट 0
+0

यह बिल्कुल मैं क्या चाहते हैं नहीं करता है। 'parseInt (" एक int, damnit नहीं ")' '' 'रिटर्न 'NaN'। – fmark

+0

@fmark: समायोजित उत्तर। –

+0

उन्होंने उल्लेख किया '' 0' जो कुछ आप चाहते हैं वह बहुत अधिक काम करता है: तार 0 हैं, 'सत्य' 1 है,' 28.3' 28 है, '-28.3' है -28, NaN (जैसा कि' (+ "foo ") | 0') 0 है, 'अपरिभाषित' 0 है। क्या मुझे कुछ याद आया? – Amadan

संबंधित मुद्दे

 संबंधित मुद्दे