اختبار: هل يمكنك الاعتماد على JavaScript؟
هل تعرف الفرق بين parseInt و parseFloat؟
0.1 + 0.2 === 0.3بسبب أخطاء الدقة في النقاط العائمة، فإن 0.1 + 0.2 لا يساوي تمامًا 0.3. نظرًا للطريقة التي تُخزَّن بها الأعداد العشرية العائمة في الذاكرة، تكون النتيجة 0.30000000000000004. معيار IEEE 754 للتعامل مع الحسابات العشرية العائمة هو السبب، فهو لا يستطيع تمثيل بعض الأعداد بدقة. هذه مشكلة شائعة في جميع لغات البرمجة. في النهاية، ستصادف عددًا عشريًا لا نهائيًا، وبغض النظر عن اللغة، يجب على الكمبيوتر ببساطة التوقف عن مطاردة الأرقام اللانهائية.
بعض اللغات مثل Python وJava تحتوي على Decimal أو BigDecimal للتعامل مع هذا، لكنها غير مدمجة في JavaScript. يمكنك استخدام مكتبات مثل big.js أو decimal.js لمعالجة هذه الحالات.
(ملاحظة: بعض اللغات مصممة للتعامل مع الكسور والأعداد التخيلية وما إلى ذلك على مستوى منطقي أعلى، مع الحفاظ على التعبيرات الحرفية. لكنها لا تزال تواجه نفس مشكلات الدقة في النقاط العائمة على مستوى العتاد.)
Number.MAX_VALUE * 2بما أن Number.MAX_VALUE هو أكبر رقم قابل للتمثيل عادي في JavaScript، فإن تجاوز حده سيؤدي إلى فيضان سريع - بشكل أساسي قد ترى نتائج غير ذات معنى. ضربه في 2 ينتج Infinity.
أتعلم، JavaScript هكذا أحيانًا.
parseInt("42") === parseFloat("42")في JavaScript، كل من parseInt و parseFloat سيفسران السلسلة "42" كالرقم 42. لذلك، فإن المقارنة parseInt(\"42\") === parseFloat(\"42\") تُقيّم إلى true. بينما يتوقف parseInt عن التحليل عند أول حرف غير رقمي، يستمر parseFloat في التحليل حتى يواجه حرفًا ليس جزءًا من رقم عشري. ومع ذلك، نظرًا لعدم وجود نقاط عشرية أو أحرف غير رقمية أخرى في "42"، فإن كلا الدالتين تُرجعان نفس القيمة.
[24, 'One', 42].map(parseInt)الوسيط الثاني لـ parseInt (الراديكس) يتوافق مع وسيط index في دوال المصفوفات. يؤدي هذا إلى نتائج غير متوقعة، حيث أن parseInt(\"One\", 1) يُرجع NaN بسبب الإدخال غير الصحيح.
العنصر الأول، 24، يتم تحليله كـ 24 في الأساس 0 (اكتشاف تلقائي)، لذا يبقى 24. العنصر الثاني، 'One'، يتم تحليله كـ NaN في الأساس 1. العنصر الثالث، 42، يتم تحليله باستخدام الأساس 2. في الأساس 2، '42' هو NaN، لذا تكون النتيجة [24, NaN, NaN].
هذا خطأ شائع مع parseInt و map. إذا كنت تريد تحليل مصفوفة من السلاسل إلى أرقام، فإن الطريقة الآمنة الوحيدة “المضمنة” هي .map(Number) أو إضافة رد اتصال/إغلاق .map(x => parseInt(x, 10)).
ما هي نتيجة هذا الكود؟
console.log(parseInt(null), Number(null))parseInt يحول الإدخال إلى سلسلة نصية، لذا يصبح null هو "null". وبما أن "null" لا يحتوي على أرقام صالحة في الأساس 10 (الأرقام العادية)، فإنه سيعيد NaN.
Number(null) يعيد 0. لأن JS تحب أن تبقيك في حالة تأهب.
لماذا؟ حسنًا، قد أتعمق أكثر إذا كان هناك اهتمام.
ما هي نتيجة هذه التعويذة؟
parseInt(null, 36)بما أن parseInt دائمًا يحول الإدخال إلى سلسلة نصية، فإن null يصبح السلسلة "null".
في الأساس 36 (سداسي عشري ثلاثي، إذا كنت تتابع)، السلسلة "null" تمثل 1112745.
القيم المتتالية لـ nulk و null و nulm هي على التوالي 1112744 و 1112745 و 1112746 في الأساس 36.
جدول المقارنة
| الدالة | parseInt | parseFloat | Number | BigInt |
|---|---|---|---|---|
| يتجاهل المسافات البيضاء | ✅ | ✅ | ✅ | ✅ |
.map(FN) | ❌ | ☑️ | ✅ | ✅ |
| يدعم وسيط الأساس (radix) | ✅ | ❌ | ❌ | ❌ |
| الترميز الثنائي/الثماني/السداسي عشري | ✅ | ❌ | ✅ | ✅ |
أحرف غير صالحة 42 oh no | 42 | 42 | NaN | SyntaxError |
كيف كانت نتيجتك؟ 🧐
هل تبحث عن راحة بعد كل هذا الثنائي؟
تفو، تذكر: الاستراحة بعد المهارات!
اضغط على صالتنا الرياضية لتحطيم المزيد من التحديات! 💪