بررسی موردی اپراتورهای پرکاربرد در زبان جاوا اسکریپت

سیده آمین ارمان

کاربر نگاه دانلود
کاربر نگاه دانلود
عضویت
2016/05/10
ارسالی ها
1,730
امتیاز واکنش
20,744
امتیاز
795
محل سکونت
البرز
بررسی موردی اپراتورهای پرکاربرد در زبان جاوا اسکریپت
در آموزش گذشته با لیستی از اپراتورهای زبان برنامه نویسی جاوا اسکریپت آشنا شدیم؛ حال در این آموزش قصد داریم تا به بررسی کاربردهای عملی برخی از مهم ترین آن ها بپردازیم.

ساخت آبجکت با لیستی از آرگومان ها با استفاده از اپراتور new
مبحث آبجکت ها در فصل های آینده به شکل دقیق تر توضیح داده خواهد شد اما در اینجا کافی است بدانیم که کلیدواژه ی new، یک آبجکت جدید بر اساس فانکشنی که از پیش ساخته شده ایجاد کرده سپس، آرگومان هایی را دریافت می کند که به عنوان متغیرهای آن فانکشن جایگذاری می شوند.

فراخوانی فانکشن با استفاده از اپراتور function
این اپراتور، همان طور که از نام اش پیدا است، یک فانکشن را فراخوانی می کند. برای استفاده از فانکشن ها، دو راهکار وجود دارد: یا آن که به طور مستقیم وارد برنامه شده و بلافاصله استفاده شوند یا آن که از قبل ایجاد شده و در زمان مناسب فراخوانی شوند. این اپراتور برای روش دوم مورد استفاده قرار می گیرد. در ادامه ی آموزش ها، کاربردهای کلیدواژه ی function را نیز به طور مفصل بررسی خواهیم کرد.

افزایش پسوندی مقدار یک متغیر با استفاده از اپراتور ++
این اپراتور می تواند مقدار یک متغیر را به صورت پسوندی، یک واحد افزایش دهد. نمونه ی زیر را در نظر بگیرید:

var num = 1;
var y = num++;
console.log(num, y); //returns 2 , 1
در اینجا دو متغیر num و y را تعریف کرده ایم. در ابتدا مقدار num برابر 1 است و پس از آن، متغیر y را بر اساس ++num تعریف کرده ایم. برای خط دوم، جاوا اسکریپت ابتدا y را برابر num که مقدارش برابر 1 است قرار می دهد (y = 1) سپس به اپراتور ++ برخورد می کند و مقدار num را یک واحد افزایش می دهد. بدین ترتیب زمانی که نتیجه را مشاهده می کنیم، y برابر مقدار اولیه ی ۱ بوده و خود num یک واحد افزایش یافته است و برابر با 2 شده است.

از آن جهت به اپراتور ++ پسوندی گفته می شود که در ابتدا، عملیات مد نظر انجام می شوند سپس این اپراتور، مقدار متغیری که به آن متصل شده را ۱ واحد افزایش می دهد (لازم به ذکر است که محل قرار گیری این اپراتور پس از نام متغیر است.)

کاهش پسوندی مقدار یک متغیر با استفاده از اپراتور --
این اپراتور نیز همانند اپراتور بالا عمل می کند اما با این تفاوت که به جای افزایش، ۱ واحد از متغیر کم می کند:

var num = 1;
var y = num--;
console.log(num, y); //returns 0 , 1
همان طور که می بینیم، در اینجا نیز ابتدا مقدار y برابر num قرار می گیرد سپس ۱ واحد از num کم می شود. بدین ترتیب، در آخر num برابر با 0 و y برابر با 1 خواهد بود.

NOT منطقی با استفاده از اپراتور !
این اپراتور همواره خروجی true یا false (یا به عبارتی ۱ و ۰) خواهد داشت و خلاف عبارتی که بر روی آن اعمال می شود را بیان می کند. به عنوان مثال داریم:

var num = 0;
var y = 1;
!num; //returns true
!y; //returns false
متغیر عددی num دارای مقدار 0 است که در منطق جاوا اسکریپت برابر عبارت false است. بدین ترتیب زمانی که با استفاده از اپراتور ! خلاف آن را می خواهیم، عبارت true را نمایش می دهد. از طرفی، متغیر y دارای مقدار 1 است که در منطق جاوا اسکریپت برابر true است و اگر بخواهیم خلاف آن را نمایش دهیم، عبارت false نمایش داده می شود.

