در JavaScript، مقادیر میتوانند انواع مختلفی داشته باشند. تغییر نوع یک متغیر را میتوان با «تبدیل نوع» صریح انجام داد. علاوه بر این، JavaScript هرگاه بافت ایجاب کند، «همنوعسازی نوع» (تبدیل نوع ضمنی) را نیز انجام میدهد.
JavaScript مانند بسیاری از زبانهای دیگر ساختاری برای تبدیل صریح به نوعی (متفاوت) ندارد، اما در عوض میتوان از چند ابزار درونساخت استفاده کرد.
بهطور خاص، میتوان از Boolean، Number و String بهعنوان تابع برای تبدیل یک مقدار به نوع مربوطه استفاده کرد.
با Boolean(value) میتوانید هر مقداری را به یک مقدار منطقی تبدیل کنید.
مجموعهی ثابتی از مقادیر وجود دارد، به نام مقادیر «کاذب»، که به false تبدیل میشوند.
مهمتر از همه، false، 0، رشتهی خالی، null، undefined و NaN کاذب هستند.
برای همهی مقادیر دیگر، Boolean مقدار true را برمیگرداند.
به این مقادیر «صادق» میگویند.
Boolean(-1);
// => true
Boolean(0);
// => false
Boolean(' ');
// => true
Boolean('');
// => false
توجه کنید که طبق قواعد توضیحدادهشده، '0'، 'false'، [] و {} در JavaScript صادق هستند.
از Number(value) میتوان برای تبدیل یک مقدار به عدد استفاده کرد.
فاصلههای سفید در ابتدا و انتهای رشته نادیده گرفته میشوند و رشتهی خالی به 0 تبدیل میشود.
اگر بخواهید مقداری غیراولیه یا رشتهای را تبدیل کنید که نمایانگر یک عدد نیست، نتیجه NaN (عدد نیست) خواهد بود.
Number(' -12.34 ');
// => -12.34
Number('1,2');
// => NaN
Number('');
// => 0
Number({ num: 123 });
// => NaN
با String(value) میتوانید یک مقدار را به رشته تبدیل کنید.
برای مقادیر اولیه، نتیجه همان چیزی است که انتظار دارید.
String(12.34);
// => '12.34'
String(false);
// => 'false'
String(null);
// => 'null'
String(undefined);
// => 'undefined'
برای آرایهها، تابع String تبدیل به رشته را روی هر عنصر اعمال میکند و نتیجهها را با یک ویرگول به هم میچسباند.
میتوانید خودتان هم متد join را به کار ببرید، مثلاً برای تغییر جداکننده.
توجه کنید که در این حالتها null و undefined به رشتهی خالی تبدیل میشوند.
String([42, null, true, 'abc']);
// => '42,,true,abc'
برای اشیاء، String بهطور پیشفرض متنی بیفایده برمیگرداند.
String({ key: 'value' });
// => '[object Object]'
در برخی بافتها، JavaScript پیش از ارزیابی یک دستور، مقدار را بهطور خودکار به نوع دادهی دیگری تبدیل میکند. به این تبدیل ضمنی، همنوعسازی نوع میگویند.
وقتی مقداری که منطقی نیست در بافتی منطقی به کار میرود، JavaScript همان قواعد تابع Boolean را برای تبدیل ضمنی آن مقدار اعمال میکند.
همنوعسازی به مقدار منطقی معمولاً در این موارد رخ میدهد:
?
!
&& و OR منطقی || (نتیجهی عبارت یکی از عملوندهاست، نه لزوماً یک مقدار منطقی)const num = 0;
if (num) {
// this block is NOT executed because 0 is falsy
}
اگر عملگر جمع + روی مقادیر اولیه به کار رود و یکی از عملوندها رشته باشد، عملوند دیگر هم به رشته تبدیل میشود.
منطق تبدیل همانند زمانی است که از تابع String استفاده میکنید.
سپس دو رشته به هم میچسبند.
let name;
'hello ' + name;
// => 'hello undefined'
بسیاری از عملگرها، بر اساس منطق تابع Number که پیشتر توضیح داده شد، عملوندها را (در صورت نیاز) به عدد تبدیل میکنند.
+ (اگر رشتهای در کار نباشد)، -، *، /، %، **
+، -
>، >=، <، <=
|، &، ^، ~
برای جزئیات بیشتر دربارهی هر یک از این عملگرها به فهرست عملگرهای MDN مراجعه کنید.
برای پرهیز از اشتباه، بهتر است همیشه پیش از به کار بردن این عملگرها، Number را صریحاً فراخوانی کنید.
دوست شما کوجو طرفدار پر و پا قرص اعداد است. او یک وبسایت کوچک به اسم «fun-with-numbers» دارد. کوجو در برنامهنویسی چندان ماهر نیست، بنابراین از شما کمک خواسته است.
شما دو تابع کمکی برای بازیهای عددی تازه در وبسایت کوجو خواهید ساخت و یک تابع سوم هم برای اعتبارسنجی ورودیای که کاربر میتواند وارد کند.
یکی از بازیهای وبسایت کوجو شبیه ماشین اسلاتی است که دو گروه چرخ را نشان میدهد و روی هر چرخ رقمهایی هست. هر گروه رقم نشاندهندهی یک عدد است. کوجو برای مکانیک بازی باید مجموع آن دو عدد را بداند.
تابعی به اسم twoSum بنویسید که دو آرایه را به عنوان پارامتر میپذیرد.
هر آرایه از یک یا چند عدد بین ۰ و ۹ تشکیل شده است.
تابع باید هر آرایه را به عنوان یک عدد تفسیر کند و مجموع آن دو عدد را برگرداند.
twoSum([1, 2, 3], [0, 7]);
//=> 130
// [1, 2, 3] represents 123 and [0, 7] represents 7.
// 123 + 7 = 130
بازی دیگری در وبسایت یک آزمون کوچک به اسم «Lucky Numbers» است. کاربر میتواند عددی وارد کند و بعد ببیند که آیا آن عدد به یک دنباله یا الگوی مخفی تعلق دارد یا نه. دنباله یا الگوی «اعداد خوششانس» هر ماه عوض میشود و هر کاربر فقط تعداد محدودی فرصت برای حدس زدن آن دارد.
اعداد خوششانس این ماه باید اعدادی باشند که پالیندروم هستند. اعداد پالیندروم با معکوس شدن رقمهایشان تغییری نمیکنند.
تابع تازهی luckyNumber را پیادهسازی کنید که یک عدد را به عنوان پارامتر میپذیرد.
تابع باید اگر عدد پالیندروم بود true و در غیر این صورت false برگرداند.
عدد ورودی همیشه یک عدد صحیح مثبت خواهد بود.
luckyNumber(1441);
//=> true
luckyNumber(123);
//=> false
در جاهای مختلف وبسایت، فیلدهای ورودیای وجود دارد که کاربران میتوانند در آنها عدد وارد کنند و با کلیک روی یک دکمه کاری را فعال کنند. کوجو میخواهد تجربهی کاربری سایتش را بهتر کند. او میخواهد اگر کاربر روی دکمه کلیک کرد اما فیلد مقدار ورودی نامعتبری داشت، پیام خطایی نشان دهد.
در ادامه اطلاعات بیشتری دربارهی این که مقدار یک فیلد ورودی چگونه به دست میآید آمده است.
undefined یا null باشد.تابعی به اسم errorMessage بنویسید که ورودی کاربر را به عنوان پارامتر میپذیرد.
اگر کاربر هیچ ورودیای نداده باشد، errorMessage باید 'Required field' را برگرداند.
اگر ورودی نشاندهندهی عددی غیر از صفر نباشد (بر اساس قواعد تبدیل JavaScript)، باید 'Must be a number besides 0' برگردانده شود.
در همهی موارد دیگر میتوانید فرض کنید ورودی معتبر است و مقدار بازگشتی باید یک رشتهی خالی باشد.
errorMessage('123');
// => ''
errorMessage('');
// => 'Required field'
errorMessage('abc');
// => 'Must be a number besides 0'
در Exercism ثبتنام کنید تا JavaScript را همراه با 37 مفهوم159 تمرین و مربیگری انسانی واقعی یاد بگیرید و در آن استاد شوید، همهی اینها رایگان.