JavaScript هي لغة برمجة متسامحة جدًا مع الأخطاء، والعديد من التعبيرات غير القانونية في لغات البرمجة الأخرى ستعمل بشكل جيد في JavaScript.
وهذا يؤدي إلى الكثير من التعليمات البرمجية الغريبة. هل تريد تحديها؟
في هذا التحدي، سيتم تقديم 20 تعبيرًا غريبًا وسيُطلب منك تخمين نتائجها.
1.
صحيح + خطأ
2.
**1.**
3.
[1, 2, 3] + [4, 5, 6]
4.
0.2 + 0.1 === 0.3
5.
10,2
6.
!!""
7.
+!![]
8.صحيح
== "صحيح"
9.010
- 03
10.
"" - - ""
11.null
+ 0
12.0
/0
13.1
/0 === 10 ** 1000
14.
true++
15.
"" - 1
16.
(خالية - 1) - "1"
17.
38 * 4343 * 2342+ ("صحيح" — 0)
18.
5 + !5 + !!5
19.
[] + [1] + 2
20.
1 + 2 + "3"
صحيح + خطأ
عند محاولة استخدام عامل الجمع (+) بين قيمتين منطقيتين، يتم تحويلهما إلى أرقام.
ونعلم جميعًا true
إلى 1
و false
إلى 0
. لذا تُرجع true+false
1
.
[,,,].length
[,,,]
يُخرج مصفوفة بثلاث فتحات فارغة. الفاصلة الأخيرة هي الفاصلة الزائدة.
يمكنك التفكير في الأمر بهذه الطريقة.
[,] ==> [فارغة،] [،،] ==> [فارغ، فارغ،] [،،،] ==> [فارغ، فارغ، فارغ،]
لذا فإن [,,,].length
يُرجع 3.
[1, 2, 3] + [4, 5, 6]
عند محاولة استخدام عامل الإضافة (+) بين المصفوفات، يتم تحويلها إلى سلاسل.
عند تحويل مصفوفة إلى سلسلة، يتم استدعاء أسلوب toString()
الخاص بالمصفوفة. يتم استخدام طريقة toString()
داخليًا بواسطة JavaScript. عندما يلزم عرض مصفوفة كنص، فإنها ستربط عناصرها بفواصل.
[1, 2, 3].toString() ==> '1, 2, 3' [4, 5, 6].toString() ==> '4, 5, 6'
لذا
[1, 2, 3] + [4, 5, 6] ==> '1, 2, 3' + '4 , 5, 6' ==> "1,2,34,5,6"
0.2 + 0.1 === 0.3
نظرًا لصعوبة تمثيل أرقام الفاصلة العائمة بدقة في أجهزة الكمبيوتر، لا يمكن تقريب 0.1
و 0.2
رياضيًا إلا في أجهزة الكمبيوتر الرقمية التمثيل.
نتيجة 0.1+0.2
ليست بالضبط 0.3
. ليس فقط جافا سكريبت، فلغات البرمجة الأخرى لديها نفس المشكلة.
10، 2
الفاصلة ( ,
) هي أيضًا عامل قانوني في JavaScript، حيث تقوم بتقييم كل معامل (من اليسار إلى اليمين) وإرجاع قيمة المعامل الأخير.
لذلك، 10,2 تُرجع 2
!!""
""
عبارة عن سلسلة فارغة، وهي قيمة وهمية.
ملاحظة: 0، السلسلة الفارغة ""، فارغة وغير محددة كلها قيم افتراضية.
!
هو عامل التشغيل المنطقي "not"، حيث يتحول من صحيح إلى خطأ والعكس صحيح.
إذا استخدمنا !
مرتين، فستحول القيمة العادية إلى قيمة !!
. لذا !""
ترجع false
.
+!![]
المصفوفات كلها قيم حقيقية، حتى المصفوفات الفارغة. لذا !![]
سيعود true
.
!![]; // -> صحيح
وتحول العلامة +
القيمة الحقيقية إلى تمثيلها الرقمي: 1
، لذلك يُرجع +!![]
1
.
true == "true"
يتحقق عامل المساواة (==) مما إذا كان المعاملان الخاصان به متساويين ويعيد نتيجة منطقية.
وفقا لقواعد مقارنة المساواة المجردة، يتم تحويل كلا القيمتين إلى أرقام عند المقارنة.
true == "true" ==> Number(true) == Number("true") ==> 1 == NaN
لذا، ture =="true"
يُرجع false.
010 - 03
إليك خدعة صغيرة: إذا كان الرقم يبدأ بـ 0
، فسيتم التعامل معه كرقم ثماني في JavaScript. إذن:
010 - 03 ==> 8 - 3 ==> 5
أيضًا:
""--""
يبدو هذا وكأنه بناء جملة سيئ، لكنه يعمل بشكل جيد.
يمكن تحويل السلسلة الفارغة إلى القيمة المنطقية false أو القيمة الرقمية 0. إذن -""
يساوي 0
null + 0
كما قلنا من قبل، null
هي قيمة افتراضية. سيتم تحويلها إلى القيمة المنطقية false
أو القيمة الرقمية 0
. وبالتالي فإن النتيجة ترجع 0
.
0/0
هذا تعبير رياضي غير قانوني. المعادلة 0/0 لا تحتوي على أي إجابة عددية ذات معنى، فالنتيجة هي NaN
فقط.
1/0 === 10 1000**
على الرغم من أن 1/0
تعبير رياضي غير قانوني كما كان من قبل. ولكن عندما لا يكون المقسوم عليه 0
، تعتقد JavaScript أن نتيجة هذا التعبير هي Infinity
.
و 10**1000
رقم كبير، ولا يمكن لـ JS تمثيل هذا الرقم بشكل صحيح. (أعلى قيمة عددية في JavaScript هي 2^53-1
). لذا فإن 10 * 1000
تعتبر أيضًا ما لا نهاية.
اللانهاية تساوي دائمًا ما لا نهاية أخرى، لذا فإن 1/0 === 10 ** 1000
يُرجع صحيحًا.
صحيح++،
لا يوجد شيء مميز في هذا، إنه مجرد خطأ في بناء الجملة.
""- 1بينما
يعمل عامل الجمع (+) على كل من الأرقام والسلاسل، فإن عامل الطرح (-) ليس مفيدًا على السلاسل، لذلك يفسره JavaScript على أنه عملية بين الأرقام. سيتم فرض سلسلة فارغة على 0.
"" - 1 ==> Number("") - 1 ==> 0 - 1 ==> -1
لذلك "" — 1
يُرجع -1
(خالية - 1) - "1"
كما هو مذكور أعلاه.
فارغة ==> 0 (خالية - 1) ==> -1 "1" ==> 1
so (null — 1) — “1”
تُرجع -2
38 4343 2342+ ("true" - 0)
قد تشك في أن JS مجنون جدًا لدرجة أنه يحول السلسلة إلى "صحيح" هل هي قيمة رقمية تمثيل القيمة المنطقية صحيح. ومع ذلك، فإنه ليس هذا الجنون. ما يحدث في الواقع هو أنه يحاول تحويل السلسلة إلى رقم، لكنه يفشل.
Number("true"); // -> NaN
في العمليات الرقمية لجافا سكريبت، طالما أن إحدى القيم هي NaN، يجب أن تكون النتيجة النهائية للعملية NaN. 38 * 4343 * 2342
مجرد ستار من الدخان.
5 + !5 + !!5
كما هو مذكور أعلاه.
لذا:
!5 ==> 0 !!5 ==> 1
[] + [1] + 2
عند محاولة استخدام عامل الإضافة (+) بين المصفوفات، يتم تحويلها إلى سلاسل.
[] ==> '' [1] ==> '1' [] + [1] ==> '1' '1' + 2 ==> '12'
وبالتالي تكون النتيجة '12'.
1 + 2 + "3"
تقوم JavaScript بتنفيذ هذه العمليات من اليسار إلى اليمين. عند إضافة الرقم 3 إلى السلسلة 3، ستكون الأولوية لتسلسل السلسلة.
1 + 2؛ // -> 3 3 + "3"; // -> "33"
بصراحة، هذه التحديات لا تقدم أي قيمة لمهاراتنا في البرمجة، لذلك لا ينبغي كتابة هذا النوع من التعليمات البرمجية في مشاريع حقيقية
، ومع ذلك، اعتبر هذه المهارات أصدقاء أليس من المثير للاهتمام أن تتظاهر بأنك في الثالثة عشر من عمرك مع زملائك؟
المؤلف: مارينا موستي
المصدر: متوسط
النص الأصلي: https://medium.com/frontend-canteen/20-useless-but-funny-challange-for-javascript-develor-9eea39bb8efb
[توصيات دروس الفيديو ذات الصلة: واجهة الويب الأمامية]
ما سبق هو 20 تعبيرًا غريبًا عن JS ، تخمين نتيجة الإخراج! لمزيد من التفاصيل، يرجى الانتباه إلى المقالات الأخرى ذات الصلة على موقع php الصيني!