कौनसा अच्छा है?
मैं इसे केवल कुछ बाइट्स शेविंग के लिए कह रहा हूं, क्योंकि मैं संख्या (x) के बजाय + x का उपयोग कर सकता हूं। क्या पारसेफ्लोट कुछ बेहतर करता है?
कौनसा अच्छा है?
मैं इसे केवल कुछ बाइट्स शेविंग के लिए कह रहा हूं, क्योंकि मैं संख्या (x) के बजाय + x का उपयोग कर सकता हूं। क्या पारसेफ्लोट कुछ बेहतर करता है?
जवाबों:
parseFloat
/ parseInt
एक स्ट्रिंग को पार्स करने के लिए है, जबकि Number
/ +
एक संख्या के लिए एक मान के लिए है। वे अलग तरह से व्यवहार करते हैं। लेकिन पहले आइए देखें कि वे समान व्यवहार कहां करते हैं:
parseFloat('3'); // => 3
Number('3'); // => 3
parseFloat('1.501'); // => 1.501
Number('1.501'); // => 1.501
parseFloat('1e10'); // => 10000000000
Number('1e10'); // => 10000000000
इसलिए जब तक आपके पास मानक संख्यात्मक इनपुट है, तब तक कोई अंतर नहीं है। हालाँकि, यदि आपका इनपुट किसी संख्या से शुरू होता है और फिर अन्य वर्ण होते हैं, parseFloat
तो स्ट्रिंग से संख्या को काटता है, जबकि Number
देता है NaN
(संख्या नहीं):
parseFloat('1x'); // => 1
Number('1x'); // => NaN
इसके अलावा, Number
हेक्साडेसिमल इनपुट को समझता है जबकि parseFloat
यह नहीं है:
parseFloat('0x10'); // => 0
Number('0x10'); // => 16
लेकिन Number
केवल सफेद स्थान वाले खाली तारों या तारों के साथ अजीब काम करता है:
parseFloat(''); // => NaN
Number(''); // => 0
parseFloat(' \r\n\t'); // => NaN
Number(' \r\n\t'); // => 0
कुल Number
मिलाकर , मुझे यह अधिक उचित लगता है, इसलिए मैं लगभग हमेशा Number
व्यक्तिगत रूप से उपयोग करता हूं (और आप पाएंगे कि बहुत सारे आंतरिक जावास्क्रिप्ट फ़ंक्शन Number
भी इस तरह से उपयोग करते हैं)। यदि कोई टाइप करता है तो '1x'
मैं इसे ट्रीट करने के बजाय एक त्रुटि दिखाना पसंद करता हूं जैसे कि उन्होंने टाइप किया था '1'
। केवल एक बार जब मैं वास्तव में एक अपवाद बनाता हूं, जब मैं एक शैली को एक संख्या में परिवर्तित कर रहा हूं, जिसमें मामला parseFloat
सहायक होता है क्योंकि शैलियाँ एक रूप में आती हैं '3px'
, जिस स्थिति में मैं 'px'
भाग छोड़ना चाहता हूं और बस प्राप्त करना चाहता हूं 3
, इसलिए मुझे parseFloat
उपयोगी लगता है यहाँ। लेकिन वास्तव में आप जो चुनते हैं वह आप पर निर्भर करता है और इनपुट के कौन से रूप आप स्वीकार करना चाहते हैं।
ध्यान दें कि यूनिरी +
ऑपरेटर का उपयोग Number
फ़ंक्शन के रूप में उपयोग करने के समान है:
Number('0x10'); // => 16
+'0x10'; // => 16
Number('10x'); // => NaN
+'10x'; // => NaN
Number('40'); // => 40
+'40'; // => 40
इसलिए मैं आमतौर पर सिर्फ +
शॉर्ट के लिए उपयोग करता हूं । जब तक आप जानते हैं कि यह क्या करता है, मुझे पढ़ना आसान लगता है।
Number()
को "अजीब" नहीं मानूंगा। मैं इसे और भी अधिक अपेक्षित मानूंगा, व्हॉट्सएप एक खाली मूल्य है लेकिन यह शून्य / अपरिभाषित नहीं है => 0 एक अच्छा परिणाम है। शोकेस के लिए वैसे भी आपके लिए बड़ा (+) :)
Number('Infinity') === Infinity
जबकिparseInt('Infinity') === NaN
+
(यूनीरी प्लस) का उपयोग नहीं करूंगा , क्योंकि यदि आप पिछली पंक्ति के एक अर्धविराम को भूल जाते हैं, तो इसके बजाय एक अतिरिक्त अभिव्यक्ति का मूल्यांकन किया जा सकता है।
अंतर यह है कि जब इनपुट "उचित संख्या" नहीं होता है। Number
रिटर्न NaN
जबकि parseFloat
पार्स करता है "ज्यादा के रूप में यह कर सकते हैं"। अगर parseFloat रिटर्न करते समय खाली स्ट्रिंग Number
रिटर्न पर कहा जाता 0
है NaN
।
उदाहरण के लिए:
Number("") === 0 // also holds for false
isNaN(parseFloat("")) === true // and null
isNaN(Number("32f")) === true
parseFloat("32f") === 32
NaN != NaN
हालांकि
NaN != NaN
मूल्यांकन करता है - टिप के लिए धन्यवाद!
isNaN(NaN)
रिटर्नtrue
इन उदाहरणों में आप अंतर देख सकते हैं:
Number('') = 0;
Number(false) = 0;
Number('1a') = NaN;
parseFloat('') = NaN;
parseFloat(false) = NaN;
parseFloat('1a') = 1;
parseFloat थोड़ा धीमा है क्योंकि यह एक स्ट्रिंग में एक संख्या की पहली उपस्थिति के लिए खोज करता है, जबकि संख्या अवरोधक स्ट्रिंग्स से एक नया नंबर उदाहरण बनाता है जिसमें व्हाट्सएप के साथ संख्यात्मक मान शामिल होते हैं या जिसमें गलत मान होते हैं।
PS यदि आप कुछ सार्वभौमिक प्रकार के रूपांतरण समाधानों में रुचि रखते हैं, तो आप मेरे ब्लॉग में टाइप रूपांतरण के बारे में पोस्ट पढ़ सकते हैं: http://justsimplejs.blogspot.com/2012/08/data-type-conversion.html
खाली स्ट्रिंग के लिए, वे अलग हैं।
+""
और Number("")
0 देता है, जबकि parseFloat("")
NaN लौटाता है।
parseFloat()
एक खाली स्ट्रिंग के रूप में इसका सही परिणाम है संख्या नहीं है 0
(पढ़ें: NaN) जबकि एक स्ट्रिंग है जिसमें चरित्र "0"
IS है 0
;
+x
0
न केवल एक रिक्त स्ट्रिंग के लिए बल्कि किसी भी व्हाट्सएप-केवल स्ट्रिंग्स के लिए भी रिटर्न । उदाहरण: +" "
, +"\t\t\t"
, +"\n\n"
- उन सभी को देना 0
परिणाम के रूप में
जहाँ तक मुझे पता है, और यह केवल सहकर्मियों से अधिक सुना हुआ है, इसलिए पूरी तरह से बीमार हो सकता है, कि parseFloat तेजी से मार्जिन है।
हालांकि आगे के शोध पर, ऐसा लगता है कि यह प्रदर्शन अंतर ब्राउज़र पर निर्भर है।
http://jsperf.com/parseint-vs-parsefloat/6
इन jsPerf परिणामों पर एक नज़र डालें, और आपको कॉल करें। (इसमें + x परीक्षण भी शामिल हैं)
जैसा कि @xdazz के उत्तर में उल्लेख किया गया है, +""
और Number("")
वापसी 0
करते हुए फिर से parseFloat("")
लौटता NaN
हूं, मैं पार्सफ्लोट के साथ जाऊंगा, क्योंकि एक खाली स्ट्रिंग का मतलब संख्या 0 नहीं है, केवल एक स्ट्रिंग जिसमें चरित्र के साथ "0"
0 का मतलब है;
parseFloat()
अभी भी विजेता है।