عملگرهای یک‌گانه ECMAScript

عملگر یک‌بارگی تنها یک پارامتر دارد، یعنی شیء یا مقدار مورد نظر برای عملیات. این‌ها ساده‌ترین عملگرها در ECMAScript هستند.

delete

عملگر delete برای حذف ارجاع به ویژگی‌ها یا روش‌های پیشین تعریف شده در یک شیء استفاده می‌شود. به عنوان مثال:

var o = new Object;
o.name = "David";
alert(o.name);	//نمایش "David"
delete o.name;
alert(o.name);	// خروجی "undefined"

در این مثال، ویژگی name حذف شده است، که به معنای لغو ارجاع به آن است و مقدار آن را به undefined (یعنی مقدار یک متغیر غیرتعریف شده) تنظیم می‌کند.

علامت‌گذار delete نمی‌تواند از ویژگی‌ها و روش‌های توسعه‌دهنده حذف کند. به عنوان مثال، زیرا این کد باعث خطا می‌شود:

delete o.toString;

حتی اگر نام toString یک نام معتبر باشد، این خط کد باعث خطا می‌شود، زیرا روش toString() یک روش اولیه ECMAScript است و نه روشی که توسط توسعه‌دهنده تعریف شده است.

void

علامت‌گذار void برای هر مقدار undefined بازمی‌گرداند. این علامت‌گذار معمولاً برای جلوگیری از نمایش مقدارهایی که نباید نمایش داده شوند استفاده می‌شود، به عنوان مثال، هنگام فراخوانی توابع JavaScript از عناصر <a> HTML. برای انجام این کار به درستی، توابع نباید مقدارهای معتبر بازگردانند، در غیر این صورت مرورگر صفحه را خالی خواهد کرد و فقط نتایج توابع را نمایش خواهد داد. به عنوان مثال:

<a href="javascript:window.open('about:blank')">کلیک کنید</a>

اگر این خط کد را در صفحه HTML قرار دهید و روی لینک‌ها کلیک کنید، می‌توانید "[object]" را روی صفحه نمایش ببینید.TIY

این دلیل آن است که تابع window.open() به یک مرجع پنجره جدید باز شده بازمی‌گردد. سپس این اشیاء به یک رشته برای نمایش تبدیل می‌شوند.

برای جلوگیری از این اثر، می‌توان از علامت‌گذار void برای فراخوانی تابع window.open() استفاده کرد:

<a href="javascript:void(window.open('about:blank'))">کلیک کنید</a>

این باعث می‌شود که فراخوانی window.open() به undefined بازگردد، که یک مقدار معتبر نیست و در پنجره مرورگر نمایش داده نمی‌شود.

توجه:لطفاً به خاطر بسپارید که هیچ توابعی که هیچ مقدار بازگشتی ندارند واقعاً undefined را بازمی‌گردانند.

علامت‌گذار پیشوند/کاهش پیشوند

دو علامت‌گذار پیشوند که از C (و Java) قرض گرفته شده‌اند علامت‌گذار پیشوند افزایش و کاهش هستند.

علامت‌گذار پیشوند افزایش، به معنای اضافه کردن 1 به مقدار عددی است، به صورت قرار دادن دو علامت اضافه (++) در پیش از متغیر است:

var iNum = 10;
++iNum;

در خط دوم کد، iNum را به 11 افزایش می‌دهد، که به طور واقعی معادل ++iNum است:

var iNum = 10;
iNum = iNum + 1;

به طور مشابه، علامت‌گذار پیشوند کاهش از نظر عددی 1 کم می‌کند، به صورت قرار دادن دو علامت منفی (--) در پیش از متغیر است:

var iNum = 10;
--iNum;

در این مثال، خط دوم کد مقدار iNum را به 9 کاهش می‌دهد.

در استفاده از علامت‌گذار پیشوند، توجه داشته باشید که عملیات افزایش و کاهش در محاسبه عبارت رخ می‌دهد. به این مثال توجه کنید:

var iNum = 10;
--iNum;
alert(iNum);	// خروجی "9"
alert(--iNum);	// خروجی "8"
alert(iNum);	// خروجی "8"

کد دوم برای کاهش iNum عمل می‌کند، کد سوم نتایج را نمایش می‌دهد ("9"). کد چهارم دوباره برای کاهش iNum عمل می‌کند، اما این بار کاهش پیش‌زمینه و عملیات خروجی در همان جمله قرار دارند، نتایج به نمایش درآمده است "8". برای اثبات انجام تمامی عملیات کاهشی، کد پنجم دوباره "8" را نمایش می‌دهد.

در جملات ریاضی، اولویت عملگرهای پیشوند و کاهشی یکسان است، بنابراین باید به ترتیب از چپ به راست محاسبه شوند. به عنوان مثال:

var iNum1 = 2;
var iNum2 = 20;
var iNum3 = --iNum1 + ++iNum2;	// برابر با "22"
var iNum4 = iNum1 + iNum2;		// برابر با "22"

