
ویدیو این گفتار را در لینک های زیر می توانید، مشاهده بفرمایید.
یوتیوب
آپارات
اساسی ترین واحد اطلاعات در یک برنامه یک مقدار یا value است. مقادیر داده هستند. آنها چگونگی نگهداری state برنامه هستند. مقادیر در جی اس به دو شکل هستند:
تعریف متغیرها
متغیرها ظروف مقادیر هستند و فرق بین جاوااسکریپت و سایر زبان های برنامه نویسی این است که در جاوا اسکریپت ما نوع متغیر و یا type آن را هنگام تعریف متغیر مشخص نمینماییم مانند مثال زیر که ما یک متغیر تعریف نمودیم و مقدار آن را ۱۰۰ قرار دادیم و نوع متغیر را هنگام تعریف آن تعیین ننمودیم.
var value; var value =100
به این دو مرحله اعلان متغیر یا deceleration و بعد تعریف متغیر یا definition می گویند
var value; //deceleration now undefined value = 100: //definition now number
در جاوا اسکریپت دو نوع Type کلی به نام های Primitive و Reference برای متغیرها داریم
و متغیر های اولیه و یا Primitive در es5 به شرح ذیل هستند.
در es6 جاوااسکریپت یک نوع متغیر primitive دیگر دارد بنام Symbol که اینجا درباره جزییات آن فعلا صحبت نمی کنیم.
در جاوااسکریپت می توانیم در هر زمان نوع متغیر را مانند مثال زیر عوض کنیم و خطایی هم مانند سایر زبان های برنامه نویسی دریافت نکنیم، لذا در جاوا اسکریپت اصطلاحأ می گوییم lose typing یا week typing داریم و در هر لحظه می توانیم به عنوان مثال به یک متغیر number یک string تخصیص بدهیم.
var a =10 //Number console.log(a) a = "Hello" //Convert To String console.log(a)
خصیصه مشترک بین نوع متغیر primitive این است که غیر قابل تغییر است یا immutable هستند یعنی نمی توانیم آن ها را در حافظه تغییر بدهیم مثال ذیل:
var value; value = "hello" //hello value.toUpperCase(); console.log(value); //hello
اما توجه کنید که ما نمی توانیم متغیر های Primitive را در حافظه تغییر بدهیم اما می توانیم به آنها مجدد مقدار تخصیص بدهیم مثال ذیل :
var value; value = "hello" //hello value = value.toUpperCase(); console.log(value); //HELLO
به متغیر های Primitive در حافظه فضای جداگانه تخصیص داده می شود و اگر دو متغیر را مساوی قرار دهیم و یکی از آنها را تغییر دهیم بر دیگری اثر ندارد مثال زیر:
var value1; value1 = "hello"
var value2; value2 = value1; console.log(value2) //hello
value2= "test" console.log(value2) //test console.log(value1) //hello
توجه : نوع متغیر دیگری که در جاوا اسکریپت داریم متغیر های reference هستند مانند object که آنها قابل تغییر هستند و از نظر حافظه اگر دو متغیر آنها را مساوی قرار دهیم به یک مکان اشاره دارند که درقسمت بعدی به تفضیل درباره آنها صحبت خواهیم کرد
نوع متغیر undefined :
وقتی در جاوااسکریپت متغیر تعریف میشود و اما تخصیصی به آن صورت نگرفته باشد، undefined به صورت پیش فرض به آن تخصیص مییابد.
var a //undefined
نوع دیگر متغیر که داریم null است
var value; value=null; console.log(value); //null
فرق بین undefined و null :
همانطور که از اسم undefined مشخص است، یعنی متغیر تعریف شده اما مقداری به ان تخصیص پیدا ننموده اما null یعنی متغیر تعریف شده و به آن null یا بدون مقادر یا خالی تخصیص داده شده مثلا شما یک فرمی دارید که در اسم و اسم وسط و فامیلی در آن وجود دارد و اگر کاربر اسم وسط خود را وارد ننموده باشد بهتر است به آن null تخصیص بدهیم تا undefined.
درباره محدوده و یا Scope متغیر ها در قسمت های بعدی به تفضیل درباره آنها صحبت خواهیم کرد.
تو زبان های برنامه نویسی دیگر مانند C و یا جاوا نوع متغیر از موقع تعریف مشخص است اما از آنجاییکه
همانطور که عرض شد، در جاوا اسکریپت تعریف و تخصیص متغیر جداگانه انجام می گردد شما می توانید نوع متغیر را هر لحظه با اپراتور typeof مشخص نمایید.
var value = 10; console.log(typeof(value)); //number typepf null //object Note : it is javascript bug :(
مطلب دیگر که در متغیر وجود دارد type coercion و یا تغییر اتوماتیک است به عنوان مثال اگر شما یک number را به یک string به شکل زیر متصل کنید نتیجه string می شود
var value1 = 123; var value2 ="4" console.log(value1+value2) //"1234"
این مطلب ممکن است در شرط ها مشکل ساز شود به مثال زیر توجه کنید با وجود اینکه متغیر اول number است و متغیر دوم string شرط برقرار می گردد و same در کنسول چاپ می گردد
var value1 = 4; var value2 ="4" console.log(value1+value2) //"1234" if(value1 == value2){ console.log("same") //same } else{ console.log("not same") }
برای رفع این مشکل باید از اپراتور === استفاده نماییم که علاوه بر مقدار type را هم درشرط چک نماید.
var value1 = 4; var value2 ="4" console.log(value1+value2) //"1234" if(value1 === value2){ console.log("same") } else{ console.log("not same") //not same }
آخرین مطلبی که از متغیر ها می توانیم استفاده کنیم این است که از آنها می توانیم به عنوان boolean در شرط ها به صورت زیر استفاد کنیم.
اگر عدد مثبت باشد شرط true است
اگر منفی باشد شرط true است
اگر صفر باشد شرط false است
اگر string خالی باشد شرط false است
اگر string خالی نباشد شرط true است
اگر undefined و null باشد شرط false است