نکته
در زبان جاوا اسکریپت، عباراتی که در نهایت معادل با null، 0، NaN، استرینگ خالی (" ") یا undefined باشند، همواره از لحاظ منطقی برابر false در نظر گرفته می شوند. بدین ترتیب اگر از اپراتور ! بر روی این عبارات استفاده کنیم، همواره جواب true خواهد بود. اگر این اپراتور بر روی هر عبارت دیگری به جز عبارات گفته شده استفاده شود، خروجی آن همیشه false خواهد بود.
NOT بیتی با استفاده از اپراتور ~
اپراتورهای بیتی، با عبارات خود مانند مقادیر 32 بیتی برخورد می کنند. هر عدد در منطق 32بیتی، ترکیبی از 32 عدد 0 یا 1 است که در کنار هم، عددی را تشکیل می دهند. با آن که اپراتورهای بیتی با منطق 32بیتی عملیات خود را انجام می دهند اما خروجی آن ها به صورت اعداد معمولی (در مبنای 10) نمایش داده می شود. برای مثال، عدد 9 در منطق 32 بیتی به شکل زیر خواهد بود که NOT بیتی آن نیز در ادامه آمده است:

9 (base 10) = 00000000000000000000000000001001 (base 2)
~9 (base 10) = 11111111111111111111111111110110 (base 2) = -10 (base 10)
عمل NOT در منطق بیتی بدین ترتیب عمل می کند که تمامی 0ها را به 1 تبدیل می کند و تمامی 1ها را نیز به 0. همان طور که گفته شد، خروجی اپراتورهای بیتی همواره اعداد استاندارد (در مبنای 10) است و به همین دلیل زمانی که عبارت 9~ را در پنجره ی کنسول جاوا اسکریپت کروم تایپ کنید، عبارت 10- را به شما نمایش خواهد داد. به طور کلی، NOT بیتی هر عدد در جاوا اسکریپت، منفی یک عدد بیشتر از آن را به عنوان خروجی خواهد داد:

~x = - (x + 1)
قرینه سازی عملوند با استفاده از اپراتور -
این اپراتور می تواند عملوند جلوی خود را قرینه سازد. به طور مثال داریم:

var num = 2;
var y = -6;
-num; //returns -2
-y //returns 6
هر یک از متغیرهای بالا دارای مقدار مثبت یا منفی بوده اند که پس از قرینه سازی، دقیقاً عبارت مخالف آن ها به عنوان خروجی نمایش داده شده است.

افزایش پیشوندی با استفاده از اپراتور ++
این اپراتور، عملکردی مشابه با افزایش پسوندی دارد (که در بالا معرفی شد)؛ یعنی می تواند یک واحد به متغیر خود بیافزاید. اما تفاوت هایی نیز بین این دو اپراتور وجود دارد:

var num = 1;
var y = ++num;
console.log(num, y); //returns 2 , 2
در این تکه کد، ابتدا متغیر num با مقدار 1 تعریف می شود سپس جاوا اسکریپت به سراغ خط دوم می آید؛ متغیر y ساخته می شود و زمانی که جاوا اسکریپت می خواهد به y مقدار دهی کند، با اپراتور ++ مواجه می شود که قبل از نام متغیر قرار گرفته است (بر خلاف اپراتور پسوندی که پس از نام متغیر قرار می گرفت)، پس ابتدا این اپراتور را بر روی متغیری که به آن متصل شده اعمال می کند و سپس جواب نهایی را به عنوان مقدار y در نظر می گیرد. بدین ترتیب یک واحد به num افزوده می شود و سپس نتیجه ی آن یعنی 2، به y اختصاص داده می شود.

کاهش پیشوندی با استفاده از اپراتور --
این اپراتور همانند اپراتور افزایش پیشوندی عمل می کند اما قبل از هر کاری، یک واحد از عملوند خود می کاهد:

var num = 1;
var y = --num;
console.log(num , y); //returns 0 , 0
تشخیص نوع آبجکت ها در جاوا اسکریپت با استفاده از اپراتور typeof
این اپراتور همواره نوع عملوند جلوی خود را در قالب یک استرینگ نمایش می دهد. در مثال های زیر سعی کرده ایم انواع مختلفی از آبجکت های جاوا اسکریپت را به عنوان پارامتر ورودی typeof در نظر گرفته و خروجی آن ها را نیز مشخص سازیم:

