المعاملات الرياضية في JavaScript
المعاملات الرياضية (arithmetic operators) تأخذ قيمًا عدديةً وتُعيد قيمةً عدديةً واحدةً، والمعاملات الرياضية القياسية هي الجمع +
والطرح -
والضرب *
والقسمة /
.
الجمع (+
)
معامل الجمع يُنتِج مجموع المدخلات الرقمية، أو يضيف سلسلتين نصيتين إلى بعضها.
البنية العامة
x + y
أمثلة
// رقم + رقم -> عملية جمع
1 + 2 // 3
// رقم + قيمة منطقية -> عملية جمع
true + 1 // 2
// قيمة منطقية + قيمة منطقية -> عملية جمع
false + false // 0
// رقم + سلسلة نصية -> عملية إضافة
5 + 'foo' // "5foo"
// سلسلة نصية + قيمة منطقية -> عملية إضافة
'foo' + false // "foofalse"
// سلسلة نصية + سلسلة نصية -> عملية إضافة
'foo' + 'bar' // "foobar"
الطرح (-
)
معامل الطرح يجري عملية الطرح بين قيمتين ويعطي الفرق بينهما.
البنية العامة
x - y
أمثلة
5 - 3 // 2
3 - 5 // -2
'foo' - 3 // NaN
القسمة (/
)
معامل القسمة يُقسِّم القيمة الموجودة على يسار المعامل (المقسوم) على القيمة الموجودة على يمين المعامل (المقسوم عليه).
البنية العامة
x / y
أمثلة
1 / 2 // 0.5
1.0 / 2.0 // 0.5
2.0 / 0 // Infinity
2.0 / 0.0 // Infinity
2.0 / -0.0 // -Infinity
الضرب (*
)
معامل الضرب يعيد ناتج ضرب القيمتين العدديتين.
البنية العامة
x * y
أمثلة
2 * 2 // 4
-2 * 2 // -4
Infinity * 0 // NaN
Infinity * Infinity // Infinity
'foo' * 2 // NaN
باقي القسمة (%
)
معامل باقي القسمة يُعيد باقي القسمة عند تقسيم قيمة على قيمة أخرى، وسيأخذ إشارة المقسوم دومًا، وليس المقسوم عليه.
البنية العامة
x % y
أمثلة
12 % 5 // 2
-1 % 2 // -1
NaN % 2 // NaN
1 % 2 // 1
2 % 3 // 2
-4 % 2 // -0
5.5 % 2 // 1.5
قوة العدد (**
)
المعامل الأُسي يُعيد ناتج رفع القيمة الأولى (الأساس) إلى القيمة الثانية (الأس)، ويُعبَّر عنها رياضيًا كالآتي xy
، لاحظ أنَّ تنفيذ المعامل الأسي يكون من اليمين إلى اليسار، أي a ** b ** c
تكافئ a ** (b ** c)
.
لاحظ أنَّ أغلبية لغات البرمجة مثل PHP و Python وغيرهما تملك المعامل **، لكن يكون له أولوية على المعاملات الأحادية (unary operators) مثل المعامل الأحادي +
والمعامل الأحادي -
، لكن هنالك بعض الاستثناءات؛ فمثلًا في Bash يكون للمعامل **
أولوية أقل من المعاملات الأحادية؛ أما في JavaScript من غير الممكن كتابة تعبير فيه معامل أحادي (أي +/-/~/!/delete/void/typeof
) قبل قيمة أساس المعامل الأُسي.
-2 ** 2;
// 4 Bash, -4 in other languages.
// لكن التعبير السابق غير صالحة في JavaScript
-(2 ** 2); // -4
البنية العامة
x ** y
أمثلة
2 ** 3 // 8
3 ** 2 // 9
3 ** 2.5 // 15.588457268119896
10 ** -1 // 0.1
NaN ** 2 // NaN
2 ** 3 ** 2 // 512
2 ** (3 ** 2) // 512
(2 ** 3) ** 2 // 64
استخدام معامل التجميع لقلب إشارة ناتج العملية:
-(2 ** 2) // -4
ولجهل قيمة أساس العملية سالبةً، فسنستخدم الشكل:
(-2) ** 2 // 4
ملاحظة: يوجد في JavaScript معامل ثنائي هو ^
(أي logical XOR)، والمعاملان **
و ^
مختلفان عن بعضهما تمامًا (مثلًا: 2 ** 3 === 8
بينما 2 ^ 3 === 1
).
الزيادة (++
)
معامل الزيادة يؤدي إلى زيادة القيمة (بمقدار 1) ويعيد القيمة الناتجة.
- إذا كان معامل الزيادة بعد القيمة (أي مثلًا
x++
) فستُعاد القيمة قبل إجراء عملية الزيادة. - إذا كان معامل الزيادة بعد القيمة (أي مثلًا
++x
) فستُعاد القيمة بعد إجراء عملية الزيادة.
البنية العامة
x++
++x
أمثلة
// المعامل بعد القيمة
var x = 3;
y = x++; // y = 3, x = 4
// المعامل قبل القيمة
var a = 2;
b = ++a; // a = 3, b = 3
الإنقاص (--
)
معامل الإنقاص يؤدي إلى إنقاص القيمة (بمقدار 1) ويعيد القيمة الناتجة.
- إذا كان معامل الإنقاص بعد القيمة (أي مثلًا
x--
) فستُعاد القيمة قبل إجراء عملية الإنقاص. - إذا كان معامل الإنقاص بعد القيمة (أي مثلًا
--x
) فستُعاد القيمة بعد إجراء عملية الإنقاص.
البنية العامة
x--
--x
أمثلة
// المعامل بعد القيمة
var x = 3;
y = x--; // y = 3, x = 2
// المعامل قبل القيمة
var a = 2;
b = --a; // a = 1, b = 1
إشارة الزائد (+
)
معامل الزائد الأحادي (unary plus operator) يسبق القيمة ويحاول تحويلها إلى رقم إن لم تكن قيمةً رقميةً، وصحيحٌ أنَّ معامل الناقص الأحادي (-) يمكنه تحويل القيم غير الرقمية إلى رقمية، لكن من المفضَّل استخدام معامل الزائد الأحادي لأنه الطريقة المثلى تحويل قيمة ما إلى رقم لأنه لا يجري أيّة عمليات على الرقم؛ ويمكنه تحويل الأعداد الصيحية والعشرية الموجودة في سلاسل نصية إلى أرقام، إضافةً إلى القيم غير النصية مثل true
و false
و null
؛ ويدعم تحويل الأعداد في نظام العد العشري والست عشري (الأرقام التي يسبقها 0x
)، ويدعم أيضًا الأعداد السالبة (على أن لا تكون بنظام العد الست عشري)، وإذا لم يتمكن هذا المعامل من تفسير قيمة ما فسيحوِّلها إلى NaN
.
البنية العامة
+x
أمثلة
+3 // 3
+'3' // 3
+true // 1
+false // 0
+null // 0
+function(val){ return val } // NaN
إشارة الناقص (-
)
معامل الناقص الأحادي (unary negation operator) يسبق قيمةً ما ويحولها إلى قيمة عددية (كما هو مذكور في القسم السابق) ويعكس إشارتها.
البنية العامة
-x
أمثلة
var x = 3;
y = -x; // y = -3, x = 3
var x = "4";
y = -x; // y = -4
دعم المتصفحات
الميزة | Chrome | Firefox | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
الدعم الأساسي | نعم | نعم | نعم | نعم | نعم |
قوة العدد | 52 | 52 | غير مدعومة | نعم | ؟ |
مصادر ومواصفات
- مسودة المعيار ECMAScript Latest Draft.
- معيار ECMAScript 2017.
- معيار ECMAScript 2016. أضاف هذا المعيار المعامل الأسي.
- معيار ECMAScript 2015 (6th Edition).
- معيار ECMAScript 5.1.
- معيار ECMAScript 1st Edition .