parseInt()‎

من موسوعة حسوب
مراجعة 07:51، 2 يناير 2018 بواسطة عبد اللطيف ايمش (نقاش | مساهمات)
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)

الدالة parseInt()‎ تُفسِّر سلسلةً نصيةً مُمرَّرةً إليها كوسيط وتُعيد عددًا صحيحًا، وتكون القيمة العددية لتلك السلسلة النصية بالأساس العددي المُحدَّد (radix).

البنية العامة

parseInt(string, radix);

string

القيمة التي ستُفسَّر، وإذا لم يكن الوسيط string سلسلةً نصيةً فسيحوَّل إلى واحدة (باستخدام الدالة toString)، وستُهمَل الفراغات في بداية السلسلة ونهايتها.

radix

عدد صحيح بين 2 و 36 الذي يُمثِّل أساس القيمة العددية المحتواة في السلسلة النصية؛ لاستخدام نظام العد العشري (decimal) -شائع الاستخدام بين البشر- فحدِّد القيمة 10؛ حاول تحديد قيمة هذا المعامل دومًا لتجنب الالتباس وتسهيل فهم الدالة على القارئ.

القيمة المعادة

عدد صحيح ناتج عن تفسير السلسلة النصية المعطاة، وإذا لم يكن أوّل حرف في السلسلة النصية قابلًا للتفسير كرقم فستعاد القيمة NaN.

الوصف

الدالة parseInt تحوِّل الوسيط الأول إلى سلسلة نصية ثم تُفسِّرها وتعيد عددًا صحيحًا أو القيمة NaN، وإذا لم تكن القيمة المعادة هي NaN فستكون القيمة المعادة هي العدد الصحيح الموجود في السلسلة النصية المُمرَّرة كأوّل وسيط مع عدّها على أنها في الأساس العددي المُمرِّر كثاني وسيط (radix). فمثلًا إذا كانت قيمة الأساس العددي (radix) هي 10 فهذا يُشير إلى أنَّ العدد الموجود في السلسلة النصية هو عدد في النظام العشري، أما القيمة 8 فهي تمثل عددًا في نظام العد الثماني (octal)، و 16 لنظام العد الست عشري (hexadecimal) وهلم جرًا. لاحظ أنَّ الأحرف الأبجدية ستُشير إلى الأعداد الأكبر من 9 إذا كان أساس نظام العد (radix) أكبر من 10؛ فمثلًا في نظام العد الست عشري (الأساس 16) يمكن استخدام الأحرف A إلى F.

إذا واجهت الدالة parseInt محرفًا ليس له تمثيل رقمي في الأساس العددي المُحدَّد، فسيتجاهله وما بعده ويُعيد القيمة العددية المُفسَّرَة لما قبله؛ لاحظ أنَّ الدالة parseInt لا تُعيد إلا أعدادًا صحيحةً، ويُسمَح بوجود فراغات في بداية ونهاية السلسلة النصية.

ولوجود المحرف e في بعض الأرقام عند تمثيلها على شكل سلسلة نصية (مثل 6.022e23) فاستخدام الدالة parseInt سيؤدي إلى اقتطاع القيم الرقمية وسيؤدي إلى نتائج غير متوقعة عند استخدام الدالة على الأرقام الكبيرة جدًا أو الصغيرة جدًا، فالدالة parseInt لا يجوز أن تستخدم كبديل عن الدالة Math.floor()‎.