// Numbers
typeof (37) //returns "number"
typeof (3.14) //returns "number"
typeof (Math.LN2) //returns "number"
typeof (NaN) //returns "number"

//Strings
typeof ("") //returns "string"
typeof ("bla") //returns "string"
typeof ((typeof 1)) //returns "string"

//Booleans
typeof (true) //returns "boolean"
typeof (false) //returns "boolean"

//Symbols
typeof (Symbol()) //returns "symbol"
typeof (Symbol('foo')) //returns "symbol"

//Undefined
typeof (undefined) //returns "undefined"
typeof (declaredButUndefinedVariable) //returns "undefined"
typeof (undeclaredVariable) //returns "undefined"

//Objects
typeof ({a:1}) //returns "object"
typeof ([1, 2, 4]) //returns "object"

//Functions
typeof (function(){}) //returns "function"
typeof (Math.sin) //returns "function"
همان طور که می بینیم، تقریباً همه ی عبارات از نظر اپراتور typeof، در همان 7 نوع دیتا تایپ جاوا اسکریپت خلاصه می شوند

به خاطر داشته باشید
همواره توجه داشته باشیم که مقدار NaN به عنوان یک number یا عدد -البته از نوع نامشخص آن- در نظر گرفته می شود.
اگر متغیری را به اپراتور typeof پاس دهیم که تعریف شده اما مقداری برای آن در نظر گرفته نشده باشد، اپراتور typeof عبارت undefined را به عنوان خروجی نشان می دهد؛ بدین معنا که متغیر ما هنوز بلاتکلیف است یا بهتر بگوییم مقدار مشخصی ندارد. همچنین اگر متغیری که نه تعریف شده و نه مقدار دارد را به typeof پاس دهیم، باز هم عبارت undefined را مشاهده خواهیم کرد؛ مثلاً:

var num;
typeof num; //returns "undefined"
typeof c; //returns "undefined"
کاربرد اپراتور void در جاوا اسکریپت
کاربرد اصلی اپراتور void این است که به کمک آن بتوان به مقدار اصلی و ساده ی "undefined" دسترسی پیدا کرد (همچنین می توان از این اپراتور برای تبدیل کلمه ی کلیدی function از فراخوانی مستقیم به اکسپرشن، استفاده کرد که در بخش فانکشن ها، آن را بهتر بررسی خواهیم کرد.)

کاربرد اپراتور delete
به کمک این اپراتور می توان یک پراپرتی را از یک آبجکت حذف کرد:

delete myObject.firstProperty;
delete myObject['firstProperty'];
هر دو عبارت بالا، مشابه بوده و یک کار را انجام می دهند و آن هم چیزی نیست جز حذف پراپرتی firstProperty از آبجکت myObject. بدین ترتیب، این پراپرتی و تمامی مقادیر/رفرنس های آن به طور کامل از آبجکت حذف می شوند. اگر اپراتور delete در کار خود موفق شود، عبارت true را به عنوان خروجی نمایش می دهد و اگر ناموفق باشد، عبارت false نشان داده می شود.

نکته
توجه داشته باشید که این اپراتور فقط بر روی پراپرتی های یک آبجکت اثر می گذارد و استفاده از آن بر روی متغیرها یا فانکشن ها بی فایده خواهد بود.
استفاده از اپراتور % به منظور دستیابی به باقیمانده ی یک عملیات ریاضیاتی
این اپراتور می تواند باقیمانده ی تقسیم ۲ عدد بر هم را به عنوان خروجی نمایش دهد. برای مثال:

var remainder = 23 % 7; //returns 2
همان طور که می دانید، تقسیم عدد 23 بر 7 دارای خارج قسمت 3 و باقیمانده ی 2 خواهد بود و این اپراتور نیز دقیقاً باقیمانده ی مورد نظر را نمایش می دهد.

شیفت بیتی به چپ با استفاده از اپراتور >>
این اپراتور، همان طور که از نامش پیدا است، بیت های یک عدد را به سمت چپ شیفت می کند. برای درک بهتر این اپراتور، مثال زیر را در نظر بگیرید:

