تبدیل انواع به یکدیگر در جاوا اسکریپت

در زبان جاوا اسکریپت میتوان داده ها را از نوعی به نوع دیگر تبدیل کرد. گاهی این تبدیل نوع توسط خود زبان صورت میگیرد که به آن تبدیل ضمنی میگویند و گاهی این تبدیل توسط برنامه نویس انجام میشود که به آن تبدیل صریح گفته میشود. در این فصل به تبدیل انواع در زبان جاوا اسکریپت خواهیم پرداخت.


تبدیل نوع

در بیشتر مواقع عملگرها و توابع به صورت خودکار مقادیر را به صورت صحیح به نوع مناسب تبدیل می‌کنند. به  این عمل ، تبدیل نوع گفته می‌شود. برای مثال تابع alert به صورت خودکار هر مقداری را که به عنوان آرگومان دریافت کند به صورت رشته تبدیل کرده و نمایش می دهد.

گاهی اوقات هم نیاز است که تبدیل نوع به صورت صریح توسط خود برنامه نویس انجام شود تا کد مربوطه به درستی کار کند. در این فصل ما هنوز نوع object را پوشش نمی دهیم. در ابتدا نوع های اولیه در این فصل بررسی شده و سپس در فصول آینده به تبدیل نوع object نیز خواهیم پرداخت.


تبدیل به رشته

زمانی که نیاز به یک رشته داشته باشیم عمل تبدیل به یک رشته انجام میشود. برای مثال تابع (alert(value تبدیل آرگومان value به یک رشته را برای نمایش آن در یک پنجره انجام میدهد. میتوان عمل تبدیل نوع را به صورت صریح توسط تابع (String(value انجام داد :

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

value = String(value); // now value is a string "true"
alert(typeof value); // string

مقدار تبدیل شده به یک رشته در بیشتر مواقع بدیهی و مشخص است. برای مثال مقدار false به "false" و مقدار null به "null" تبدیل می‌شود.


تبدیل به اعداد

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

alert( "6" / "2" ); // 3, strings are converted to numbers

نمونه مثال بالا عمل تبدیل را انجام داده و سپس عملیات تقسیم صورت می‌گیرد. برای تبدیل صریح مقداری به یک عدد میتوان از تابع (Number(value استفاده کرد :

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

let num = Number(str); // becomes a number 123

alert(typeof num); // number

تبدیل صریح اعداد معمولاً زمانی الزامی می‌شود که ما مقداری را از یک منبع متنی خوانده و می‌خواهیم به صورت عدد با آن رفتار شود. اگر یک رشته مقدار عددی معتبری نباشد، نتیجه چنین تبدیل نوعی برابر با مقدار NaN خواهد بود. برای مثال :

let age = Number("an arbitrary string instead of a number");

alert(age); // NaN, conversion failed

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

   مقدار   تبدیل میشود به
   undefined NaN
   null 0
   true و false 1 و 0
   string                                       فضا های خالی از ابتدا و انتهای رشته حذف میشوند. سپس اگر رشته تهی باشد مقدار 0 نتیجه خواهد بود. در غیر این صورت عدد از روی رشته خوانده میشود.  اگر مقدار خوانده شده یک عدد معتبر نباشد نتیجه NaN خواهد بود

مثال :

alert( Number("   123   ") ); // 123
alert( Number("123z") );      // NaN (error reading a number at "z")
alert( Number(true) );        // 1
alert( Number(false) );       // 0

دقت داشته باشید که null و undefined در اینجا متفاوت رفتار می کنند. در تبدیل به رشته مقدار null به صفر  تبدیل شده ، در حالی که مقدار undefined به NaN تبدیل می‌شود.

نکته : بیشتر عملیات های ریاضی در جاوا اسکریپت عملیات تبدیل مقادیر به اعداد را انجام میدهند.

 

اما در مورد عملگر جمع (+) استثنایی وجود دارد. اگر یکی از عملوند های این عملگر مقداری رشته ای باشد عملوند دیگر هم به رشته تبدیل می‌شود و عمل چسبیدن دو رشته به هم انجام میشود:

alert( 1 + '2' ); // '12' (string to the right)
alert( '1' + 2 ); // '12' (string to the left)

تبدیل به Boolean

عمل تبدیل به Boolean ساده‌ است و معمولاً در  عملیات های منطقی اتفاق می افتد. می توان این عملیات را به صورت صریح با استفاده از تابع (Boolean(value انجام داد.

قوانین تبدیل به مقادیر Boolean  به شکل زیر است :

  • مقادیری که معمولاً به هیچ چیز اشاره دارند برای مثال  صفر ، خالی ، null ، undefined و NaN به false تبدیل می‌شوند.
  • دیگر مقادیر به true تبدیل می‌شوند

 برای مثال :

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

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

 لطفاً دقت داشته باشید که رشته ای که حاوی مقدار "0" باشد در تبدیل نوع به true تبدیل می شود :

alert( Boolean("0") ); // true
alert( Boolean(" ") ); // spaces, also true (any non-empty string is true)

 

منتشر شده در ۲۸ اردیبهشت ۱۳۹۷ حمید رضا ملکی ۲۸۰۵ بازدید
دیدگاه ها

هنوز دیدگاهی ثبت نشده

برای ارسال دیدگاه لازم است ابتدا وارد سایت شوید