متغیرها و انواع داده ها در جاوا اسکریپت
در فصل دوم آموزش جاوا اسکریپت ابتدا با روش تعریف متغیرها و قوانین نامگذاری آن ها در جاوا اسکریپت آشنا خواهیم شد و سپس انواع داده های موجود را بررسی خواهیم کرد. همچنین لیستی از کلمات کلیدی و رزرو شده که امکان استفاده از آن ها به عنوان نام متغیرها و توابع وجود ندارد را ارائه خواهیم کرد.
همچنین در این فصل به مبحث بسیار مهم تبدیل انواع پرداخته و روش های تبدیل انواع گوناگون به یکدیگر را بررسی خواهیم کرد.
- جلسه اول آموزش جاوا اسکریپت : آشنایی با مفاهیم و اصطلاحات جاوا اسکریپت
متغیرها در جاوا اسکریپت
متغیر ها با کلمه var تعریف می شوند. مانند:
Var test ='ali';
در این مثال متغیری با نام test اعلان شده و مقدار اولیه ‘ali’ را میگیرد.
چون متغیرها بدون نوع هستند مفسر جاوا اسکریپت خود به خود نوع test را رشته در نظر میگیرد.
همچنین میتوانیم دو یا چند متغیر را همزمان تعریف کنیم:
var test 1='ali' , test2='salam' ;
باید توجه داشته باشیم متغیرهایی که با یک var تعریف می شود ممکن است نوع یکسانی نداشته باشند.
var test_1='ali' , age=25;
برخلاف جاوا در جاوا اسکریپت متغیرها می توانند مقدار اولیه نگیرند.
var test ;
برخلاف جاوا متغیرها می توانند در زمانهای مختلف مقادیر متفاوتی داشته باشند. این یکی از امتیازات متغیرهای بدون نوع در زبان جاوا اسکریپت به شمار می رود. به عنوان مثال یک متغیر می تواند باید یک مقدار رشتهای مقداردهی اولیه شده و سپس در ادامه برنامه به یک مقدار عددی تغییر کند. به مثال زیر دقت کنید:
var test ="hi" ; alert(test); // hi test=55; alert(test); // 55
نامگذاری متغیرها در جاوا اسکریپت
نامگذاری متغیرها می بایست شرایط زیر را داشته باشد:
اولین کاراکتر متغیر می تواند یک حرف , یک underline ( _ ) و یا یک علامت $ باشد.
بقیه کاراکترها میتوانند از $، _ و یا هر حرف و عددی تشکیل شوند.
تمام متغیرهای زیر صحیح هستند:
var test ; var $test ; var $1 ; var _$test2 ;
البته صحت نام یک متغیر از نظر نحوی، به این معنی نیست که می توانید از آن ها استفاده کنید. بهتر است در نامگذاری متغیرها از یکی از قراردادهای شناخته شده زیر تبعیت کنید:
نشانه گذاری شتری : در این قرارداد، حرف اول متغیر کوچک و حرف اول بقیه کلمات به صورت بزرگ نوشته می شود. به عنوان مثال:
var myTestValue = 0, mySecondTestValue = “hi”;
نشانه گذاری پاسکال: در این روش حرف اول متغیر و حرف اول بقیه کلمات به صورت بزرگ نوشته می شود. به عنوان مثال:
var MyTestValue = 0, MySecondTestValue = “hi”;
نشانه گذاری مجارستانی: در این روش از یک یا دنباله ای از پیشوندها قبل از نشانه گذاری پاسکال برای تعیین نوع یک متغیر استفاده می شود. به عنوان مثال کاراکتر i به معنی عدد صحیح و s به معنی رشته است. به عنوان مثال:
var iMyTestValue = 0, sMySecondTestValue = “hi”;
جدول زیر لیستی از پیشوندهای موجود به منظور استفاده در نشانه گذاری مجارستانی را نشان می دهد. ما در این جزوه از این پیشوندها برای نامگذاری متغیرها استفاده کرده ایم.
یکی دیگر از امتیازات و یا شاید جذابیت های JavaScript (که در بسیاری از زبان های برنامه نویسی دیگر وجود ندارد) این است که لازم نیست متغیر ها را قبل از مقدار دهی، اعلان کنیم:
var sTest="hello"; sTest2=sTest + "world"; alert (sTest2); // hello world
در مثال فوق متغیر sTest2 قبل از مقداردهی اعلان نشده است.
موقعی که مفسر به چنین متغیرهای که بدون اعلان، مقداردهی می شوند , برخورد می کند، یک متغیر سراسری به همان نام ایجاد کرده و مقداری را به آن اختصاص می دهد. با این وجود پیشنهاد می شود همیشه قبل از به کارگیری متغیرها آن ها را اعلان کنید.
کلمات کلیدی
جاوا اسکریپت تعدادی از کلمات را به عنوان کلمات کلیدی می شناسد. این کلمات کلیدی معمولا ابتدا یا انتهای دستورات را مشخص می کنند. کلمات کلیدی به عنوان کلمات رزرو شده شناخته می شوند و نمی توان از آن ها به عنوان نام متغیر ها یا توابع استفاده نمود. در زیر لیست کاملی از این کلمات را مشاهده می کنید:
اگر از یکی از کلمات فوق برای نامگذاری متغیر ها یا توابع استفاده کنید با خطای Identifier expected روبرو خواهید شد.
کلمات رزرو شده
جاوا اسکریپت تعدادی از کلمات رزرو شده را نیز معرفی کرده است. کلمات رزرو شده نیز نمی توانند به عنوان نام متغیر ها و توابع استفاده شوند. لیست کاملی از این کلمات را در زیر مشاهده می کنید:
انواع داده های اصلی
در جاوا اسکریپت پنج نوع داده اصلی به شرح زیر وجود دارد :
- undefined
- null
- boolean
- number
- string
از عملگر typeof برای تشخیص نوع یک مقدار استفاده می شود. این عملگر یک پارامتر که می تواند یک متغیر و یا یک مقدار باشد را دریافت کرده و نوع آن را بر می گرداند.
این عملگر یکی از پنج مقدار زیر را بر می گرداند:
undefined : اگر متغیر از نوع Undefined است.
boolean : اگر متغیر از نوع Boolean باشد.
number : اگر متغیر از نوع Number باشد.
string : اگر متغیر از String باشد.
object : اگر متغیر یک ارجاع یا از نوع null باشد.
نوع داده Undefind
این نوع فقط شامل مقدار Undefined می شود. متغیری که اعلان شود ولی مقدار دهی اولیه نشود به صورت پیش فرض از نوع Undefined خواهد بود.
var oTemp ; alert (typeof oTemp) ; // outputs "Undefined"
به این نکته توجه داشته باشید که متغیری که اعلان می شود و مقدار نمی گیرد با متغیری که اصلآ اعلان هم نشده است کاملا متفاوت است. هر چند که عملگر typeof بین این دو تفاوتی قائل نمی شود و برای هر دو متغیر، مقدار undefined را برمیگرداند، اگر چه فقط یکی از آن ها در مثال زیر (oTemp2) تعریف شده است.
var oTemp ; alert (typeof oTemp) ; // outputs "undefined" alert (typeof oTemp2) ; // outputs "undefined"
اگر از oTemp2 به وسیله ی هر عملگری به غیر از typeof استفاده کنید یک خطا رخ خواهد داد:
//make sure this variable isn’t defined //var oTemp2; //try outputting alert(oTemp2 == undefined); //causes error
خروجی تابعی که در داخل بدنه خود مقداری را صراحتا برنمی گرداند نیز مقدار uindefined است:
function Testfunc () { // leave the function black } alert( TestFunc() == undefined ); //outputs “true”
نوع داده Null
دیگر نوع داده که فقط یک مقدار دار ، null است که مقدار ویژه null را می گیرد.
از نظر javascript نوع undefined یکی از مشتقات نوع null است و این دو معادل یکدیگرند:
alert(null == undefined); //outputs “true”
اگر چه این دو معادل یکدیگرند اما معانی متفاوتی دارند. undefined تنها زمانی به یک متغیر نسبت داده می شود که آن متغیر اعلان شود ولی مقداردهی نشود. در حالی که یک متغیر زمانی از نوع null است که اشاره به شی ای داشته باشد که وجود ندارد.
نوع داده Boolean
نوع Boolean یکی از پرکاربردترین انواع داده در زبان های برنامه نویسی به شمار می رود و متغیری از این نوع فقط می تواند یکی از دو مقدار true یا false به عنوان مقدار بپذیرد. اگر چه بر خلاف زبان های برنامه نویسی متداول، در جاوا اسکریپت false با ۰ برابر نیست اما در صورت لزوم (و برای استفاده در عبارت های بولی) ۰ به false تبدیل خواهد شد. به مثال های زیر توجه کنید:
var bFound = true; var bLost = false;
نوع داده Number
این نوع نیز یکی از پرکاربردترین انواع است. از این نوع داده می توان برای نمایش اعداد صحیح ۸ بایتی و اعداد اعشاری ۱۶ بایتی استفاده کرد.
به عنوان مثال متغیر زیر از نوع صحیح است و مقدار اولیه ی ۵۵ را دارد:
var iNum 55;
برای تعریف متغیرهای اعشاری به صورت زیر عمل می شود:
var fNum = 5.0;
نوع داده String
این نوع می تواند برای ذخیره صفر یا چندین کاراکتر به کار رود. هر کاراکتر در یک رشته موقعیتی دارد. موقعیت اولین کاراکتر صفر است.
برای تعریف یک متغیر رشته ای باید از ( ‘ ) یا ( ” ) استفاده کنیم. معمولآ برای تعریف یک کاراکتر از ( ‘ ) و برای تعریف یک رشته از ( ” ) استفاده می شود.
var sColor1 = "blue"; var sColor2 = 'blue';
تبدیل انواع
یکی از ویژگی های برجسته هر زبان برنامه نویسی قابلیت تبدیل انواع در آن است. جاوا اسکریپت نیز از این قاعده مستثنی نبوده و روش های ساده ای برای تبدیل انواع فراهم آورده است. اکثر انواع موجود در جاوا اسکریپت از متدهایی برای تبدیل به سایر انواع پشتیبانی کرده و توابعی سراسری برای تبدیل انواع به روش های پیچیده تر وجود دارد.
تبدیل به رشته
یکی از جذابترین ویژگی هایی که جاوا اسکریپت در رابطه با انواع اصلی numbers ، boolean و string فراهم کرده است این است که آنها در اصل اشیای کاذب ۱ هستند، به این معنی که دارای خاصیت ها و متدهای مشترك و منحصر به فردی می باشند.
به عنوان مثال برای بدست آوردن طول یک رشته می توان از خاصیت length استفاده نمود:
var sColor = "blue" ; alert (sColor.length) ; //outputs “۴”
سه نوع داده number ، boolean و string متدی به نام ()tostring برای تبدیل به رشته دارند.
این متد برای متغیرهای از نوع Boolean یکی از مقادیر رشته ای true و false را بسته به مقدار متغیر برمیگرداند:
var bFound = false; alert(bFound.toString()); //outputs “false”
این متد برای متغیر های از نوع number رشته ای حاوی آن عدد را بر می گرداند:
var iNum1 = 10; var fNum2 = 10.0; alert(iNum1.toString()); //outputs “۱۰” alert(fNum2.toString()); //outputs “۱۰”
تبدیل به عدد
جاوا اسکریپت دو متد برای تبدیل انواع غیر عددی به عددی فراهم کرده است:
praseInt()
parseFloat()
نکته: توجه کنید که حروف F و I باید به صورت حرف بزرگ نوشته شوند.
این متد ها فقط بر روی رشته های حاوی عدد کار می کنند و بر روی بقیه انواع مقدار NaN را بر می گردانند.
متد ()praseInt از اولین کاراکتر رشته شروع می کند اگر عدد بود آن را بر می گرداند در غیر این صورت مقدار NaN را برمی گرداند. این روند تا آخرین کاراکتر ادامه پیدا میکند تا اینکه به کاراکتری غیر عددی برسد. به عنوان مثال این متد عبارت “123red” را به صورت ۱۲۳ برمیگرداند.
var iNum1 = parseInt(“1234blue”); //returns 1234 var iNum3 = parseInt("22.5"); //returns 22 var iNum4 = parseInt("blue"); //returns NaN
متد ()parseFloat نیز مثل ()parseInt عمل کرده و از اولین کاراکتر شروع به جستجو می کند. البته در این متد اولین کاراکتر نقطه حساب نمی شود و آن را به همان صورت برمیگرداند.
اگر دو کاراکتر نقطه در رشته وجود داشته باشند دومین نقطه به عنوان کاراکتر بی ارزش شناخته می شود و عملیات تبدیل متوقف می شود. مثال ها:
var fNum1 = parseFloat(“1234blue”); //returns 1234.0 var fNum3 = parseFloat(“۲۲.۵”); //returns 22.5 var fNum4 = parseFloat(“۲۲.۳۴.۵”); //returns 22.34 var fNum6 = parseFloat(“blue”); //returns NaN
استفاده از Type Casting برای تبدیل انواع
در جاوا اسکریپت امکان استفاده از روشی موسوم به Type Casting برای تبدیل انواع وجود دارد. سه نوع type casting در جاوا اسکریپت وجود دارد:
Boolean ()
Number ()
String ()
تابع ()Boolean زمانی مقدار true را بر می گرداند که پارامتر دریافتی اش، رشته ای شامل حداقل یک کارکتر، یک عدد غیر از صفر و یا یک شی باشد. مقدار false را نیز زمانی بر می گرداند که پارامتر دریافتی اش رشته ای تهی، عدد صفر یا یکی از مقادیر undefined و null باشد:
var b1 = Boolean(“”); //false – empty string var b2 = Boolean(“hi”); //true – non-empty string var b3 = Boolean(100); //true – non-zero number var b4 = Boolean(null); //false - null var b5 = Boolean(0); //false - zero var b6 = Boolean(new Object()); //true – object
تابع ()Number کاری شبیه ()parseInt و ()parseFloat را انجام می دهد اما تفاوت هایی هم دارد.
اگر به یاد داشته باشید متدهای ()parseInt و ()parseFloat آرگومان دریافتی را فقط تا اولین کاراکتر بی ارزش بر می گرداندند. مثلا رشته ” ۴.۵.۶ “ به ۴.۵ تبدیل خواهند کرد. اما کاربرد متد ()Number برای این رشته مقدار NaN را برمیگرداند زیرا این رشته در کل، از نظر متد ()Number امکان تبدیل به یک عدد را ندارد.
اگر رشته ای امکان تبدیل به یک عدد را داشته باشد متد ()Number خود، برای استفاده از یکی از توابع ()parseInt یا ()parseFloat تصمیم می گیرد. در مثال زیر حاصل اجرای تابع ()Number برای انواع داده ها را نشان می دهد:
Number(false) 0 Number(true) 1 Number(undefined) NaN Number(null) 0 Number(“۵.۵”) ۵.۵ Number(“۵۶”) ۵۶ Number(“۵.۶.۷”) NaN Number(new Object()) NaN Number(100)
ساده ترین تابع هم ()String است که همان چیزی را که می گیرد به عنوان رشته بر می گرداند:
var s1 = String(null); // ”null”
دیدگاه ها