مفاهیم، نکته و ترفندهای جی اس - قسمت ۲ متغیرها

ویدیو این گفتار را در لینک های زیر می توانید، مشاهده بفرمایید.یوتیوبآپاراتاساسی ترین واحد اطلاعات در یک برنامه یک مقدار یا value است. مقادیر داده هستند. آنها چگونگی نگهداری state برنامه هستند. مقادیر در جی اس به دو شکل هستند:اولیه (primitive)شیء (object)تعریف متغیرها متغیرها ظروف مقادیر هستند و فرق بین جاوااسکریپت و سایر زبان های برنامه نویسی این است که در جاوا اسکریپت ما نوع متغیر و یا type آن را هنگام تعریف متغیر مشخص نمی‌نماییم مانند مثال زیر که ما یک متغیر تعریف نمودیم و مقدار آن را ۱۰۰ قرار دادیم و نوع متغیر را هنگام تعریف آن تعیین ننمودیم.var value; var value =100به این دو مرحله اعلان متغیر یا deceleration و بعد تعریف متغیر یا definition می گویندvar value; //deceleration now undefined value = 100: //definition now numberدر جاوا اسکریپت دو نوع Type کلی به نام های Primitive و Reference برای متغیرها داریمو متغیر های اولیه و یا Primitive در es5 به شرح ذیل هستند.Number // Integer or FloatStringBoolean //True of Falseundefinednullدر es6 جاوااسکریپت یک نوع متغیر primitive دیگر دارد بنام Symbol که اینجا درباره جزییات آن فعلا صحبت نمی کنیم. در جاوااسکریپت می توانیم در هر زمان نوع متغیر را مانند مثال زیر عوض کنیم و خطایی هم مانند سایر زبان های برنامه نویسی دریافت نکنیم، لذا در جاوا اسکریپت اصطلاحأ می گوییم lose typing یا week typing داریم و در هر لحظه می توانیم به عنوان مثال به یک متغیر number یک string تخصیص بدهیم.var a =10 //Number console.log(a) a = &quotHello&quot //Convert To String console.log(a)خصیصه مشترک بین نوع متغیر primitive این است که غیر قابل تغییر است یا immutable هستند یعنی نمی توانیم آن ها را در حافظه تغییر بدهیم مثال ذیل:var value; value = &quothello&quot //hello value.toUpperCase(); console.log(value); //helloاما توجه کنید که ما نمی توانیم متغیر های Primitive را در حافظه تغییر بدهیم اما می توانیم به آنها مجدد مقدار تخصیص بدهیم مثال ذیل :var value; value = &quothello&quot //hello value = value.toUpperCase(); console.log(value); //HELLO به متغیر های Primitive در حافظه فضای جداگانه تخصیص داده می شود و اگر دو متغیر را مساوی قرار دهیم و یکی از آنها را تغییر دهیم بر دیگری اثر ندارد مثال زیر:var value1; value1 = &quothello&quot var value2; value2 = value1; console.log(value2) //hellovalue2= &quottest&quot 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 =&quot4&quot console.log(value1+value2) //&quot1234&quot این مطلب ممکن است در شرط ها مشکل ساز شود به مثال زیر توجه کنید با وجود اینکه متغیر اول number است و متغیر دوم string شرط برقرار می گردد و same در کنسول چاپ می گرددvar value1 = 4; var value2 =&quot4&quot console.log(value1+value2) //&quot1234&quot if(value1 == value2){ console.log(&quotsame&quot) //same } else{ console.log(&quotnot same&quot) }برای رفع این مشکل باید از اپراتور === استفاده نماییم که علاوه بر مقدار type را هم درشرط چک نماید.var value1 = 4; var value2 =&quot4&quot console.log(value1+value2) //&quot1234&quot if(value1 === value2){ console.log(&quotsame&quot) } else{ console.log(&quotnot same&quot) //not same } آخرین مطلبی که از متغیر ها می توانیم استفاده کنیم این است که از آنها می توانیم به عنوان boolean در شرط ها به صورت زیر استفاد کنیم.اگر عدد مثبت باشد شرط true استاگر منفی باشد شرط true استاگر صفر باشد شرط false استاگر string خالی باشد شرط false استاگر string خالی نباشد شرط true استاگر undefined و null باشد شرط false است https://virgool.io/@amini.hooman/%D9%82%D8%B3%D9%85%D8%AA-%D8%A7%D9%88%D9%84-%D9%85%D9%81%D8%A7%D9%87%DB%8C%D9%85-%D9%86%DA%A9%D8%AA%D9%87-%D9%88-%D8%AA%D8%B1%D9%81%D9%86%D8%AF%D9%87%D8%A7%DB%8C-%D8%AC%D8%A7%D9%88%D8%A7%D8%A7%D8%B3%DA%A9%D8%B1%DB%8C%D9%BE%D8%AA-o3mcfglskftl https://youtu.be/9yzZlS8i2RU https://youtu.be/LIaDL8-1mzY https://aparat.com/v/i4h8S