var leftShift = 9 << 2;
console.log(leftShift); //returns 36
اولین خط این کد به جاوا اسکریپت می گوید که عدد 9 را به تعداد 2 بیت، به سمت چپ شیفت کند. لذا این اپراتور بدین گونه عمل می کند که عدد سمت چپ خود را به تعداد بیت های عدد سمت راست، شیفت می کند.

در منطق باینری، عدد 9 به شکل 1001 تعریف می شود. زمانی که بخواهیم این عدد را به تعداد 2 بیت به سمت چپ شیفت کنیم، کل اعداد آن را دو خانه به سمت چپ منتقل می کنیم و به جای خانه های خالی، 0 می گذاریم؛ بدین ترتیب عدد 1001 به 100100 تبدیل می شود. در آخر، جاوا اسکریپت عدد معادل در منطق ده دهی را محاسبه می کند و به عنوان خروجی نمایش می دهد: 100100 در منطق باینری برابر با عدد 36 در منطق ده دهی است.

شیفت بیتی به راست با استفاده از اپراتور <<
این اپراتور نیز همانند مورد قبلی، عملیات شیفت را بر روی اعداد در مبنای ۲ انجام می دهد اما به جای شیفت به چپ، آن را به سمت راست شیفت می کند. در این حین، هر بیت اضافه که به راست شیفت می شود، حذف خواهد شد.

فرض کنیم که همان عدد 9 را بخواهیم به کمک این اپراتور به سمت راست شیفت کنیم. عدد 9 در منطق باینری به شکل 1001 نمایش داده می شود. اگر بخواهیم این عدد را به تعداد 2 بیت، به سمت راست شیفت کنیم، دو بیت اول از سمت راست یعنی 1 و 0 حذف می شوند. از طرف چپ نیز، همان بیتی که در گذشته قرار داشته، به تعداد بیت های حذف شده (در اینجا 2 بار) تکرار می شود:

9 (base 10) = 00000000000000000000000000001001 (base 2)
9>>2 (base 10) = 00000000000000000000000000000010 (base 2) = 2 (base 10)
همان طور که می بینیم، ۲ بیت از سمت راست حذف شده اند و از سمت چپ نیز ۲ بیت 0 اضافه شده اند.

شیفت بیتی به راست (با فلگ 0) با استفاده از اپراتور <<<
عملکرد این اپراتور کاملاً مشابه اپراتور قبلی، یعنی شیفت بیتی به راست است. تنها تفاوت این دو اپراتور در آن است که پس از حذف بیت ها از سمت راست، جهت اضافه کردن بیت های جایگزین از سمت چپ، بدون توجه به بیت ابتدایی در سمت چپ، همواره بیت 0 اضافه می شود. بدین ترتیب، عملکرد این اپراتور بر روی اعداد مثبت، نتیجه ای مشابه با اپراتور قبلی خواهد داشت اما بر روی اعداد منفی (که بیت انتهایی سمت چپ آن ها 1 است)، جواب کاملاً متفاوت خواهد بود.

جستجو در آبجکت ها با استفاده از اپراتور in
اگر بخواهیم از وجود یک پراپرتی، تابع از پیش تعریف شده یا عضو در داخل یک آبجکت مطمئن شویم، از اپراتور in استفاده خواهیم کرد. نمونه های زیر را در نظر بگیرید:

//Arrays
var trees = ["redwood", "cedar", "oak", "maple"];
0 in trees //returns true
3 in trees //returns true
6 in trees //returns false
"oak" in trees //returns false (you must specify the index number, not the value at that index)
"length" in trees //returns true (length is an Array property)

//Predefined objects
"PI" in Math //returns true

//Custom objects
var myCar = {brand: "Honda", model: "Accord", year: 1998};
"brand" in myCar //returns true
"model" in myCar //returns true
در بخش اول، آرایه ای دلخواه تعریف کرده ایم. با استفاده از اپراتور in می توانیم بررسی کنیم که برای مثال، آیا در خانه ی ایندکس سوم، عضوی وجود دارد یا خیر. می بینیم که برای اعضای ۰ و ۳ مقدار true بازگردانده می شود اما از آنجا که خانه ی ۶ وجود خارجی ندارد، مقدار false در نظر گرفته شده است. اگر در اینجا به جای شماره ی ایندکس آرایه، محتوا یا مقدار آن خانه را از اپراتور in بخواهیم، خروجی false خواهد بود (مثلاً به جای 2، از "oak" استفاده کنیم.)

