تقدم عملگرها
تقدم عملگرها مشخص میکند که در محاسباتی که بیش از دو عملوند دارند ابتدا کدام عملگر اثرش را اعمال کند. عملگرها در جاوااسکریپت در محاسبات دارای حق تقدم هستند. به عنوان مثال :
var number = 1 + 2 * 3 / 1;
اگر ما حق تقدم عملگرها را رعایت نکنیم و عبارت بالا را از سمت چپ به راست انجام دهیم نتیجه 9 خواهد شد (3=2+1 سپس 9=3×3 و در آخر 9=1/9). اما کامپایلر با توجه به تقدم عملگرها محاسبات را انجام میدهد. برای مثال عمل ضرب و تقسیم نسبت به جمع و تفریق تقدم دارند. بنابراین در مثال فوق ابتدا عدد 2 ضربدر 3 و سپس نتیجه آنها تقسیم بر 1 میشود که نتیجه 6 به دست میآید. در آخر عدد 6 با 1 جمع میشود و عدد 7 حاصل میشود. در جدول زیر تقدم برخی از عملگرهای جاوااسکریپت آمده است :
عملگر | شرکت پذیری | اولویت |
() | از چپ به راست | بیشترین اولویت |
[] | از چپ به راست | 1 |
. | از چپ به راست | 1 |
++ | از راست به چپ | 2 |
— | از راست به چپ | 2 |
– | از راست به چپ | 2 |
! | از راست به چپ | 2 |
~ | از راست به چپ | 2 |
delete | از راست به چپ | 2 |
new | از راست به چپ | 2 |
typeof | از راست به چپ | 2 |
void | از راست به چپ | 2 |
/ | از چپ به راست | 3 |
* | از چپ به راست | 3 |
% | از چپ به راست | 3 |
+ | از چپ به راست | 4 |
+ | از چپ به راست | 4 |
– | از چپ به راست | 4 |
>> | از چپ به راست | 5 |
<< | از چپ به راست | 5 |
>, >= | از چپ به راست | 6 |
<, <= | از چپ به راست | 6 |
== | از چپ به راست | 7 |
!= | از چپ به راست | 7 |
=== | از چپ به راست | 7 |
!== | از چپ به راست | 7 |
& | از چپ به راست | 8 |
^ | از چپ به راست | 9 |
| | از چپ به راست | 10 |
&& | از چپ به راست | 11 |
|| | از چپ به راست | 12 |
?: | از چپ به راست | 13 |
= | از راست به چپ | 14 |
*=, /=, %=, +=,, -=, <<=, >>=, >>>=, &=, ^=, |= | از راست به چپ | 14 |
, | از چپ به راست | کمترین اولویت |
ابتدا عملگرهای با بالاترین و سپس عملگرهای با پایینترین حق تقدم در محاسبات تأثیر میگذارند. به این نکته توجه کنید که تقدم عملگرها ++ و – به مکان قرارگیری آنها بستگی دارد (در سمت چپ یا راست عملوند باشند). به عنوان مثال :
var number = 3; var number1 = 3 + ++number; //results to 7 var number2 = 3 + number++; //results to 7
در هر دو عبارت بالا به دلیل تقدم بالاتر عملگر ++ نسبت به عملگر +، ابتدا به مقدار number یک واحد اضافه شده و 4 میشود و سپس مقدار جدید با عدد 3 جمع میشود و در نهایت عدد 7 به دست میآید. برای ایجاد خوانایی در تقدم عملگرها و انجام محاسباتی که در آنها از عملگرهای زیادی استفاده میشود از پرانتز استفاده میکنیم :
var number = ( 1 + 2 ) * ( 3 / 4 ) % ( 5 - ( 6 * 7 ));
در مثال بالا ابتدا هر کدام از عباراتی که داخل پرانتز هستند مورد محاسبه قرار میگیرند. به نکتهای در مورد عبارتی که در داخل پرانتز سوم قرار دارد توجه کنید. در این عبارت ابتدا مقدار داخلیترین پرانتز مورد محاسبه قرار میگیرد یعنی مقدار 6 ضربدر 7 شده و سپس از 5 کم میشود. اگر دو یا چند عملگر با حق تقدم یکسان موجود باشد ابتدا باید هر کدام از عملگرها را که در ابتدای عبارت میآیند مورد ارزیابی قرار دهید. به عنوان مثال :
var number = 3 * 2 + 8 / 4;
هر دو عملگر * و / دارای حق تقدم یکسانی هستند. بنابر این شما باید از چپ به راست آنها را در محاسبات تأثیر دهید. یعنی ابتدا 3 را ضربدر 2 میکنید و سپس عدد 8 را بر 4 تقسیم میکنید. در نهایت نتیجه دو عبارت را جمع کرده و در متغیر number قرار میدهید.