تحليل مهام WTF في JavaScript


جافا سكريبت هي لغة خاصة. بغض النظر عن مقدار دراستك ، فستكون هناك دائمًا لحظات ستجعل حتى بداية محترفة محرجة تخدش اللفت.


توفر هذه المقالة بعض ألغاز JavaScript المرتبطة بسلوك اللغة غير المعتاد. سيساعدون شخصًا ما على تعلم شيء جديد ، وسيتمكن شخص ما ببساطة من تحديث معارفه.


المهمة 1 - "الموز"



اكتسبت هذه التغريدة في ذلك الوقت بعض الشعبية في قسم Twitter باللغة الإنجليزية المخصص لجافا سكريبت. ليس أقلها لأنه ليس واضحًا على الإطلاق ما يحدث هنا.


قرار

"b" و "a" في البداية هما مجرد سلاسل تضيف إلى "ba". بعد "أ" ترى علامتين زائد (+). الهدف الأول منها هو الإضافة ، لكن الثاني هو عامل أحادي يحول السلسلة التي تليها إلى رقم. نظرًا لأنه لا يمكن تحويل "a" إلى رقم ، يتم تحويله إلى "NaN".


وبالتالي لدينا: "ba" + "NaN" + "a" - "baNaNa". toLowerCase يعطينا غدرا النتيجة النهائية - "الموز".



المهمة 2 - إضافة المصفوفات



هذه مهمة بسيطة ، لكن الشخص الذي لا يعرف كيفية عمل جافا سكريبت ، قد يكون مربكًا.


قرار

أولاً ، يتم تحويل الصفائف إلى سلاسل - "1،2،3" و "4،5،6". ستكون نتيجة تسلسل هذه الأسطر هي الإجابة النهائية - السلسلة "1،2،34،5،6".



المهمة 3 - وظيفة parseInt ()


من بين جميع مهام JavaScript ، كان هذا الأمر الأكثر صعوبة بالنسبة لي.



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


قرار

يتم تحويل الوسيطة الأولى "خالية" إلى سلسلة. يتم تحويل الحرف الأول من هذه السلسلة "n" إلى رقم في نظام الأرقام ذي القاعدة 24. وتكون نتيجة هذا التحويل هي 23.


يستمر parseInt في تحليل حرف السلسلة بحرف حتى يواجه حرفًا لا يمكن تحويله إلى رقم. هذا هو الحرف الثاني للسلسلة - "u" ، لأنه لا يوجد رقم من هذا القبيل في نظام الأرقام ذو القاعدة 24.


بهذه الطريقة:


parseInt(null, 24) === parseInt("null", 24) parseInt("null", 24) === parseInt("n", 24) parseInt("n", 24) === 23 


المهمة 4 - دقة أرقام الفاصلة العائمة



يبدو فظيعًا ، ولكن في الإنصاف ، إلى درجة أو أخرى ، يمكنك العثور على لغة مشابهة بأي لغة تستخدم حسابات الفاصلة العائمة.


قرار
 console.log(0.1 + 0.2); // 0.30000000000000004 

سيتم تقريب الثوابت "0.2" و "0.3" في البرنامج إلى قيمها "الحقيقية" في تمثيل الآلة. وحدث أن يكون أقرب مزدوج إلى "0.2" أكبر من الرقم العقلاني "0.2". من ناحية أخرى ، فإن الأقرب المزدوج إلى "0.3" أقل من "0.3" العقلاني.


وبالتالي ، فإن مجموع "0.1" و "0.2" في الكود أكبر من "0.3" العقلاني ، والثابت "0.3" في الكود أقل من "0.3" العقلاني.


ملاحظة للمضيفة: لا تستخدم أبدًا "===" أو "==" للعمل مع أرقام الفاصلة العائمة. استخدم بدلا من ذلك


 if (abs(x - y) < toleranceValue) { ... } 




استنتاج


نعم ، عند العمل مع JavaScript ، هناك الكثير من لحظات WTF. من ناحية أخرى ، ما هي اللغة الأخرى التي يمكن أن تعطي الكثير من الأحاسيس التي لا تنسى؟


فيما يلي قائمة بالروابط (باللغة الإنجليزية) لدراسة متعمقة للمهام من هذا المنشور (وليس فقط):


Source: https://habr.com/ru/post/ar479496/


All Articles