JavaScript: تحويل الأنواع في JavaScript
آخر تحديث: 2026-10-13
تحويل الأنواع هو الجزء الأكثر عرضة للأخطاء في JavaScript. رقم مكتوب في نموذج؟ оказار أنه سلسلة! "5" + 3 يُعطي "53" بدلاً من 8 — كل مبتدئ يصادف هذه "المفاجآت".
1. طرق تحويل الأنواع والمخاطر
قيم input في نماذج HTML هي دائماً سلاسل، حتى مع type="number". يجب تحويل الأنواع قبل القيام بالعمليات الحسابية، وإلا ستكون النتائج غير متوقعة.
<div id="demo"></div>
<script>
const input = "42";
const result = input + 8;
document.getElementById("demo").textContent = 'input + 8 = ' + result + ' (النوع: ' + typeof result + ')';
</script>
(2) التحويل الصريح: String()، Number()، Boolean()
استدعاء وظائف التحويل صراحةً يجعل نيتك واضحة — هذا هو النهج الموصى به:
| التحويل | الصيغة | مثال |
|---|---|---|
| إلى سلسلة | String(value) |
String(123) → "123" |
| إلى رقم | Number(value) |
Number("42") → 42 |
| إلى منطقي | Boolean(value) |
Boolean(0) → false |
(3) التحويل الضمني: ربط الـ + ومقارنة الـ ==
محرك JavaScript ي🦄 تحويل نوع تلقائي غالباً ما يُنتج نتائج غير متوقعة:
- عامل
+: إذا كان أي طرف سلسلة، يتحول الآخر إلى سلسلة للربط - مقارنة
==: تconvert الأنواع قبل المقارنة، بقواعد معقدة يصعب تذكرها
<script>
console.log("5" + 3); // "53" (الرقم 3 تحول إلى سلسلة)
console.log("5" - 3); // 2 (السلسلة "5" تحولت إلى رقم)
console.log("" == 0); // true (السلسلة الفارغة تحولت إلى 0)
console.log(null == undefined); // true
</script>
(4) مشكلات شائعة
هذه مشكلات عالية التكرار في المقابلات والتطوير الحقيقي:
<script>
console.log("5" + 3); // "53" + تربط عندما ترى سلسلة
console.log("5" - 3); // 2 - تقوم فقط بالطرح، تconvert السلسلة إلى رقم
console.log("5" * 3); // 15 * أيضاً تconvert إلى رقم
console.log(true + 1); // 2 true تconvert إلى 1
console.log(false + 1); // 1 false تconvert إلى 0
console.log("" + 0); // "0" الرقم يconvert إلى سلسلة
console.log("" == 0); // true كلا الجانبين يconvertان إلى أرقام
console.log(null == 0); // false null يساوي فقط undefined بشكل فضفاض
console.log("0" == false); // true كلاهما يconvert إلى 0
</script>
تذكر هذه القاعدة: + تربط عندما تصادف سلسلة؛ جميع عوامل الحساب الأخرى convert السلاسل إلى أرقام.
(5) قواعد تحويل Number()
| المدخل | النتيجة |
|---|---|
Number("42") |
42 |
Number("3.14") |
3.14 |
Number("") |
0 (سلسلة فارغة ← 0، مشكلة كلاسيكية) |
Number(" ") |
0 (سلسلة مسافات فقط ← 0) |
Number("42px") |
NaN (تحتوي أحرف غير رقمية ← NaN) |
Number(true) |
1 |
Number(false) |
0 |
Number(null) |
0 |
Number(undefined) |
NaN |
السلسلة الفارغة تconvert إلى 0 بدلاً من NaN — هذا التصميم أوقع العديد من المطورين.
(6) قواعد تحويل Boolean() (القيم Falsy)
هذه الـ 6 قيم convert إلى false وتسمى قيم falsy. كل شيء آخر هو true:
<script>
console.log(Boolean(false)); // false
console.log(Boolean(0)); // false
console.log(Boolean(-0)); // false
console.log(Boolean("")); // false
console.log(Boolean(null)); // false
console.log(Boolean(undefined)); // false
console.log(Boolean(NaN)); // false
</script>
ملاحظة: Boolean("0") هو true، و Boolean([]) هو أيضاً true — السلاسل غير الفارغة والمصفوفات غير الفارغة هي truthy.
(7) === المساواة الصارمة مقابل == المساواة الفضفاضة
| العامل | السلوك | التوصية |
|---|---|---|
=== |
يُرجع false إذا اختلفت الأنواع | استخدم دائماً |
== |
يconvert الأنواع قبل المقارنة | تجنب |
<script>
console.log(5 === "5"); // false (أنواع مختلفة)
console.log(5 == "5"); // true (السلسلة convertت إلى رقم أولاً)
console.log(null === undefined); // false
console.log(null == undefined); // true
</script>
القاعدة الحديدية: استخدم دائماً ===، ولا تستخدم == أبداً. إلا إذا كنت تعرف بالضبط ما تفعله (مثلاً value == null يمكنها مطابقة كل من null و undefined).
▶ مثال: مقارنة تحويل الأنواع
▶ جرّب الكود▶ مثال: مرجع سريع لقيم Boolean() Falsy
▶ جرّب الكود▶ مثال: حساب مدخلات النموذج
▶ جرّب الكود▶ مثال: مقارنة === مقابل ==
▶ جرّب الكود❓ أسئلة شائعة
"5" - 3 يساوي 2 بدلاً من إلقاء خطأ؟- يقوم فقط بالعمليات الحسابية، لذا JavaScript convert السلسلة إلى رقم تلقائياً. فقط عامل + مبهم (يمكن أن يكون جمعاً أو ربطاً)، لذا يربط عندما يرى سلسلة. جميع العوامل الأخرى (-، *، /، %) convert دائماً إلى أرقام.Number("") تُرجع 0 بدلاً من NaN؟Number(input.value) تُرجع 0 للحقول الفارغة بدلاً من NaN، مما قد يضلل المنطق اللاحق. استخدم input.value.trim() === "" للتحقق من القيم الفارغة أولاً.null == 0 هو false؟==، null convert فقط إلى/من undefined — لا convert إلى أرقام. لذا null == 0 هو false، لكن null == undefined هو true. هذه حالة خاصة يحددها المعيار.📖 ملخص
- حوّل السلاسل النصية إلى أرقام بـ
Number()،parseInt()،parseFloat() - حوّل الأرقام إلى سلاسل نصية بـ
String(n)،n.toString()، أوn.toFixed(2) - التحويل الضمني يحدث تلقائياً:
==يحول الأنواع (استخدم===)،+مع السلاسل يصبح دمجاً - مخاطر شائعة:
"5" - 3تساوي 2،"5" + 3تساوي "53"،null == undefinedتساوي true - حوّل إلى Boolean:
!!valueأوBoolean(value)— ست قيم خاطئة:false/0/""/null/undefined/NaN
📝 تمارين
- بدون تشغيل الكود، توقع نتائج هذه التعبيرات:
"10" + 5،"10" - 5،"10" * "2"،true + true،Boolean("false")،"1" == 1،"1" === 1. ثم اكتب كوداً للتحقق. - اكتب دالة
calculateBMI(weight, height)حيث المعاملات تأتي من مدخلات النماذج (سلاسل). يجب أن convert الأنواع داخلياً قبل حساب BMI، وتتعامل مع المدخلات الفارغة أو غير الصالحة (تُرجع رسالة خطأ). - اكتب دالة
strictCompare(a, b)تستخدم فقط===للمقارنة. إذا اختلفت الأنواع، تُرجع مباشرة"أنواع مختلفة، لا يمكن المقارنة"؛ إذا تطابقت الأنواع، تُرجع نتيجة المقارنة.