بیشتر مواقع عملگرها و فانکشنها به طور خودکار مقادیری که به آنها داده میشود را به نوع صحیح تبدیل میکنند. به این عمل “تبدیل نوع داده (Type Conversions)” گفته میشود.
برای نمونه فانکشن alert مقدار ورودی خود را به نوع دادهی string تبدیل میکند. عملگرهای ریاضیاتی مقادیر را به نوع number تبدیل میکنند.
همینطور شرایطی وجود دارد که ما نیاز داریم مقدار را به نوع مورد نظرمان تبدیل کنیم.
در این بخش در مورد object ها صحبت نمیکنیم. فعلا فقط درباره انواع اولیه (primitives) صحبت میکنیم.
تبدیل به string
تبدیل به string زمانی رخ میدهد که ما به نوع رشتهای کاراکترهای یک مقدار نیاز داریم.
برای نمونه alert(value) تبدیل به string را برای نمایش انجام میدهد.
همینطور میتوانیم با صدا زدن String(value) تبدیل یک مقدار به string را انجام دهیم.
let value = true;
alert(typeof value); // boolean
value = String(value); // now value is a string "true"
alert(typeof value); // string
تبدیل به string عموما واضح است. false به "null ، "false به "null" و برای بقیه مقادیر هم به همین ترتیب انجام میشود.
تبدیل به number
تبدیل به number در فانکشنها و عبارات ریاضیاتی به طور خودکار انجام میشود.
برای نمونه وقتی تقسیم / بر روی مقادیر غیر عددی رخ میدهد :
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
معمولا زمانی که مقداری را از ورودی های یک فرم دریافت میکنیم نوع داده این ورودی به صورت رشته (string) میباشد درحالی که به نوع عددی (Number) ورودی نیاز داریم. به همین علت باید ورودی را به مقدار عددی (Number) تبدیل کنیم.
اگر نتیجه، عدد معتبری نباشد نتیجه تبدیل NaN خواهد بود. برای نمونه:
let age = Number("an arbitrary string instead of a number");
alert(age); // NaN, conversion failed
قواعد تبدیل به number :
| Value | Becomes… |
|---|---|
undefined |
NaN |
null |
0 |
true and false |
1 and 0 |
string |
فاصلههای خالی ابتدا و انتها (شامل spaceها، tabها \tو خطوط جدید \n و دیگر موارد) حذف میشوند. اگر رشتهی باقی مانده خالی باشد نتیجه 0 خواهد بود. در غیر اینصورت عدد موجود در رشته کاراکترها «خوانده» خواهد شد. اگر خطایی رخ دهد نتیجه NaN خواهد بود. |
Examples:
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 به 0 تبدیل میشود و undefined به NaN تبدیل میشود.
تقریبا همهی عملگرهای ریاضیاتی، مقادیر را به عدد (number) تبدیل میکنند. تنها یک استثنا وجود دارد و آن + است. اگر یکی از مقادیر string باشد، بقیه مقادیر نیز به string تبدیل میشوند.
سپس string ها را بهم میچسباند:
alert( 1 + '2' ); // '12' (string to the right)
alert( '1' + 2 ); // '12' (string to the left)
این مورد فقط زمانی روی میدهد که حداقل یکی از مقادیر string باشد، در غیر اینصورت تمام مقادیر به number تبدیل میشوند.
تبدیل به boolean
تبدیل به boolean آسانترین حالت است.
این مورد در عملیات منطقی (مانند عبارات شرطی که با آنها در بخشهای بعدی آشنا خواهیم شد) رخ میدهد. همینطور به صورت مشخص نیز میتوان با فانکشن Boolean(value) اینکار را انجام داد.
قاعده تبدیل :
- مقادیری که در ظاهر “خالی” هستند، مانند
0،stringخالی ،null،undefinedوNaNبهfalseتبدیل میشوند. - بقیه مقادیر به
trueتبدیل میشوند.
برای نمونه :
alert( Boolean(1) ); // true
alert( Boolean(0) ); // false
alert( Boolean("hello") ); // true
alert( Boolean("") ); // false
0 برابر با true خواهد بودبرخی زبانها (مانند PHP) با "0" به عنوان false برخورد میکنند. اما در جاوا اسکریپت هر string ـی که خالی نباشد true خواهد بود.
alert( Boolean("0") ); // true
alert( Boolean(" ") ); // spaces, also true (any non-empty string is true)
خلاصه
سه نوع تبدیل نوع داده، که بطور گسترده مورد استفاده قرار میگیرد، تبدیل به string ، تبدیل به number و تبدیل به boolean است.
تبدیل به string – زمانی که میخواهیم خروجیای داشته باشیم رخ میدهد. از طریق String(value) قابل انجام است. تبدیل به string معمولا وقتی مقدار از انواع اولیه داده (primitive values ) است، واضح خواهد بود.
تبدیل به number – در عملگرهای ریاضیاتی رخ میدهد. از طریق Number(value) قابل انجام است.
این تبدیل از این قوانین پیروی میکند :
| Value | Becomes… |
|---|---|
undefined |
NaN |
null |
0 |
true / false |
1 / 0 |
string |
رشته همانطور که «هست» خوانده میشود و فاصلههای خالی (شامل spaceها، tabها \t، خطوط جدید \n و غیره) نادیده گرفته میشوند. یک رشته خالی 0 میشود. ارور NaN را نتیجه میدهد. |
تبدیل به boolean – در عملگرهای منطقی رخ میدهد. از طریق Boolean(value) قابل انجام است.
این تبدیل از این قوانین پیروی میکند :
| Value | Becomes… |
|---|---|
0, null, undefined, NaN, "" |
false |
| any other value | true |
اکثر این قوانین آسان بوده و ساده به خاطر میمانند. استثناهایی که معمولا در آن اشتباه میکنیم :
-
undefinedبه عنوان number برابرNaNخواهد بود و0نخواهد بود. -
"0"و string حاوی جای خالی" "به عنوانbooleanبرابر true خواهند بود.
در اینجا در مورد تبدیل object ها صحبت نکردیم و در بخشهای بعدی به آنها خواهیم پرداخت.
نظرات
<code>استفاده کنید، برای چندین خط – کد را درون تگ<pre>قرار دهید، برای بیش از ده خط کد – از یک جعبهٔ شنی استفاده کنید. (plnkr، jsbin، codepen…)