متغیر ها در جاوا اسکریپت
متغیر ها در جاوا اسکریپت با واژه کلیدی var تعریف میشوند. به عنوان نمونه به مثال زیر توجه کنید:
var temp='amin';
در این مثال متغیری با نام temp تعریف شده و مقدار آن amin میباشد.
به دلیل اینکه متغیر ها بدون نوع هستند، مفسر جاوا اسکریپت به صورت پیشفرض نوع متغیر temp را رشته یا همان String در نظر میگیرد.
ما میتوانیم دو یا چند متغیر را همزمان تعریف کنیم. به عنوان نمونه به مثال زیر توجه کنید:
var temp1='hello' , temp2='world';
دقت کنید زمانی که متغیرهایی با یک var تعریف میشوند ممکن است نوع یکسانی نداشته باشند. به عنوان مثال یکی از متغیرها از نوع رشتهای و دیگری از نوع عددی باشد. به مثال زیر توجه کنید:
var temp='amin' , age=35;
برخلاف زبان جاوا، متغیر ها در جاوا اسکریپت میتوانند مقدار اولیه نگیرند. به طور مثال:
var temp;
یکی از مزیتهای زبان جاوا اسکریپت در این است که متغیرهای بدون مقدار اولیه، میتوانند در بازههای زمانی مختلف مقادیر متفاوتی داشته باشند. به عنوان مثال متغیری میتواند در ابتدا با یک مقدار رشتهای مقداردهی اولیه شود، سپس در ادامه به یک مقدار عددی تغییر کند. به مثال زیر توجه کنید:
var temp ="hello world"; alert(temp); temp=25; alert(temp); //result hello world ۲۵
قوانین نامگذاری متغیرها
برای نامگذاری متغیرها باید چند شرایط لازم را رعایت کنیم. رعایت قوانین تعیین شده برای نامگذاریها باعث میشود کدها قابل فهم، مرتب و بدون اشکال باشد. پس رعایت این شرایط یکی از مهمترین اصول برنامه نویسی است.
- اولین کاراکتر متغیر میتواند یک حرف، یک آندرلاین (_) و یا یک علامت $ باشد.
به متغیرهای زیر دقت کنید. تمامی این متغیرها صحیح هستند.
var temp; var $temp; var $1; var _$temp2;
البته صحیح بودن دلیل بر این نیست که شما میتوانید از آنها استفاده کنید. در نام گذاری متغیرها چند قرارداد شناخته شده تعیین شدهاند که اکثر برنامه نویسان از آن استفاده میکنند.
- نشانهگذاری شتری
در این قرارداد، حرف اول متغیر کوچک و حرف اول بقیه کلمات به صورت بزرگ نوشته میشود. به عنوان مثال:
var myFirstTemp = "hello", mySecondTemp = "world";
- نشانهگذاری پاسکال
در این نوع قرارداد، حرف اول متغیر و حرف اول بقیه کلمات به صورت بزرگ نوشته میشود. به عنوان مثال:
var MyFirstTemp = "hello", MySecondTemp = "world";
- نشانهگذاری مجارستانی
در این روش از یک یا چندحرف کوچک به عنوان پیشوند قبل از نشانه گذاری پاسکال استفاده میشود. این پیشوند نشان دهنده قصد یا نوع داده میباشد. به عنوان مثال کاراکتر i به معنی عدد صحیح و s به معنی رشته است. به مثال زیر توجه کنید:
var iMyTemp = "25", sMyStringTemp = "hello world";
در تصویر زیر چند مثال برای استفاده از نشانهگذاری مجارستانی را برایتان فراهم کردهایم.
نکته: یکی دیگر از ویژگیها یا شاید امتیازات جاوا اسکریپت (که در بسیاری از زبانهای برنامه نویسی دیگر وجود ندارد) این است که لازم نیست متغیر ها را قبل از مقداردهی، تعریف کنیم. به مثال زیر توجه کنید:
var sTemp1="hello"; sTest2=sTemp1 + "world"; alert (sTest2); //result hello world
در این مثال متغیر sTest2 قبل از مقداردهی تعریف نشده است.
زمانی که مفسر با یک متغیری که بدون تعریف کردن مقداردهی شده است، برخورد میکند، یک متغیر سراسری به همان نام ایجاد کرده و مقداری را به آن اختصاص میدهد. با این وجود پیشنهاد میشود همیشه قبل از به کارگیری متغیرها آنها را تعریف کنید.
- کلمات رزرو شده (Reserved Words)
جاوا اسکریپت همانند بسیاری از زبانهای برنامهنویسی دیگر تعدادی کلمات رزرو شده معرفی کرده است. از این کلمات نمیتوان در نامگذاری متغیر ها استفاده نمود. به لیست زیر توجه کنید:
- کلمات کلیدی (Keywords)
جاوا اسکریپت تعدادی از کلمات را هم به عنوان کلمات کلیدی میشناسد. این کلمات کلیدی معمولا ابتدا یا انتهای دستورات را مشخص میکنند. کلمات کلیدی جزء کلمات رزرو شده میباشند و نمیتوان از آنها در نامگذاری متغیر ها استفاده کرد.
زمانی که شما از این کلمات در نامگذاری استفاده کنید با خطای (Error) Identifier expected روبرو خواهید شد.
انواع داده های اصلی
در جاوا اسکریپت پنج نوع داده اصلی وجود دارد.
- undefined
- null
- boolean
- number
- string
از عملگر typeof برای تشخیص نوع متغیر استفاده میشود. این عملگر میتواند یک متغیر و یا یک مقدار را دریافت کند و نوع آن را مشخص میکند.
این عملگر موارد زیر را برمیگرداند:
- undefined: اگر متغیر از نوع undefined است.
- boolean: اگر متغیر از نوع boolean باشد.
- number: اگر متغیر از نوع number باشد.
- string: اگر متغیر از نوع string باشد.
- object: اگر متغیر یک ارجاع یا از نوع null باشد.
نوع داده Undefined (تعریف نشده)
این نوع فقط شامل مقدار undefined میشود. متغیری ک تعریف میشود ولی مقداردهی اولیه نشود به صورت پیشفرض از نوع undefined خواهد بود. برای مثال :
var temp ; alert (typeof temp); //result undefined
نکته: دقت کنید که یک متغیر تعریف شده ولی بدون مقدار، از متغیری که اصلا تعریف نشده کاملا مجزا است. ولی عملگر typeof بین این دو تفاوتی قائل نمیشود و برای هردو متغیر، مقدار undefined را برمیگرداند. برای مثال در کد زیر فقط متغیر temp تعریف شده است:
var temp ; alert (typeof temp); alert (typeof test1); //result undefined undefined
نوع داده Null
این نوع داده نیز مانند undefined فقط یک مقدار میتواند داشته باشد. این مقدار null است که مقدار ویژه null را برمیگرداند. مقدار null با undefined به هیچوجه برابر نیست اما درصورتی که شما این دو مقدار را برابر درنظر بگیرید، جاوا اسکریپت بدون خطا مقدار true را برمیگرداند.
alert(null == undefined); //result “true”
نکته: undefined تنها زمانی به یک متغیر نسبت داده میشود که آن متغیر تعریف شود ولی مقداردهی اولیه نشده باشد. درحالی که به یک متغیر، تنها زمانی مقدار null نسبت داده میشود که متغیر از نوع object (شیء) باشد اما هنوز آن شیء وجود ندارد!
نوع داده Boolean
این نوع متغیر یکی از پرکاربردترین انواع داده در زبانهای برنامه نویسی به شمار میشود. متغیری که از نوع boolean باشد تنها میتواند یکی از دو مقدار true یا false را داشته باشد. این نوع متغیر در دستورات شرطی مورد استفاده قرار میگیرد.
نکته: در بسیاری از زبان های برنامه نویسی مقدار false را با ۰ برابر درنظر میگیرند اما در جاوا اسکریپت اینطور نیست! در ادامه پست، در مبحث تبدیل انواع داده به یکدیگر در این مورد صحبت خواهیم کرد.
نوع داده Number
این نوع نیز یکی از پرکاربردترین انواع است. از این نوع داده برای نمایش اعداد صحیح ۸ بایتی و اعداد اعشاری ۱۶ بایتی استفاده میشود. برای مثال متغیر iTemp از نوع صحیح است:
var iTemp = 25;
همچنین برای تعریف متغیرهای اعشاری (float) به این صورت عمل میکنیم:
var fTemp2 = 55;
نوع داده String
این نوع داده میتواند رشته، چندین کاراکتر و یا صفر در خود ذخیره کند. برای تعریف یک متغیر رشتهای باید از (“) و برای تعریف کاراکتر از (‘) استفاده کنیم. برای مثال:
var sColor1 = "green"; var sColor2 = 'blue';
تبدیل انواع داده به یکدیگر
تبدیل انواع داده به یکدیگر در زبانهای مختلف برنامه نویسی یکی از ویژگیهای برجسته هر زبان است که جاوا اسکریپت از این قاعده مستثنی نیست. برای تبدیل انواع داده به یکدیگر در جاوا اسکریپت روشهای سادهای وجود دارد.
یک برنامه نویس به تشخیص خود یک نوع داده را به نوع داده دیگر تبدیل میکند که به آن تبدیل صریح میگویند. درصورتی که مفسر خود یک نوع داده را به دیگری تبدیل کند، به این نوع تبدیل ضمنی گفته میشود. برای آشنایی با انواع فریم ورکهای جاوا اسکریپت به لینک زیر مراجعه کنید.
تبدیل صریح رشته به عدد
ابتدا با یک مثال دلیل نیاز به تبدیل یک نوع داده به نوع دیگر را بیان میکنیم. به تکه کد زیر توجه کنید:
var test = '5' * 5;
در این مثال یک رشته به یک عدد ضرب شده است. اما آیا امکان انجام این عمل وجود دارد؟ طبیعتا خیر! برای انجام این عملیات دو راه وجود دارد.
- راه اول نمایش پیغام خطا و توقف برنامه است. زیرا یک رشته نمیتواند در یک عدد ضرب شود.
- راه دوم تبدیل رشته به عدد و انجام عملیات ضرب است.
اما سوال اینجاست آیا هر رشتهای میتواند به عدد تبدیل شود؟ برای مثال:
var test2 = "Hello" * 8;
آیا رشته “Hello” میتواند به عدد تبدیل شود؟ پاسخ این سوال در زبانهای مختلف برنامه نویسی مختلف است؛ اما در زبان جاوا اسکریپت پاسخ مثبت است. قابل ذکر است که در جاوا اسکریپت یک مقدار ویژه به نام NaN وجود دارد. این مقدار به این منظور است که هر رشتهای نتواند به عدد تبدیل شود، به مقدار NaN تبدیل خواهد شد. برای مثال:
var test2 = "Hello" * 8; //result NaN
در جاوا اسکریپت دو متد برای تبدیل انواع غیر عددی به عدد وجود دارد:
- praseInt
- praseFloat
در این متدها رشتهای که حاوی عدد باشد، مقدار عددی را جدا میکند و برمیگرداند و بر روی بقیه انواع مقدار NaN را برمیگرداند. توجه کنید که حروف I و F باید به صورت حروف بزرگ نوشته شوند.
متد ()parseInt از اولین کاراکتر رشته شروع میکند و اگر عدد بود آن را برمیگرداند در غیر این صورت مقدار NaN را برمیگرداند. این روند به همین ترتیب تا آخرین کاراکتر ادامه خواهد داشت تا اینکه به کاراکتری غیر عددی برسد. همچنین این متد تنها میتواند عدد صحیح باشد و بخش اعشاری را حذف میکند. برای مثال:
var iNum1 = parseInt(“123green”); var iNum2 = parseInt("36.5"); var iNum3 = parseInt("blue"); //result 123 //result 36 //result NaN
متد ()parseFloat نیز همانند متد ()parseInt عمل میکند و از اولین کراکتر شروع میکند. تفاوتی که بین این دو متد وجود دارد این است که متد ()parseInt تنها عدد صحیح را برمیگرداند اما در متد ()parseFloat کاراکتر نقطه حساب نمیشود.
نکته: اگر در رشته دو کاراکتر نقطه وجود دارد، متد ()parseFloat نقطه دوم را بی ارزش تلقی میکند و عملیات تبدیل همان جا متوقف میشود.
به مثال های زیر توجه کنید:
var fNum1 = parseFloat(“1234blue”); var fNum2 = parseFloat(“۴۰.۵”); var fNum3 = parseFloat(“۲۶.۳.۵”); var fNum4 = parseFloat(“blue”); //result ۱۲۳۴.۰ //result ۴۰.۵ //result ۲۶.۳ //result NaN
متد عمومی ()Number برای تبدیل انواع غیر عددی به عدد استفاده میشود. به عنوان مثال برای تبدیل نوع boolean به عدد داریم:
Number(false) Number(true) //result 0 //result 1
تبدیل به رشته
برای تبدیل مقادیر غیر رشته ای به رشته، از متد ()tostring. استفاده میکنیم. این متد را میتوان برای تبدیل سه نوع string، boolean و number استفاده کرد. این متد در نوع داده boolean یکی از مقادیر true یا false را با توجه به مقدار متغیر برمیگرداند. برای مثال به تکه کد زیر توجه کنید:
var bFound = false; alert(bFound.toString()); //result "false"
این متد برای متغیرهایی از نوع دادهی عددی، یک رشته حاوی آن عدد را برمیگرداند. برای مثال:
var iNum1 = 20; var fNum2 = 20.0; alert(iNum1.toString()); alert(fNum2.toString()); //result "20" //result "20"
نکته: برای به دست آوردن طول یک رشته میتوان از متد length. استفاده کرد. برای مثال:
var sColor = "brown"; alert (sColor.length); //result "5"
استفاده از Type Casting برای تبدیل انواع
در جاوا اسکریپت استفاده از روشی شناخته شده به نام Type Casting وجود دارد. در این روش سه نوع Type Casting برای تبدیل انواع داده موجود است.
- ()String
- ()Number
- ()Boolean
متد ()String ساده ترین متد است که همان مقدار دریافت شده را برمیگرداند. مثال:
var test = String(null); //result "null"
متد ()Number عملی شبیه متدهای ()parseInt و ()parseFloat انجام میدهد اما تفاوتهایی دارد. در بالا توضیح دادیم که متدهای ()parseInt و ()parseFloat مقادیر دریافتی را تنها تا اولین کاراکتر بیارزش برمیگردانند. برای این متد مثالی زدیم که وقتی رشتهای با مقدار “259abcd” دریافت میشود، مقدار “۲۵۹” برمیگرداند.
اما متد ()Number در کل این مقدار را NaN برمیگرداند زیرا از نظر این متد مقدار “259abcd” امکان تبدیل به یک عدد را ندارد. این متد ()Number است که تصمیم میگیرد برای تبدیل نوع یک مقدار، از کدام یک از متدهای ()parseInt و ()parseFloat استفاده کند. در مثال زیر چند مورد برای حاصل اجرای متد ()Number را برایتان فراهم کردهایم:
Number(false) Number(true) Number(null) Number(“۲.۵”) Number(“۴۵”) Number(undefined) Number(“۵.۶.۷”) Number(new Object()) Number(100) 100 //result ۰ ۱ ۰ ۲.۵ ۴۵ NaN NaN NaN ۱۰۰
متد ()Boolean وقتی true را برمیگرداند که مقدار دریافتیاش، یک رشته شامل یک عدد غیر از صفر، حداقل یک کاراکتر و یا یک شیء باشد. همچنین مقدار false را هم وقتی برمیگرداند که مقدار دریافتیاش شامل عدد صفر، یکی از مقادیر null و undefined یا رشته ای تهی باشد. برای مثال:
var test1 = Boolean(""); var test2 = Boolean("hello world"); var test3 = Boolean(100); var test4 = Boolean(new Object()); var test5 = Boolean(null); var test6 = Boolean(0); //result false true true true false false
سخن آخر درباره انواع داده ها و متغیر ها در جاوا اسکریپت
در این پست از آموزش جاوا اسکریپت با مفاهیم داده ها و متغیر ها در جاوا اسکریپت آشنا شدیم و نحوه تعریف متغیر و تبدیل انواع داده ها به یکدیگر را ذکر کردیم. همچنین برخی ویژگی های جاوا اسکریپت که بسیاری از برنامه نویسان آن را دوست دارند ذکر کردیم. در پست بعدی در رابطه با جاوا اسکریپت در مرورگرها صحبت خواهیم کرد. منتظر نظرات و پیشنهادات شما عزیزان هستیم. موفق و پیروز باشید.