العمليات الحسابية الواحدة في ECMAScript

العمليات الحسابية المحددة الواحدة تحتوي على معامل واحد فقط، وهو الجسم أو القيمة التي يتم معالجتها. وهي أبسط العمليات الحسابية في ECMAScript.

delete

دالة delete إزالة المراجع إلى خصائص أو طرق الأجسام المحددة مسبقًا. على سبيل المثال:

var o = new Object;
o.name = "David";
alert(o.name);	//إظهار "David"
delete o.name;
alert(o.name);	//يُعرض "undefined"

في هذا المثال، يتم إزالة خاصية name، مما يعني إنهاء الارتباط القوي بها، وتعيينها إلى غير معنى (أي قيمة المتغير غير المُعدٍ).

لا يمكن استخدام عملياتة delete ل�除 أي خاصية أو طريقة لم يتم تعريفها من قبل المطور. على سبيل المثال، سيؤدي الكود التالي إلى خطأ:

delete o.toString;

حتى لو كان اسم method صالحًا، فإن هذا الرمز سيؤدي إلى خطأ، لأن method toString هي طريقة ECMAScript الأصلية، وليست مكتوبة من قبل المطور.

void

يعود عملياتة void إلى غير معنى لأي قيمة. عادة ما يستخدم هذا العملياتة لتجنب إخراج القيم التي لا يجب إخراجها، مثل استدعاء وظيفة 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() يعود بغير معنى، وهو ليس قيمة صالحة، لن يظهر في نافذة المتصفح.

إشارة:تذكر، لا تعود الوظائف التي لا تحتوي على قيمة عائدة بغير معنى.

عمليات تدرج سابقة/تدرج سابقة

تم اقتباس هذين العمليتين من C (و Java) كعمليات تدرج سابقة وتدرج سابقة.

تُعرف العمليات التدرجية السابقة بأنها زيادة القيمة بنقطة واحدة، وتظهر بشكل زوجين مزدوجين قبل المتغير (++)

var iNum = 10;
++iNum;

يزيد رمز السطر الثاني قيمة iNum إلى 11، وهو ما يعادل:

var iNum = 10;
iNum = iNum + 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"

في الكود أعلاه، يتحول عمودي التنحية إلى سلسلة "-20" إلى -20 (يتم التعامل مع عمودي التنحية مع عمودي الاضافة بنفس الطريقة، باستثناء أنه يضيف أيضًا نفي القيمة).