همان طور که گفته شد، این اپراتور می تواند توابع از پیش تعریف شده یا پراپرتی ها را نیز مشخص کند؛ از آنجایی که تابع PI یا همان عدد 3.14 به طور پیش فرض در آبجکت Math جاوا اسکریپت تعریف شده، خروجی اپراتور in مثبت یا true خواهد بود.

در بخش آخر نیز یک آبجکت دلخواه (myCar) با سه پراپرتی brand، model و year ایجاد کرده ایم که استفاده از اپراتور in بر روی این اپراتورها، خروجی true خواهد داشت. البته اگر به جای نام پراپرتی، یکی از مقادیر آن، مثلاً "Honda" را از این اپراتور بخواهیم، خروجی false خواهد بود؛ دقیقاً مشابه بخش اول و عملکرد این اپراتور در آرایه ها.

چک کردن برابری مطلق با استفاده از اپراتور ===
در بررسی برابری و یا نابرابری دو مقدار، اگر آن ها از یک type (تایپ یا نوع) نباشند، جاوا اسکریپت ابتدا آن ها را به یک تایپ یکسان تبدیل کرده و سپس عملیات مقایسه را انجام می دهد. برای مثال، اگر استرینگ "1" را با عدد 1 بخواهیم مقایسه کنیم، جاوا اسکریپت ابتدا هر دو را به عدد تبدیل کرده و سپس مقایسه می کند. اما در این اپراتور، عملیات تبدیل متغیر صورت نمی گیرد و مقادیر به همان شکلی که هستند با یکدیگر مقایسه می شوند:

3 == "3" //returns true
3 === "3" //returns false
همان طور که می بینیم، در مقایسه ی اول، از اپراتور برابری عادی (==) استفاده شده و هر دو مقدار، پس از تبدیل به تایپی یکسان، با یکدیگر برابر در نظر گرفته می شوند اما زمانی که از اپراتور برابری مطلق (===) استفاده کنیم، خروجی ما false خواهد بود.

نکته
اپراتورهای بیتی بدین شکل عمل می کنند که ابتدا اعداد داده شده را به منطق 32 بیتی باینری تبدیل می کنند؛ سپس هر بیت از عدد اول را با بیت متناظرش در عدد دوم در نظر می گیرند و عملیات خود را بر روی آن ها اجرا می کنند.
اعمال کردن AND بیتی با استفاده از اپراتور &
این اپراتور عمل AND را بر روی اعداد در مبنای باینری پیاده سازی می کند. خروجی این اپراتور تنها زمانی 1 خواهد بود، که هر دو بیت a و b نیز 1 باشند:

9 (base 10) = 00000000000000000000000000001001 (base 2)
14 (base 10) = 00000000000000000000000000001110 (base 2)
14&9 (base 10) = 00000000000000000000000000001000 (base 2) = 8 (base 10)
در این مثال، تنها جفت بیت چهارم از راست، دارای مقادیر یکسان 1 هستند و اعمال اپراتور AND بر روی هر جفت بیت های دیگر، خروجی صفر را خواهد داشت. در نهایت، جواب به صورت مبنای 10 یعنی عدد 8 نمایش داده می شود.

اعمال کردن XOR بیتی با استفاده از اپراتور ^
خروجی این اپراتور تنها زمانی 1 خواهد بود که مقادیر بیت های a و b با یکدیگر متفاوت باشند:

9 (base 10) = 00000000000000000000000000001001 (base 2)
14 (base 10) = 00000000000000000000000000001110 (base 2)
14^9 (base 10) = 00000000000000000000000000000111 (base 2) = 8 (base 10)
اعمال کردن OR بیتی با استفاده از اپراتور |
اگر حتی یکی از بیت های a یا b دارای مقدار 1 باشد، جواب نهایی OR نیز 1 خواهد بود. بدین ترتیب، تنها در صورتی که هر دو بیت a و b صفر باشند، خروجی این اپراتور نیز صفر می شود.

