"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيف يمكنني تجنب مشكلات التفسير الثماني لـ parseInt في JavaScript؟

كيف يمكنني تجنب مشكلات التفسير الثماني لـ parseInt في JavaScript؟

تم النشر بتاريخ 2024-12-22
تصفح:976

How Can I Avoid parseInt's Octal Interpretation Issues in JavaScript?

الخطر الثماني لجافا سكريبت: الحلول البديلة لسوء سلوك parseInt

يمكن أن تتعثر وظيفة parseInt في JavaScript عند مواجهة أرقام ذات أصفار بادئة. تنبع المشكلة من ميلها إلى تفسير الأصفار البادئة على أنها أرقام ثماني، مما يؤدي إلى نتائج خاطئة.

مثال:

parseInt('01'); // 1
parseInt('08'); // 0 (invalid octal digit)

الحلول:

  • حدد القاعدة (الجذر)
الحل الأكثر وضوحًا هو توفير قاعدة الرقم أو الجذر بشكل صريح. يمكن القيام بذلك باستخدام المعلمة الثانية لـ parseInt:

parseInt('08', 10); // 8 (تحديد الأساس 10)
parseInt('08', 10); // 8 (specifying base 10)
  • بدلاً من ذلك، يمكن استخدام مُنشئ الأرقام لتحليل الأرقام، بما في ذلك تلك التي لها الأصفار البادئة:
Number('08'); // 8

parseInt('08', 10); // 8 (specifying base 10)
التحويل إلى الأساس 10 سلسلة
  • هناك طريقة أخرى تتمثل في تحويل السلسلة إلى الأساس 10 قبل تحليلها:
  • parseInt(parseInt('08', 8).toString(), 10); // 8 (تحويل الرقم الثماني إلى الأساس 10)

استخدم التعبير العادي
parseInt('08', 10); // 8 (specifying base 10)
  • يمكن استخدام التعبيرات العادية لإزالة الأصفار البادئة: parseInt(/^0 (.*)$/gm('008')); // 8 (مطابقة والتقاط الأرقام غير الصفرية)

ملاحظة:

parseInt(/^0 (.*)$/gm('008')); // 8 (match and capture non-zero digits)
في الإصدار الخامس من JavaScript (ECMA-262)، تغير سلوك parseInt، مما أدى إلى إزالة مسألة التفسير الثماني. ومع ذلك، من أجل التوافق مع الإصدارات الأقدم من JavaScript، يوصى باستخدام أحد الحلول البديلة المذكورة أعلاه عند مواجهة أرقام ذات أصفار بادئة.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3