কোনটা ভাল?
আমি এটি কেবল কয়েকটি বাইট শেভ করার খাতিরে জিজ্ঞাসা করছি, কারণ আমি সংখ্যার পরিবর্তে + এক্স ব্যবহার করতে পারি (এক্স)। পার্সফ্লোট কি আরও ভাল কিছু করে?
কোনটা ভাল?
আমি এটি কেবল কয়েকটি বাইট শেভ করার খাতিরে জিজ্ঞাসা করছি, কারণ আমি সংখ্যার পরিবর্তে + এক্স ব্যবহার করতে পারি (এক্স)। পার্সফ্লোট কি আরও ভাল কিছু করে?
উত্তর:
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'
। আমি যখন কেবল একটি স্টাইলকে একটি সংখ্যায় রূপান্তর করি তখনই কেবল আমি ব্যতিক্রম করি case 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
প্রত্যাবর্তন করে । যদি খালি স্ট্রিং আহ্বান আয় parseFloat ফেরৎ যখন ।NaN
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;
পার্সফ্লোটটি কিছুটা ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে সংখ্যাযুক্ত মান বা ভ্যালু মান ধারণ করে এমন স্ট্রিং থেকে একটি নতুন সংখ্যা তৈরি করে while
পিএস যদি আপনি কিছু সার্বজনীন ধরণের রূপান্তর সমাধানে আগ্রহী হন তবে আপনি আমার ব্লগে টাইপ রূপান্তর সম্পর্কে পোস্টটি পড়তে পারেন: http://justsimplejs.blogspot.com/2012/08/data-type-conversion.html
খালি স্ট্রিংয়ের জন্য এগুলি আলাদা।
+""
এবং Number("")
0 প্রদান করে, যখন parseFloat("")
NaN প্রদান করে।
parseFloat()
অধিকার ফলাফলের হয়েছে যেমন একটি খালি স্ট্রিং সংখ্যা নয় 0
(পড়া: NAN) যখন অক্ষর দিয়ে একটি স্ট্রিং "0"
IS তাতে 0
;
+x
0
কেবল একটি খালি স্ট্রিংয়ের জন্য নয় কেবল কোনও সাদা স্থানের স্ট্রিংয়ের জন্যও ফেরত দেয় returns উদাহরণ: +" "
, +"\t\t\t"
, +"\n\n"
- তাদের সব দিতে 0
ফলে
আমি যতদূর জানি, এবং এটি কেবল সহকর্মীদের কাছ থেকে শোনা গেছে তাই পুরোপুরি অসুস্থ অবহিত হতে পারে, পার্সফ্লোট সামান্য দ্রুত।
যদিও আরও গবেষণা করার পরেও মনে হবে এই পারফরম্যান্স পার্থক্যটি ব্রাউজার নির্ভর।
http://jsperf.com/parseint-vs-parsefloat/6
এই jscreen ফলাফলগুলি দেখুন এবং আপনাকে কল করুন। (এতে + এক্স পরীক্ষাও রয়েছে)
@Xdazz যেমন লক্ষ করেছি এর উত্তর, +""
এবং Number("")
রিটার্ন 0
যখন parseFloat("")
আয় NaN
তাই আবার আমি parseFloat সঙ্গে, যেতে হবে কারণ একটি খালি স্ট্রিং সংখ্যা 0 মানে এই নয়, শুধুমাত্র অক্ষর দিয়ে একটি স্ট্রিং "0"
এটা 0 মানে হয়;
parseFloat()
এখনও বিজয়ী।