كيفية تحويل سلسلة نصية إلى رقم في TypeScript: أهم الأخطاء وكيفية تجنبها

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة: لماذا تكسر مهمة بسيطة الكود

\n\n

كل مطور يعمل مع TypeScript، عاجلاً أم آجلاً، يواجه مهمة: "كيفية تحويل سلسلة نصية إلى رقم؟". قد يبدو الأمر بسيطاً؟ لكن هذه العملية، التي تبدو تافهة للوهلة الأولى، تصبح مصدراً لعشرات الأخطاء، خاصة عند التقاطع بين الواجهة الأمامية والخلفية، حيث تأتي البيانات من نماذج الإدخال أو API أو تحليل CSV.

\n\n

على Stack Overflow، حصد سؤال "How to convert a string to number in TypeScript?" عشرات الآلاف من المشاهدات. وهذا ليس من قبيل الصدفة. يغرق المطورون في التفاصيل الدقيقة: NaN، parseInt مقابل Number()، فقدان الدقة والسلوك غير المتوقع مع السلاسل الفارغة. في هذه المقالة، سنحلل أهم الأخطاء عند تحويل سلسلة نصية إلى رقم في TypeScript ونوضح كيفية تجنبها. ستتعرف على الطريقة التي يجب اختيارها لمهمة معينة وكيفية كتابة كود موثوق حقاً.

\n\n

الطرق الأساسية لتحويل سلسلة نصية إلى رقم في TypeScript

\n\n

قبل الحديث عن الأخطاء، دعنا نتذكر الأدوات المتاحة لمطور TypeScript. كل منها يتصرف بطريقته الخاصة، واختيار الطريقة الخاطئة هو الخطأ الأول والرئيسي.

\n\n

1. الدالة Number()

\n

الطريقة الأكثر وضوحاً. تحاول Number(value) تحويل القيمة المُمررة إلى رقم. إذا كان ذلك مستحيلاً، تُرجع NaN.

\n\n
const str: string = "42";\nconst num: number = Number(str);\nconsole.log(num); // 42\n\nconst invalid: string = "hello";\nconst badNum: number = Number(invalid);\nconsole.log(badNum); // NaN
\n\n

2. علامة الجمع الأحادية (+)

\n

صيغة مختصرة تفعل نفس ما تفعله Number(). موجزة، لكنها قد تربك المبتدئين.

\n\n
const price: string = "99.99";\nconst numericPrice: number = +price;\nconsole.log(numericPrice); // 99.99\n\nconst empty: string = "";\nconst zero: number = +empty;\nconsole.log(zero); // 0 — انتبه، هذا فخ شائع!
\n\n

3. parseInt() و parseFloat()

\n

دوال متخصصة لتحليل الأعداد الصحيحة والكسرية. هي "تقتطع" الجزء الرقمي من السلسلة، متجاهلة الأحرف التالية.

\n\n
const userInput: string = "123px";\nconst width: number = parseInt(userInput, 10);\nconsole.log(width); // 123 — تم تجاهل الأحرف 'px'\n\nconst height: string = "45.67em";\nconst parsedHeight: number = parseFloat(height);\nconsole.log(parsedHeight); // 45.67
\n\n

4. عوامل البت (~~, | 0)

\n

طريقة غريبة جاءت من JavaScript. تعمل فقط مع الأعداد الصحيحة وتتجاهل الجزء الكسري.

\n\n
const str: string = "7.8";\nconst result: number = ~~str;\nconsole.log(result); // 7 — فقدان الجزء الكسري
\n\n

أهم 5 أخطاء عند تحويل سلسلة نصية إلى رقم في TypeScript

\n\n

الآن بعد أن حللنا الأدوات، دعنا نرى أين يتعثر المطورون في أغلب الأحيان. هذه الأخطاء هي "أشواك" حقيقية يقع فيها حتى المبرمجون ذوو الخبرة.

\n\n

الخطأ رقم 1: تجاهل NaN

\n

الخطأ الأكثر شيوعاً هو عدم التحقق من النتيجة للتأكد من أنها ليست NaN. لن يُصدر TypeScript خطأً إذا استخدمت NaN في العمليات الحسابية أو المقارنات، لكن النتيجة ستكون غير متوقعة.

\n\n
const input: string = "not a number";\nconst value: number = Number(input);\n\n// خطأ: NaN يشارك في العمليات الحسابية\nconst total = value + 10;\nconsole.log(total); // NaN\n\n// المقارنة مع NaN تكون دائماً خاطئة\nif (value === NaN) {\n  console.log("هذا لن يعمل أبداً");\n}
\n\n

كيفية تجنبه: استخدم دائماً isNaN() أو Number.isNaN() للتحقق. الخيار الثاني أفضل، لأنه لا يحول الأنواع غير الرقمية.

\n\n
if (Number.isNaN(value)) {\n  console.error("المدخل ليس رقماً");\n  // يمكن إرجاع قيمة افتراضية أو إظهار خطأ                

المدونات

توصيات الكتب