در کد قبلی، iNum3 برابر با 22 است، زیرا جملات محاسبه شده باید 1 + 21 باشند. متغیر iNum4 نیز برابر با 22 است، که نیز 1 + 21 است.

عملگرهای پسوند افزایشی/کاهشی

دو عملگر مستقیم از C (و Java) قرض شده‌اند، یعنی عملگرهای افزایشی و کاهشی پس‌زمینه.

عملگر افزایشی پس‌زمینه به数值 1 اضافه می‌کند، به صورت قرار دادن دو خط افقی (++) پس از متغیر است:

var iNum = 10;
iNum++;

مثل انتظار، عملگر کاهشی پس‌زمینه از数值 1 کاهش می‌دهد، به صورت اضافه کردن دو خط افقی (--) به پس از متغیر است:

var iNum = 10;
iNum--;

کد دوم مقدار iNum را به 9 کاهش می‌دهد.

برخلاف عملگرهای پیشوند، عملگرهای پسوند پس از محاسبه جملات شامل آن‌ها، عملیات افزایشی یا کاهشی را انجام می‌دهند. به عنوان مثال:

var iNum = 10;
iNum--;
alert(iNum);	// خروجی "9"
alert(iNum--);	// خروجی "9"
alert(iNum);	// خروجی "8"

مثل مثال‌های عملگرهای پیشوند، کد سوم برای کاهش iNum عمل می‌کند، کد چهارم نتایج را نمایش می‌دهد ("9"). کد چهارم به نمایش ادامه می‌دهد که مقدار iNum است، اما این بار عملگر کاهشی در همان جمله استفاده شده است. زیرا کاهش عملگر پس از محاسبه جملات انجام می‌شود، بنابراین عدد نمایش داده شده "9" است. پس از اجرای کد پنجم، تابع alert "8" را نمایش می‌دهد، زیرا پس از اجرای کد چهارم و قبل از اجرای کد پنجم، کاهش عملگر پس‌زمینه انجام شده است.

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

var iNum1 = 2;
var iNum2 = 20;
var iNum3 = iNum1-- + iNum2++;	// برابر با "22"
var iNum4 = iNum1 + iNum2;		// برابر با "22"

در کد قبلی، iNum3 برابر با 22 است، زیرا محاسبه باید 2 + 20 باشد. متغیر iNum4 نیز برابر با 22 است، اما محاسبه آن 1 + 21 است، زیرا عملگرهای افزایش و کاهش پس از تخصیص به iNum3 انجام می‌شوند.

عملگرهای یک‌گانه افزایش و کاهش

بیشتر مردم با عملگرهای یک‌گانه افزایش و کاهش آشنا هستند، روش استفاده آن‌ها در ECMAScript مشابه روشی است که در ریاضیات دبیرستان یاد گرفته‌اید.

عملگرهای یک‌گانه افزایش به طور اساسی هیچ تأثیری بر اعداد ندارند:

var iNum = 20;
iNum = +iNum;
alert(iNum);	// خروجی "20"

این کد عملگرهای یک‌گانه افزایش را بر عدد 20 اعمال می‌کند و باز هم 20 برمی‌گردد.

با اینکه عملگرهای یک‌گانه افزایش برای اعداد هیچ اثری ندارند، اما برای رشته‌ها اثر جالبی دارند و رشته‌ها را به اعداد تبدیل می‌کنند.

var sNum = "20";
alert(typeof sNum);	// خروجی "string"
var iNum = +sNum;
alert(typeof iNum);	// خروجی "number"

این کد رشته "20" را به عدد واقعی تبدیل می‌کند. هنگامی که عملگرهای یک‌گانه افزایش به رشته‌ها عمل می‌کنند، روش محاسبه آن‌ها مشابه parseInt() است، اما تفاوت اصلی این است که فقط رشته‌هایی که با "0x" شروع می‌شوند (و نشان‌دهنده عددهای شانزده‌ساعتی هستند)، عملگرهای یک‌گانه می‌توانند آن‌ها را به مقدارهای ده‌ساعتی تبدیل کنند. بنابراین، با استفاده از عملگرهای یک‌گانه افزایش "010" همیشه 10 خواهد بود، اما "0xB" به 11 تبدیل خواهد شد.

از سوی دیگر، عملگرهای یک‌گانه کاهش در واقع مقدارهای عددی را منفی می‌کنند (مثلاً 20 را به -20 تبدیل می‌کنند):

var iNum = 20;
iNum = -iNum;
alert(iNum);	// خروجی "-20"

مانند عملگرهای یک‌گانه افزایش، عملگرهای یک‌گانه کاهش نیز رشته‌ها را به عددهای مشابه تبدیل می‌کنند، علاوه بر این مقدار منفی را نیز محاسبه می‌کنند. به عنوان مثال:

var sNum = "20";
alert(typeof sNum);	// خروجی "string"
var iNum = -sNum;
alert(iNum);		// خروجی "-20"
alert(typeof iNum);	// خروجی "number"

در کد بالا، عملگر یک‌گانه کاهش، رشته