غالبًا ما تسبب أنواع عدد صحيح (عدد صحيح) بعض المشكلات الغريبة في جافا سكريبت. في مواصفات ECMASCRIPT ، فهي موجودة فقط في المفهوم:
جميع الأرقام هي أرقام نقاط عائمة ، والأعداد الصحيحة ليس لديها مجموعة من الأرقام دون العشرية.
في هذه المدونة ، سأشرح كيفية التحقق مما إذا كانت القيمة عددًا صحيحًا.
ecmascript 5
هناك العديد من الطرق التي يمكنك استخدامها في ES5. في بعض الأحيان ، قد ترغب في استخدام طريقتك الخاصة: وظيفة من isInteger (x) ، والتي تُرجع صحيحًا إذا كانت عددًا صحيحًا ، وإعادة إرجاع خطأ.
دعونا نلقي نظرة على بعض الأمثلة.
تمرير الفحص الباقي
يمكنك استخدام عملية الباقي (٪) وحساب الباقي بمقدار 1 لمعرفة ما إذا كان الباقي هو 0.
وظيفة isInteger (x) {return x ٪ 1 === 0 ؛}أنا أحب هذه الطريقة لأنها بسيطة للغاية وفعالة.
> isinteger (17) true> isinteger (17.13) false
يجب أن تكون حذراً عند تشغيل عمليات الباقي ، لأن النتيجة تعتمد على علامة الرقم الأول. إذا كانت إيجابية ، فإن النتيجة إيجابية ؛ وإلا فهو سلبي.
> 3.5 ٪ 10.5> -3.5 ٪ 1-0.5
بعد ذلك ، يمكننا أيضًا التحقق من 0 ، وهي في الواقع مشكلة. لكن المشكلة هي: ستعود هذه الطريقة أيضًا إلى غير الرقم ، لأن ٪ سوف تقوم بتحويلها إلى رقم:
> isInteger ('') true> isInteger ('33') true> isInteger (false) true> isInteger (true) trueيمكن حلها عن طريق التحقق من النوع البسيط:
وظيفة isInteger (x) {return (typeof x === 'number') && (x ٪ 1 === 0) ؛}بواسطة Math.Round () إذا تم تقريب الرقم ولا يزال لديه نفس القيمة السابقة ، فهو عدد صحيح. في JavaScript ، يمكنك التحقق من ذلك من خلال Math.Round ():
وظيفة isInteger (x) {return Math.Round (x) === x ؛}هذه الطريقة جيدة أيضًا
> isinteger (17) true> isinteger (17.13) false
يمكن أن يحكم أيضًا غير رقمي ، لأن Math.Round () يعيد دائمًا الأرقام ويُرجع === صحيحًا فقط إذا كان النوع هو نفسه.
> isinteger ('') falseإذا كنت ترغب في توضيح الرمز أكثر وضوحًا ، فيمكنك إضافة فحص النوع (وهو ما فعلناه في الإصدار السابق). بالإضافة إلى ذلك ، يمكن لـ Math.Floor () و Math.ceil () العمل مثل Math.Round (). يوفر التحقق من مشغلي البتات من خلال عمليات بت طريقة أخرى لـ "التقريب":
دالة isInteger (x) {return (x | 0) === x ؛}يحتوي هذا الحل (مثل عمليات البت الأخرى) على عيب واحد: لا يمكنه التعامل مع الأرقام التي تتجاوز 32 بت.
> isinteger (Math.Pow (2 ، 32)) false
يوفر التحقق من Parseint () من خلال parseint () أيضًا طريقة مماثلة لـ Math.Round () لتحويل الأرقام إلى أعداد صحيحة. دعونا نرى لماذا هذه الطريقة جيدة.
وظيفة isInteger (x) {return parseint (x ، 10) === x ؛}مثل حل Math.Round () ، يمكنه التعامل مع الحالات غير الرقمية ، ولكنه لا يتعامل أيضًا مع جميع أرقام عدد صحيح بشكل صحيح:
> Isinteger (10000000000000000000000) false
لماذا؟ يجبر Parseint () المعلمة الأولى التي يتم تحليلها في سلسلة قبل تحليل عدد صحيح. لذلك ، فإن استخدام هذه الطريقة لتحويل الأرقام إلى أعداد صحيحة ليس اختيارًا جيدًا.
> Parseint (1000000000000000000000000 ، 10) 1> String (100000000000000000000000) '1e+21'
مثلما أعلاه ، يتوقف Parseint () عن المعالجة عند 1 عند تحليل "1E+21" ، لذلك يعود 1. ECMASCRIPT 6 لـ Math.Round () الإضافة ، يوفر ES6 طريقة أخرى لتحويل الأرقام إلى أعداد صحيحة: Math.trunc (). هذه الوظيفة تزيل الجزء الكسري من الرقم.
> Math.trunc (4.1) 4> Math.trunc (4.9) 4> Math.trunc (-4.1) -4> Math.trunc (-4.9) -4
بالإضافة إلى ذلك ، لا يحتاج ECMASCRIPT6 إلى التعامل مع المهام التافهة التي تحقق من الأعداد الصحيحة ، لأنها تأتي مع رقم وظيفة مدمج. ISINTEGER ().