2016-04-28 6 views
7

कहें कि मेरे पास एक स्ट्रिंग है, जो मान पहले से ही एक संख्या है, उदा। var str = "1234" अब मैं इसे संख्या में बदलना चाहता हूं।क्यों स्ट्रिंग संख्या को बदलने के लिए जेएस में str * 1 से बेहतर है?

मैं इंटरनेट पर अब तक दो चाल देखा है,

  1. उपयोग एकल +: var num = +str
  2. उपयोग गुणा ऑपरेटर *: var num = str*1

मुझे पता है कि एक है जो चाहते हैं सामान्य में बेहतर।

जैसा कि मैंने यहां स्वीकृत उत्तर की टिप्पणी से देखा: Converting Json Results to a Date, ऐसा लगता है कि *1 से बचा जाना सर्वोत्तम है। क्या यह सच है और इसके पीछे क्या कारण है?

+5

पूर्णांक के लिए, parseInt() बेहतर –

+2

एकल प्लस परिभाषा से एक नंबर के लिए एक मूल्य को परिवर्तित करने का इरादा है हो सकता है, इसलिए यह अधिक अर्थ की दृष्टि से सही गुणा से कम 1 से जो एक और परिचय है संकार्य। @EricSo - parseInt() केवल तभी बेहतर होता है जब आप विशेष रूप से स्ट्रिंग में किसी गैर-न्यूमेरिक डेटा या दशमलव स्थान मान को अनदेखा करना चाहते हैं - अन्यथा यह यूनरी प्लस * से * बदतर * है * क्योंकि यह उस सामान को अनदेखा करता है। – nnnnnn

उत्तर

10

कम संचालन, मूल रूप से।

यूनरी प्लस आंतरिक toNumber विधि को कॉल करता है, जबकि गुणात्मक ऑपरेटर toNumber पर भी कॉल करता है, फिर उस पर गणित ऑपरेशन करता है।

अतिरिक्त कदम क्यों करें?

http://www.ecma-international.org/ecma-262/6.0/#sec-unary-plus-operator

http://www.ecma-international.org/ecma-262/6.0/#sec-applying-the-mul-operator

+0

धन्यवाद। स्वच्छ और स्पष्ट उत्तर, और मुझे बताएं कि + हैकी बिल्कुल नहीं है..यह वास्तव में नौकरी करने का आधिकारिक इरादा है – shole

+1

मैं नहीं कहूंगा कि यह 'आधिकारिक मंशा' है क्योंकि दृढ़ता से टाइप की जाने वाली भाषाएं हैं जो लागू करती हैं यूनरी '+'। हालांकि, 'ASM' नामक एक विशिष्ट जावास्क्रिप्ट सबसेट का उपयोग करते समय, '+' आधिकारिक तौर पर एक फ़्लोटिंग पॉइंट नंबर और ' परिभाषित करने के लिए उपयोग किया जाता है। 0' 32 बिट पूर्णांक को परिभाषित करने के लिए प्रयोग किया जाता है। –

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

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