JavaScript: الأرقام والرياضيات في جافاسكريبت
آخر تحديث: 2026-10-13
في جافاسكريبت، يوجد نوع رقم واحد فقط: Number. سواء كان عددًا صحيحًا أو عشريًا، هو بالكامل Number. هذا مختلف عن لغات مثل Java أو C التي تميز بين int وfloat وما إلى ذلك. أبسط، نعم — لكن يأتي مع بضعة مفاجآت.
1. نوع Number
في جافاسكريبت، كلا الأعداد الصحيحة والأعداد العشرية الم floating point هما من نوع Number — لا يوجد نوع عدد صحيح منفصل.
<script>
let a = 42; // هذا Number
let b = 3.14; // هذا أيضًا Number
typeof a; // "number"
typeof b; // "number"
</script>
يمكن كتابة الأرقام أيضًا بعدة صيغ أخرى:
<script>
let hex = 0xFF; // سداسي عشري، يساوي 255
let octal = 0o10; // ثماني، يساوي 8
let binary = 0b1010; // ثنائي، يساوي 10
let big = 1e6; // ترميز علمي، يساوي 1000000
</script>
NaN يعني "ليس رقمًا"، لكنه من نوع Number — واحدة من أكثر خيارات التصميم الساخرة في جافاسكريبت.
<script>
typeof NaN; // "number" ← نعم، إنه فعلًا رقم
NaN === NaN; // false ← ليس حتى مساويًا لنفسه!
Number.isNaN(NaN); // true ← استخدم هذا الأسلوب للتحقق من NaN
</script>
متى يظهر NaN؟ عندما تحاول القيام بعملية رياضية بشيء ليس رقمًا:
<script>
parseInt('abc'); // NaN
'hello' * 5; // NaN
Math.sqrt(-1); // NaN
</script>
Infinity يمثل اللانهاية الموجبة ويظهر عند القسمة على صفر:
<script>
1 / 0; // Infinity
-1 / 0; // -Infinity
typeof Infinity; // "number"
</script>
=== أبدًا — استخدم Number.isNaN(). بما أن NaN === NaN هو false، هذا فخ وقع فيه عدد لا يحصى من المطورين.
2. دقة الأرقام الم floating point
هذا هو أغرب ما في جافاسكريبت: 0.1 + 0.2 !== 0.3.
<script>
0.1 + 0.2; // 0.30000000000000004
0.1 + 0.2 === 0.3; // false
</script>
السبب يتعلق بكيفية تخزين الأرقام الم floating point في نظام ثنائي بواسطة الحواسيب. القيمة 0.1 هي كسر متكرر في نظام ثنائي، مما يؤدي إلى فقدان الدقة أثناء التخزين. هذا ليس مقصورًا على جافاسكريبت — جميع اللغات التي تستخدم معيار IEEE 754 لديها هذه المشكلة.
الحل: استخدم toFixed() للتنسيق، أو قم بالتكبير قبل الحساب:
<script>
(0.1 + 0.2).toFixed(2); // "0.30"
(0.1 * 100 + 0.2 * 100) / 100; // 0.3
</script>
▶ مثال: عرض مشاكل الدقة
▶ جرّب الكود3. كائن Math
Math هو أداة الرياضيات المدمجة في جافاسكريبت. لا حاجة للإنشاء — فقط استدعِ أساليبه مباشرة:
| الأسلوب/الخاصية | الغرض | مثال |
|---|---|---|
Math.round() |
تقريب إلى أقرب عدد صحيح | Math.round(4.6) → 5 |
Math.floor() |
تقريب للأسفل | Math.floor(4.9) → 4 |
Math.ceil() |
تقريب للأعلى | Math.ceil(4.1) → 5 |
Math.random() |
رقم عشوائي 0–1 | Math.random() → 0.3721... |
Math.max() |
القيمة القصوى | Math.max(1,5,3) → 5 |
Math.min() |
القيمة الدنيا | Math.min(1,5,3) → 1 |
Math.PI |
باي | 3.141592653589793 |
Math.abs() |
القيمة المطلقة | Math.abs(-7) → 7 |
Math.pow() |
أس | Math.pow(2,3) → 8 |
Math.sqrt() |
الجذر التربيعي | Math.sqrt(16) → 4 |
▶ مثال: أساليب Math الشائعة
▶ جرّب الكودMath.round(-1.5) يُرجع -1، وليس -2. سلوك التقريب عند الحدود السالبة قد لا يتطابق مع حدسك — ضع ذلك في اعتبارك.
4. toFixed() — تنسيق الأرقام العشرية
toFixed(n) يُنسّق رقمًا إلى n خانات عشرية ويعيد نصًا:
<script>
let price = 9.9;
price.toFixed(2); // "9.90" ← ملاحظة: يُرجع نصًا
+(9.9).toFixed(2); // 9.9 ← استخدم + للتحويل مرة أخرى إلى رقم
</script>
toFixed يُرجع نصًا! إذا كنت بحاجة لإجراء مزيد من العمليات الحسابية، تذكر تحويله مرة أخرى إلى رقم.
5. toString() — تحويل القاعدة
أسلوب الرقم toString(radix) يحول رقمًا إلى نص بالقاعدة المحددة:
<script>
(255).toString(16); // "ff" سداسي عشري
(255).toString(2); // "11111111" ثنائي
(255).toString(8); // "377" ثماني
(100).toString(); // "100" عشري (افتراضي)
</script>
▶ مثال: تحويل القاعدة
▶ جرّب الكود6. Math.random() — إنشاء أرقام عشوائية
Math.random() يُرجع رقمًا عشريًا عشوائيًا بين 0 (شامل) و1 (غير شامل). في الممارسة، غالبًا ما تحتاج عددًا صحيحًا عشوائيًا ضمن نطاق محدد:
<script>
// إنشاء عدد صحيح عشوائي بين min و max (شامل)
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
</script>
▶ مثال: عرض الأرقام العشوائية
▶ جرّب الكودMath.random() يُنتج أرقام pseudo-random وغير مناسب لأغراض التشفير. للعشوائية الآمنة cryptographically، استخدم crypto.getRandomValues().
❓ أسئلة شائعة
Math.round(2.5) وMath.round(-2.5) على التوالي؟Math.round(2.5) هو 3، وMath.round(-2.5) هو -2. عندما يكون العشري بالضبط .5، يقرب جافاسكريبت نحو اللانهاية الموجبة —🦄 كلا الأعداد الموجبة والسالبة تقرب للأعلى (أقرب إلى 0).Number.isFinite(value). يستثني NaN وInfinity و-Infinity، كما يرفض الأنواع غير الرقمية. isFinite() العالمي يعمل أيضًا لكنه لا يتحقق من النوع (يُجري الإكراه أولاً).📖 ملخص
- جافاسكريبت لديها نوع
Numberواحد فقط — كلا الأعداد الصحيحة وال عشرية هما Number NaNلا يساوي أي قيمة (بما في ذلك نفسه); استخدمNumber.isNaN()للكشف عنه0.1 + 0.2 !== 0.3هي مشكلة دقة; أصلحها بـtoFixed()أو بالتكبير والتصغيرMath.floorيقرب للأسفل،Math.ceilيقرب للأعلى،Math.roundيقرب إلى أقرب عدد صحيح- معادلة عدد صحيح عشوائي:
Math.floor(Math.random() * (max - min + 1)) + min toFixed()يُرجع نصًا — تحويله مرة أخرى إلى رقم إذا كنت بحاجة لإجراء مزيد من العمليات الحسابية
📝 تمارين
- اكتب برنامجًا يأخذ نصف قطر دائرة كمدخل، يحسب مساحتها ومحيطها، ويعرض النتائج مقربة إلى خانتين عشريتين.
- اكتب لعبة تخمين أرقام: يُنشئ البرنامج عددًا صحيحًا عشوائيًا بين 1 و100، يُدخل المستخدم تخمينات، ويستجيب البرنامج بـ "مرتفع جدًا" أو "منخفض جدًا" حتى يُعثر على الإجابة الصحيحة.
- اكتب محوّل قواعد: أدخل رقمًا عشريًا واعرض في نفس الوقت ما يعادله ثنائيًا وثمانيًا وسداسي عشريًا.