9 (base 10) = 00000000000000000000000000001001 (base 2)
14 (base 10) = 00000000000000000000000000001110 (base 2)
14|9 (base 10) = 00000000000000000000000000001111 (base 2) = 8 (base 10)
نکته
اپراتورهای منطقی عموماً خروجی خود را به شکل بولیَن نمایش می دهند، یعنی یا جواب true و یا false خواهند داشت. به همین دلیل، کاربرد آن ها بیشتر در مقایسه و بررسی شرط ها است. این اپراتورها سعی می کنند تا مقادیر اطراف خود را به true تبدیل کنند و اگر این امکان وجود نداشت، خروجی false را نمایش می دهند.
کاربرد && در دستورات شرطی
کاربرد اصلی این اپراتور در برقراری شرط ها است. زمانی که از اپراتور && استفاده می کنیم، این بدان معنا است که تمامی شرایط باید همزمان برقرار باشند و حتی اگر یکی از آن ها false باشد، خروجی کل عبارت برابر با false خواهد بود:

x < 10 && y > 1
در نمونه ی بالا، به جاوا اسکریپت می گوییم که متغیر x حتماً می بایست کوچکتر از 10 بوده و در عین حال، متغیر y نیز باید بزرگتر از 1 باشد. اگر این دو شرط، همزمان برقرار باشند، خروجی اپراتور && برابر با true خواهد بود و در غیر این صورت false می شود.

کاربرد اپراتور || در دستورات شرطی
در بررسی شرط ها به کمک اپراتور ||، به جاوا اسکریپت می گوییم که حتی اگر یکی از شرایط نیز برقرار بود، خروجی true را نمایش دهد. به عبارتی دیگر، بر خلاف &&، نیازی نیست که تمامی شرط ها به طور همزمان برقرار باشند و حتی اگر یکی از شروط نیز صادق بود، خروجی کل آن عبارت برابر با true خواهد بود:

(x == 5 || y == 10)
تکه کد بالا به جاوا اسکریپت می گوید که اگر x برابر با 5 بود یا آن که y برابر با 10 بود، کل آن عبارت را به عنوان true فرض کند؛ پس حتی اگر x برابر با ۵ باشد اما y برابر با 10 نباشد، باز هم این اپراتور خروجی true را نمایش خواهد داد.

کاربرد ساختار : ... ? در دستورات شرطی
این اپراتور شرطی، تنها اپراتور جاوا اسکریپت است که ۳ عملوند جداگانه دریافت می کند. عموماً از این اپراتور به جای جملات if استفاده می شود و می تواند با توجه به شرط بیان شده، یکی از دو مقدار تعریف شده را به عنوان خروجی برگزیند:

var voteable = (age > 18) ? "Old enough":"Too young";
در اینجا فرض کنید که از قبل، متغیری به نام age تعریف کرده ایم و قصد داریم سن یک کاربر را در آن ذخیره کنیم. اکنون با استفاده از اپراتور شرط و متغیر voteable می خواهیم بررسی کنیم که آیا این کاربر می تواند در انتخابات شرکت کند یا خیر.

اولین عملوند که باید پیش از علامت سؤال نوشته شود، شرط اصلی است. در اینجا (age < 18) بررسی می کند که آیا مقدار age بیشتر از 18 است یا خیر. پس از علامت سؤال، دو عبارت قرار می دهیم که در حقیقت، خروجی های احتمالی هستند. اگر شرط برابر true باشد، اولین خروجی انتخاب می شود و اگر false باشد، دومین خروجی نمایش داده می شود.

در اینجا فرض کنیم که age = 15 است؛ بدین ترتیب شرط اپراتور برابر با false خواهد بود و دومین خروجی یعنی Too young نمایش داده می شود. حال اگر age = 30 باشد، شرط اپراتور برابر true بوده و عبارت Old enough به عنوان خروجی نمایش داده می شود.

نکته
اپراتورهای تخصیص که در ادامه بررسی می کنیم، همگی به یک شکل مشترک عمل می کنند؛ آن ها در ابتدا عملیاتی را بر روی متغیر اول و دوم اجرا می کنند و سپس پاسخ نهایی را مستقیماً به داخل اپراتور اول می ریزند. بدین ترتیب، دیگر نیازی به یک متغیر سوم برای نگاه داشتن پاسخ عملیات اپراتور نیست.
کاربرد اپراتور تخصیص مقدار =+
این اپراتور، متغیر اول را با متغیر دوم جمع کرده و نتیجه را در متغیر اول ذخیره می کند:

