تبدیل دیتاتایپ

معمولا عملگرها و توابع به صورت خودکار مقداری را که به آن‌ها می‌فرستیم به دیتاتایپ مناسب تغییر می‌دهند.

مثلاً تابع alert به صورت خودکار مقدار درونش را به رشته تغییر می دهد تا آن را نمایش دهد. در عملیات ریاضی مثل ضرب و تقسیم و… مقادیر به عدد تبدیل می‌شود تا عملیات مورد نظر قابل انجام باشد.

گاهی موارد لازم است تا مقدار را از یک دیتاتایپ خاص به نوع دیگری تبدیل کنیم.

فعلا در مورد اشیاء صحبت نمی کنیم

در این مطلب، نکات مربوط به اشیاء را بررسی نمی کنیم. ابتدا سعی می کنیم تا مطالب ساده‌تر و اولیه را پوشش دهیم. پس از آن که در مقالات بعدی اندکی در مورد اشیاء یاد گرفتیم،‌ خواهیم دید که چطور می‌توان آن‌ها را به دیتاتایپ‌های دیگر تبدیل کرد.

تبدیل به رشته

زمانی که به حالت رشته‌ای یک مقدار نیاز داریم این تبدیل اتفاق می‌افتد.

مثلاً در اجرای alert(value) این تبدیل به صورت خودکار انجام می‌شود تا مقدار را نمایش دهد.

با فراخوانی تابع String(value) می‌توانیم مقدار را به رشته تبدیل کنیم:

let value = true;
alert(typeof value); // boolean

value = String(value); // حالا متغیر value مقدار "string" را داراست
alert(typeof value); // string

تبدیل به رشته در بیشتر موارد واضح و مشخّص است و نکته‌ی پیچیده‌ای ندارد. مقدار false به "false" و null به "null" تبدیل می شود.

تبدیل به عدد

این تبدیل در توابع و عبارت‌های ریاضی به طور خودکار رخ می دهد.

برای مثال وقتی عملگر ضرب یعنی * روی مقدار غیر عددی اعمال می شود:

alert( "3" * "1" ); // 3, رشته ها به عدد تبدیل می شوند

می توانیم از تابع Number(value) استفاده کنیم تا مقدار غیر عددی را به عدد تبدیل کنیم:

let str = "123";
alert(typeof str); // string

let num = Number(str); // تبدیل می شود به ۱۲۳

alert(typeof num); // number

گاهی مواقع لازم است که این تبدیل را صریحاً انجام دهیم. مثلا وقتی محتوای وارد شده در یک فیلد از فرم را بررسی می کنیم، و از کاربر انتظار داریم که مقدار عددی مثلا سن خود را وارد کند، لازم است مقدار خروجی این فیلد را به عدد تبدیل کنیم. زیرا در حالت عادی مقدار فیلدهای متنی رشته است.

اگر رشته واقعاً عددی نباشد، نتیجه‌ی این تبدیل مقدار NaN خواهد بود. برای نمونه:

let age = Number("یک رشته ی دلخواه به جای عدد");

alert(age); // NaN, تبدیل با شکست مواجه می شود

قوانین تبدیل عددی:

مقدارتبدیل می‌شود به…
undefined NaN
null 0
true و false1 و ۰
string فاصله‌های ابتدا و انتهای رشته حذف می شود. اگر رشتهٔ باقی‌مانده خالی باشد، نتیجهٔ تبدیل ۰ خواهد بود. در غیر این صورت رشته به عنوان یک عدد در نظر گرفته می‌شود. اگر در تبدیل رشته با خطا مواجه شود نتیجه NaN خواهد شد.

مثال هایی را با هم بررسی کنیم:

alert( Number("   123   ") ); // 123
alert( Number("123z") );      // NaN (چون 'z' یک عدد نیست با خطا مواجه می شویم)
alert( Number(true) );        // 1
alert( Number(false) );       // 0

به یاد داشته باشید که null و undefined در این جا متفاوت هستند. null به ۰ تبدیل می شود در حالیکه undefined به NaN تبدیل می شود.

علامت ‘+’ رشته ها را به هم متصل (الحاق) می کند

تقریباً همهٔ عملگرهای ریاضی مقادیر را به عدد تبدیل می کنند. البته عملگر ریاضی + استثناست. اگر یکی از دو مقداری که با هم جمع می شوند رشته باشد، دیگری هم به رشته تبدیل می شود.

بعد این دو رشته با هم الحاق (اصطلاحاً concat) می شوند:

alert( 1 + '2' ); // '12'
alert( '1' + 2 ); // '12'

این اتفاق فقط زمانی رخ می دهد که حداقل یکی از دو طرف رشته باشد. در غیر این صورت مقادیر به عدد تبدیل می شوند.

تبدیل به بولین (boolean)

تبدیل به بولین ساده ترین نوع تبدیل است.

این اتفاق در فرایند های منطقی رخ می دهد اما می توانیم صراحتاً تابع Boolean(value) را فراخوانی کنیم و تبدیل را انجام دهیم.

قوانین این نوع تبدیل:

  • مقادیری که به طور مستقیم خالی هستند، مانند رشتهٔ خالی '' ، null ، undefined و NaN به false تبدیل می شوند.
  • بقیه ی مقادیر به true تبدیل می شوند.

برای نمونه:

alert( Boolean(1) ); // true
alert( Boolean(0) ); // false

alert( Boolean("hello") ); // true
alert( Boolean("") ); // false

لطفا به یاد داشته باشید که رشتهٔ "۰" می شود true

بعضی زبان ها "۰" را به false تبدیل می‌کنند. اما در جاوااسکریپت، رشتهٔ غیر خالی همواره true خواهد بود.

alert( Boolean("0") ); // true
alert( Boolean(" ") ); // spaceها هم true هستند (هر رشته ی غیرخالی true است)

خلاصه

سه تبدیل پرکاربرد در جاوااسکریپت عبارت است از تبدیل به عدد، رشته و بولین.

تبدیل به رشته – با تابع String(value) قابل انجام است.

تبدیل به عدد – در عملیات ریاضی انجام می شود. با فراخوانی تابع Number(value) قابل انجام است.

تبدیل از قوانین زیر پیروی می کند:

مقدارتبدیل می‌شود به…
undefined NaN
null 0
true و false1 و ۰
string فاصله‌های ابتدا و انتهای رشته حذف می شود. اگر رشتهٔ باقی‌مانده خالی باشد، نتیجهٔ تبدیل ۰ خواهد بود. در غیر این صورت رشته به عنوان یک عدد در نظر گرفته می‌شود. اگر در تبدیل رشته با خطا مواجه شود نتیجه NaN خواهد شد.

تبدیل به بولین – در عملیات منطقی رخ می دهد. این تبدیل با فراخوانی تابع Boolean(value) هم انجام می شود.

این تبدیل از قوانین زیر پیروی می کند:

مقدارتبدیل می‌شود به…
۰, null, undefined, NaN, " "false
هر مقدار دیگرtrue

حفظ و به‌خاطر سپردن این قواعد ساده است. البته معمولاً بعضی افراد اشتباهاتی می‌کنند که عبارتند از:

  • undefined بعد از تبدیل به عدد می‌شود NaN، نه ۰.
  • "۰" و رشته هایی که فقط از space تشکیل شدند مانند " " بعد از تبدیل به بولین به true تبدیل می شوند.

ما در این مطلب به دیتاتایپ شیء نپرداختیم. پس از آن که چیز های بیشتری در مورد مفاهیم پایهٔ جاوااسکریپت یاد گرفتیم آن‌گاه در مورد تبدیل اشیاء بحث خواهیم کرد.

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *