parseInt()
الدالة 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 |
---|---|---|---|---|---|
الدعم الأساسي | نعم | نعم | نعم | نعم | نعم |
مصادر ومواصفات
- مسودة المعيار ECMAScript Latest Draft.
- معيار ECMAScript 2015 (6th Edition).
- معيار ECMAScript 5.1.
- معيار ECMAScript 1st Edition .