همونطور که اطلاع دارید در جلسه قبل در مورد Map و WeakMap براتون توضیحاتی رو قرار دادیم و شما رو بصورت کامل با اونا آشنا کردیم. در این جلسه میخوایم در مورد تغییرات و امکانات جدیدی که در ES6 برای شئ Number معرفی شده اند، توضیحاتی رو قرار بدیم. برای این آموزش از این لینک به عنوان منبع استفاده میکنیم.
همونطور که اطلاع دارید شئ Number به شما اجازه میده که با اعداد کار کرده و اونا رو مدیریت کنید. در زیر تغییرات و امکانات جدید رو با هم بررسی میکنیم.
همونطور که میدونین در ES5 یک تابع بنام parseInt وجود داشت که با استفاده از اون میتونستید یک رشته رو به یک عدد در مبنای مشخص تبدیل کنید. در ES5 این مورد بصورت سراسری و Global بود ولی در ES6 اون رو به عنوان عضوی از شئ Number در آوردن و باید بصورت Number.parseInt از اون استفاده کنید. کد زیر رو در نظر بگیرید:
console.log(Number.parseInt === parseInt); // true |
میبینید که این دو مورد رو با یکدیگر مقایسه کردیم و پاسخ در خروجی true خواهد بود. پس از این به بعد از Number.parseInt استفاده کنید. نحوه کارکرد اون فرقی با گذشته نکرده است.
همانند تابع parseInt، تابع دیگری بنام parseFloat وجود داره که با استفاده از اون میتونین یک ورودی رو به اون پاس بدین و این تابع اون رو تجزیه و تحلیل میکنه و عدد اعشاری رو برمیگردونه. کد زیر رو ببینید:
console.log(Number.parseFloat === parseFloat); // true |
پس از این به بعد از Number.parseFloat استفاده کنید. نحوه کارکرد اون فرقی با گذشته نکرده است.
همونطور که میدونین 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 نمایش داده میشه. مثالهای زیر رو نیز در نظر بگیرید:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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(' '); |
همونطور که میدونین با استفاده از تابع 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 |
این متد در ES6 معرفی شده است و با استفاده از اون میتونین صحیح بودن یک عدد رو بررسی کنید. اگر عدد وارد شده صحیح باشه true و در غیر اینصورت false برگشت داده میشه. مثالهای زیر رو در نظر بگیرید:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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 رو نمایش میدهند.
این متد در 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 برگشت داده میشه.
تعدادی ثابت یا constant جدید در ES6 به شئ Number اضافه شدن که میتونین از اونا استفاده کنید.
به همین راحتی.
موفق و پیروز باشید.
یا علی
سون لرن • آموزش...