إذا كانت قيمة الأساس radix هي undefined أو 0 (أو لم تُحدَّد)، فستفترض JavaScript الآتي:

  • إذا بدأت السلسلة النصية string بالسلسلة النصية 0x أو 0X، فستُعدّ قيمة radix على أنها 16 (أي العدد في نظام العد الست عشري).
  • إذا بدأت السلسلة النصية string بالعدد 0، فيمكن أن تكون قيمة radix هي 8 (نظام العد الثماني) أو 10 (نظام العد العشري)، وقيمة الأساس العددي (radix) المستخدمة تتبع للبرمجية التي تُنفِّذ شيفرة JavaScript؛ لاحظ أنَّ معيار ECMAScript 5 قال أنَّه يجب استخدام نظام العد العشري (10)، لكن هذا لم يُطبَّق بعد في جميع المتصفحات، ولهذا السبب يجب تحديد قيمة الأساس العددي دومًا عند استخدام الدالة parseInt.
  • إذا بدأت السلسلة النصية string بأيّة قيمة أخرى، فسيُعدّ النظام العددي (radix) على أنه 10.

إذا لم تتمكن الدالة parseInt من تحويل أوّل محرف إلى رقم، فستُعاد القيمة NaN.

القيمة NaN لا تُمثِّل رقمًا في أي نظام عددي، فيمكنك استدعاء الدالة isNaN لمعرفة إذا كان ناتج الدالة parseInt هو NaN؛ تذكّر أنَّ قيم NaN عند استخدامها في العمليات الرياضية ستؤدي إلى إعادة كاملة التعبير الرياضي القيمة NaN.

لتحويل قيمةٍ رقميةٍ ما إلى سلسلةٍ نصيةٍ في نظام عدّ مُحدِّد، فاستخدام الدالة intValue.toString(radix)‎.

أمثلة

استخدام parseInt

جميع الأمثلة الآتية ستُعيد القيمة 15:

parseInt(' 0xF', 16);
parseInt(' F', 16);
parseInt('17', 8);
parseInt(021, 8);
parseInt('015', 10);
parseInt(15.99, 10);
parseInt('15,123', 10);
parseInt('FXX123', 16);
parseInt('1111', 2);
parseInt('15 * 3', 10);
parseInt('15e2', 10);
parseInt('15px', 10);
parseInt('12', 13);

أما الأمثلة الآتية فستعيد NaN:

parseInt('Hello', 8); // هذه القيمة ليست رقميةً أبدًا
parseInt('546', 2);   // لا يمكن استخدام الأرقام كلها في نظام العد الثنائي

والأمثلة الآتية ستُعيد القيمة ‎-15:

parseInt('-F', 16);
parseInt('-0F', 16);
parseInt('-0XF', 16);
parseInt(-15.1, 10)
parseInt(' -17', 8);
parseInt(' -15', 10);
parseInt('-1111', 2);
parseInt('-15e1', 10);
parseInt('-12', 13);

هذا ما تحدثنا عنه سابقًا عن تقدير قيم خطأ للأعداد الكبيرة جدًا والصغيرة جدًا، فناتج الأمثلة الآتية كلها هو 4:

parseInt(4.7, 10);
parseInt(4.7 * 1e22, 10); // عدد كبير جدًا
parseInt(0.00000000000434, 10); // عدد صغير جدًا

دالة تفسير تتبع قواعد أكثر صرامة

من المفيد أحيانًا وجود دالة تُفسِّر السلاسل النصية كأرقام صحيحة لكن مع قواعد أكثر صرامةً، ويمكن أن تفيد التعابير النمطية (regular expressions) هنا:

var filterInt = function(value) {
  if (/^(\-|\+)?([0-9]+|Infinity)$/.test(value))
    return Number(value);
  return NaN;
}

console.log(filterInt('421'));               // 421
console.log(filterInt('-421'));              // -421
console.log(filterInt('+421'));              // 421
console.log(filterInt('Infinity'));          // Infinity
console.log(filterInt('421e+0'));            // NaN
console.log(filterInt('421hop'));            // NaN
console.log(filterInt('hop1.61803398875'));  // NaN
console.log(filterInt('1.61803398875'));     // NaN

دعم المتصفحات

الميزة Chrome Firefox Internet Explorer Opera Safari
الدعم الأساسي نعم نعم نعم نعم نعم

مصادر ومواصفات