javascriptNumber parsingparseInt و parseFloat در جاوااسکریپت
parseInt و parseFloat در جاوااسکریپت چگونه متن را میخوانند؟ تفاوت با Number، تعیین مبنا و پذیرش بخش ابتدایی عدد را با مثال ورودی بشناسید.
مفهوم به زبان ساده
برای خواندن عدد از متن، همهٔ ابزارها یک قرارداد ندارند. Number تلاش میکند شکل متنی یک مقدار عددی را تبدیل کند. parseInt بخش ابتدایی قابل خواندن بهصورت عدد صحیح را با مبنای مشخص میخواند و parseFloat پیشوند عدد اعشاری را میپذیرد. این تفاوت برای دادهٔ دارای پسوندی مانند px مفید است، اما برای فرم مبلغ میتواند ناخواسته ورودی خراب را قبول کند.
در parseInt، مبنا را صریح بنویسید؛ برای رقمهای معمول لاتین، ۱۰ منظور را روشن میکند. رسیدن به نویسهٔ نامعتبر، خواندن ادامه را متوقف میکند. برای نمونه، '12px' به ۱۲ میرسد و '12.5' در parseInt به ۱۲ محدود میشود. این رفتار گردکردن نیست. Number('12px') در مقابل NaN میدهد. همچنین parseInt('1e3', 10) نمایش علمی را مانند Number تفسیر نمیکند.
در مثال، دو قرارداد را کنار هم میگذاریم تا انتخاب ابزار آگاهانه باشد. اگر ورودی باید فقط رقم ساده باشد، نخست شکل آن را بررسی کنید، سپس تبدیل و کنترل محدوده انجام دهید. ارقام فارسی، واحد پول و جداکنندهها نیز سیاست جدا میخواهند. حذف بیقید همهٔ نویسههای غیرعددی میتواند معنای متن اشتباه را بیخبر عوض کند.
کجا به کار میآید؟
- خواندن پیشوند عددی در دادهای با پسوندِ تعریفشده
- انتخاب روش تبدیل مطابق قرارداد فرم یا فایل ورودی
از تعریف تا یک مثال واقعی
console.log(parseInt('12px', 10));
console.log(Number.isNaN(Number('12px')));
console.log(parseFloat('12.5kg'));
console.log(parseInt('12.9', 10));
console.log(parseInt('1e3', 10));
console.log(Number('1e3'));
12 true 12.5 12 1 1000
این مثال چطور کار میکند؟
parseInt عدد صحیح ابتدای 12px را میخواند؛ Number کل متن را نمیپذیرد.
parseFloat پیشوند اعشاریِ نمونهٔ وزنی را میگیرد.
نماد علمی و متن اعشاری نشان میدهند ابزارها قابل جایگزینی بیبررسی نیستند.
اشتباه رایج
parseInt ورودی را اعتبارسنجی کامل نمیکند و ابزار گردکردن عدد نیست. همچنین آن را مستقیم به map ندهید؛ آرگومان دوم callback میتواند ناخواسته مبنای parseInt شود.
این را به خاطر بسپارید
قبل از تبدیل، تعیین کنید کل ورودی باید عدد باشد یا فقط پیشوند آن؛ ابزار را مطابق همین قرارداد انتخاب کنید.