همونطور که اطلاع دارید در جلسه قبل در مورد Map و WeakMap براتون توضیحاتی رو قرار دادیم و شما رو بصورت کامل با اونا آشنا کردیم. در این جلسه میخوایم در مورد تغییرات و امکانات جدیدی که در ES6 برای شئ Number معرفی شده اند، توضیحاتی رو قرار بدیم. برای این آموزش از این لینک به عنوان منبع استفاده میکنیم.
تغییرات و امکانات جدید Number
همونطور که اطلاع دارید شئ Number به شما اجازه میده که با اعداد کار کرده و اونا رو مدیریت کنید. در زیر تغییرات و امکانات جدید رو با هم بررسی میکنیم.
تغییرات parseInt
همونطور که میدونین در ES5 یک تابع بنام parseInt وجود داشت که با استفاده از اون میتونستید یک رشته رو به یک عدد در مبنای مشخص تبدیل کنید. در ES5 این مورد بصورت سراسری و Global بود ولی در ES6 اون رو به عنوان عضوی از شئ Number در آوردن و باید بصورت Number.parseInt از اون استفاده کنید. کد زیر رو در نظر بگیرید:
console.log(Number.parseInt === parseInt); // true
میبینید که این دو مورد رو با یکدیگر مقایسه کردیم و پاسخ در خروجی true خواهد بود. پس از این به بعد از Number.parseInt استفاده کنید. نحوه کارکرد اون فرقی با گذشته نکرده است.
تغییرات parseFloat
همانند تابع parseInt، تابع دیگری بنام parseFloat وجود داره که با استفاده از اون میتونین یک ورودی رو به اون پاس بدین و این تابع اون رو تجزیه و تحلیل میکنه و عدد اعشاری رو برمیگردونه. کد زیر رو ببینید:
console.log(Number.parseFloat === parseFloat); // true
پس از این به بعد از Number.parseFloat استفاده کنید. نحوه کارکرد اون فرقی با گذشته نکرده است.
تغییرات isNaN
همونطور که میدونین NaN مخفف Not a Number هست و با استفاده از تابع global یا سراسری isNaN در ES5 میتونستید بررسی کنید که یک مقدار NaN هست یا خیر. اما این کد مشکلی رو داره که با هم بررسی میکنیم. کد زیر رو در نظر بگیرید:
console.log(isNaN("NaN")); // true
همونطور که میبینید رشته NaN رو به تابع isNaN پاس دادیم و مقدار true برگشت داده شده است. در صورتی که این مقدار NaN نیست و یک رشته است. در ES6 متد isNaN به شئ Number اضافه شده و مشکلات این چنینی رو برطرف کرده. کد زیر رو در نظر بگیرید:
console.log(Number.isNaN("NaN")); // false
میبینید که در اینجا جواب درست نمایش داده میشه. در اینجا دیگه رشته NaN بصورت ضمنی به NaN تبدیل نمیشه و بصورت رشته باقی میمونه و به همین دلیل false نمایش داده میشه. مثالهای زیر رو نیز در نظر بگیرید:
Number.isNaN(NaN); // true Number.isNaN(Number.NaN); // true Number.isNaN(0 / 0); // true // e.g. these would have been true with global isNaN() Number.isNaN('NaN'); // false Number.isNaN(undefined); // false Number.isNaN({}); // false Number.isNaN('blabla'); // false // These all return false Number.isNaN(true); Number.isNaN(null); Number.isNaN(37); Number.isNaN('37'); Number.isNaN('37.37'); Number.isNaN(''); Number.isNaN(' ');
تغییرات isFinite
همونطور که میدونین با استفاده از تابع global یا سراسری isFinite در ES5 میتونستید بررسی کنید که یک مقدار محدود یا متناهی هست یا خیر. اما این کد مشکلی رو داره که با هم بررسی میکنیم. کد زیر رو در نظر بگیرید:
console.log(Number.isFinite("400")); // true
همونطور که میبینید رشته 400 رو به تابع isFinite پاس دادیم و مقدار true برگشت داده شده است. در متد سراسری isFinite که در ES5 مورد استفاده قرار میگرفت، در چنین شرایطی رشته 400 به صورت ضمنی به عدد 400 تبدیل میشد و به همین دلیل چون عدد 400 یک عدد محدود یا متنهای است، true برگشت داده میشد. در ES6 متد isFinite به شئ Number اضافه شده و مشکلات این چنینی رو برطرف کرده. کد زیر رو در نظر بگیرید:
console.log(Number.isFinite("400")); // false
میبینید که در اینجا جواب درست نمایش داده میشه. در اینجا دیگه رشته 400 بصورت ضمنی به عدد 400 تبدیل نمیشه و بصورت رشته باقی میمونه و به همین دلیل false نمایش داده میشه. مثالهای زیر رو در نظر بگیرید:
Number.isFinite(Infinity); // false Number.isFinite(NaN); // false Number.isFinite(-Infinity); // false Number.isFinite(0); // true Number.isFinite(2e64); // true Number.isFinite('0'); // false Number.isFinite(null); // false
متد جدید isInteger
این متد در ES6 معرفی شده است و با استفاده از اون میتونین صحیح بودن یک عدد رو بررسی کنید. اگر عدد وارد شده صحیح باشه true و در غیر اینصورت false برگشت داده میشه. مثالهای زیر رو در نظر بگیرید:
Number.isInteger(0); // true Number.isInteger(1); // true Number.isInteger(-100000); // true Number.isInteger(0.1); // false Number.isInteger(Math.PI); // false Number.isInteger(NaN); // false Number.isInteger(Infinity); // false Number.isInteger(-Infinity); // false Number.isInteger('10'); // false Number.isInteger(true); // false Number.isInteger(false); // false Number.isInteger([1]); // false
میبینید که اون مواردی که عدد صحیح وارد نشده، مقدار false رو نمایش میدهند.
متد جدید isSafeInteger
این متد در ES6 معرفی شده است و با استفاده از اون میتونین بررسی کنید که عدد صحیح وارد شده در بازه مجاز برای اعداد صحیح قرار دارد یا خیر. اگر عدد وارد شده صحیح باشه true و در غیر اینصورت false برگشت داده میشه. بازه مربوط به safe Integer از عدد تا می باشد. مثالهای زیر رو در نظر بگیرید:
Number.isSafeInteger(3); // true Number.isSafeInteger(Math.pow(2, 53)); // false Number.isSafeInteger(Math.pow(2, 53) - 1); // true Number.isSafeInteger(NaN); // false Number.isSafeInteger(Infinity); // false Number.isSafeInteger('3'); // false Number.isSafeInteger(3.1); // false Number.isSafeInteger(3.0); // true
میبینید که اون مواردی که عدد صحیح وارد نشده، مقدار false رو نمایش میدهند. همونطور که دیدید 2 به توان 53 یک عدد صحیح مجاز نیست ولی اگر یکی از اون کم کنیم، در بازه مورد نظر قرار میگیره و مقدار true برگشت داده میشه.
ثابتهای اضافه شده به شئ Number
تعدادی ثابت یا constant جدید در ES6 به شئ Number اضافه شدن که میتونین از اونا استفاده کنید.
- Number.EPSILON : نشان دهنده اختلاف بین عدد 1 و کوچکترین عدد اعشاری بزرگتر از 1 میباشد. مقدار تقریبی اون 2-52 است.
- Number.MAX_SAFE_INTEGER : نشان دهنده بزرگترین مقدار عدد صحیح مجاز میباشد و مقدار اون 253 - 1 است.
- Number.MIN_SAFE_INTEGER : نشان دهنده کوچکترین مقدار عدد صحیح مجاز میباشد و مقدار اون -(253 - 1) میباشد.
- Number.MAX_VALUE : نشان دهنده بزرگترین مقدار عددی موجود در Javascript میباشد و مقدار اون تقریبا 1.79E+308 میباشد. هر عددی که بزرگتر از این عدد باشد، بینهایت یا Infinity شناخته میشه.
- Number.MIN_VALUE : نشان دهنده کوچکترین مقدار عددی موجود در Javascript میباشد و مقدار اون تقریبا 5e-324 میباشد. هر عددی که کوچکتر از این عدد باشد، به 0 تبدیل میشن.
- Number.NEGATIVE_INFINITY : نشان دهنده بینهایت منفی یا میباشد
- Number.POSITIVE_INFINITY : نشان دهنده بینهایت مثبت یا میباشد
به همین راحتی.
موفق و پیروز باشید.
یا علی
اولین دیدگاه این پست رو تو بنویس !