var x = 3;
var y = 2;
x += y; //meaning: x = x + y;
console.log(x); //returns 5
در نمونه ی بالا، زمانی که از اپراتور =+ استفاده می کنیم، جاوا اسکریپت ابتدا x را با y جمع می کند و سپس خروجی آن را مستقیماً به x تخصیص می دهد. به همین دلیل زمانی که مقدار x را از جاوا اسکریپت می خواهیم، عدد 5 (مجموع 2 + 3) را به ما نمایش می دهد.

کاربرد اپراتور تخصیص مقدار =-
عملکرد این اپراتور نیز دقیقاً عکس اپراتور بالا است، به این شکل که اپراتور =- عمل تفریق را انجام می دهد:

var x = 3;
var y = 2;
x -= y; //meaning: x = x - y;
console.log(x); //returns 1
سایر اپراتورهای تخصیص که در زیر آمده اند نیز بسته به علامتی که قبل از = قرار گرفته است، عملکرد قابل حدس زدنی دارند:

… *= …
… /= …
… %= …
… <<= …
… >>= …
… >>>= …
… &= …
… ^= …
… |= …
به بیانی دیگر، این اپراتورها، علامت پیش از مساوی (مانند *، /، %، <<، >>> و ...) را بین متغیر اول و دومی که در اطرافشان قرار دارند، اجرا می کنند و سپس نتیجه ی نهایی را در متغیر اول ذخیره می کنند که اصطلاحا این کار را Overwrite (اورراید یا بازنویسی) می گویند. با استفاده از متغیرهای تخصیص بدین شکل، می توانیم تعداد خط کدها را کاهش دهیم و به شکل بهینه تری برنامه را نوشته و اجرا کنیم.

استفاده از , در جاوا اسکریپت
پیش از هر چیز، باید گفت که این اپراتور کاملاً با علامتی که در داخل آرایه ها، آبجکت ها، آرگومان های فانکشن و یا پارامترها استفاده می شود، تفاوت دارد. به همین دلیل نباید یک کامای اپراتور را با یک جداکننده ی ساده اشتباه گرفت.

عملکرد اپراتور کاما بدین شکل است که از سمت چپ به راست، تمامی عملوندها و اکسپرشن ها را محاسبه می کند و سپس مقدار آخرین عملوند یا اکسپرشن (سمت راست) را نمایش می دهد.

به کمک این اپراتور می توانیم در جاهایی که فقط امکان تعریف یک اکسپرشن وجود دارد، چندین اکسپرشن را به یکدیگر متصل کرده و به عنوان یک اکسپرشن بزرگ تر استفاده کنیم. رایج ترین کاربرد اپراتور کاما، تعریف چندین پارامتر برای Loop (لوپ یا حلقه) است. برای روشن تر شدن موضوع، نمونه های زیر را در نظر بگیرید:

a = b = 3, c = 4;
مثال بالا دارای دو بخش است که توسط اپراتور کاما از هم جدا شده اند اما به عنوان یک اکسپرشن، در یک خط نوشته شده اند. در بخش اول، مقدار 3 به متغیر b اختصاص داده می شود و بعد از آن، مقدار b به متغیر a داده می شود که در نهایت، هر دوی آن ها دارای مقدار 3 هستند. در ادامه، مقدار 4 نیز به متغیر c داده می شود.

x = (y = 5, z = 6); //returns 6 in console
console.log(x); //returns 6
در تکه کد بالا می خواهیم متغیر x را مقدار دهی کنیم اما در جلوی اپراتور = یک پرانتز با دو اکسپرشن متفاوت قرار داده ایم که با استفاده از اپراتور کاما از هم جدا شده اند. همان طور که گفته شد، اپراتور کاما تمامی اکسپرشن های سمت چپ را محاسبه می کند و تنها مقدار آخرین اکسپرشن را به عنوان خروجی نمایش می دهد.

پس در داخل پرانتز، ابتدا مقدار y برابر 5 قرار داده می شود و z نیز مقدار 6 را به خود اختصاص می دهد. سپس از آنجایی که آخرین اکسپرشن z = 6 است، خروجی کلی پرانتز برابر با z = 6 خواهد بود و بدین ترتیب کد بدین شکل در خواهد آمد: x = z = 6 در نتیجه، خروجی نهایی x نیز برابر با 6 خواهد بود.
 

برخی موضوعات مشابه

بالا