Parsing Tugas WTF dalam JavaScript


JavaScript adalah bahasa khusus. Tidak peduli berapa banyak Anda mempelajarinya, akan selalu ada saat-saat yang akan membuat bahkan seorang profesional berpengalaman mulai menggaruk lobak.


Artikel ini menyediakan beberapa teka-teki JavaScript terkait perilaku bahasa yang tidak biasa. Mereka akan membantu seseorang mempelajari sesuatu yang baru, dan seseorang hanya akan dapat menyegarkan pengetahuan mereka.


Tugas 1 - "BANANA"



Tweet ini pada saat itu telah mendapatkan popularitas di segmen Twitter berbahasa Inggris yang didedikasikan untuk JavaScript. Paling tidak karena sama sekali tidak jelas apa yang terjadi di sini.


Solusi

Huruf "b" dan "a" di awal hanyalah string yang menambahkan "ba". Setelah "a" Anda melihat dua tanda tambah (+). Yang pertama dari mereka dimaksudkan untuk penambahan, tetapi yang kedua adalah operator unary yang mengubah string yang mengikutinya menjadi angka. Karena "a" kedua tidak dapat dikonversi ke angka, maka dikonversi ke "NaN".


Jadi kita memiliki: "ba" + "NaN" + "a" - "baNaNa". toLowerCase secara diam-diam memberi kami hasil akhir - "pisang".



Tugas 2 - Menambahkan Array



Ini adalah tugas yang sederhana, tetapi seseorang yang tidak terbiasa dengan cara kerja JavaScript, itu bisa membingungkan.


Solusi

Pertama, array dikonversi menjadi string - "1,2,3" dan "4,5,6". Hasil gabungan dari baris-baris ini akan menjadi jawaban akhir - string "1,2,34,5,6".



Tugas 3 - fungsi parseInt ()


Dari semua tugas JavaScript, ini adalah yang paling sulit bagi saya.



Jika mungkin semuanya dijumpai dengan parseInt dalam JavaScript dengan satu atau lain cara, maka lebih sedikit orang yang tahu tentang keberadaan parameter opsional kedua "radix". Ini adalah dasar dari sistem angka argumen pertama.


Solusi

Argumen pertama "null" dikonversi ke string. Karakter pertama dari string ini "n" dikonversi ke angka dalam sistem angka dengan basis 24. Hasil konversi ini adalah 23.


parseInt terus mengurai karakter string demi karakter hingga menemukan karakter yang tidak dapat dikonversi ke angka. Ini adalah karakter kedua dari string - ā€œuā€, karena tidak ada digit dalam sistem angka dengan basis 24.


Dengan cara ini:


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


Tugas 4 - angka floating point presisi



Kelihatannya mengerikan, tetapi dalam keadilan, sampai taraf tertentu, Anda bisa menemukan yang serupa dalam bahasa apa pun yang menggunakan perhitungan titik-mengambang.


Solusi
 console.log(0.1 + 0.2); // 0.30000000000000004 

Konstanta "0,2" dan "0,3" dalam program akan diperkirakan dengan nilai "nyata" dalam representasi mesin. Dan kebetulan bahwa double terdekat ke "0,2" lebih besar dari angka rasional "0,2". Di sisi lain, double terdekat dengan "0,3" kurang dari rasional "0,3".


Dengan demikian, jumlah "0,1" dan "0,2" dalam kode lebih besar dari rasional "0,3", dan konstanta "0,3" dalam kode kurang dari rasional "0,3".


Catatan untuk nyonya rumah: jangan pernah gunakan "===" atau "==" untuk bekerja dengan angka floating-point. Gunakan sebagai gantinya


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




Kesimpulan


Ya, ketika bekerja dengan JavaScript, ada banyak momen WTF. Di sisi lain, bahasa lain apa yang bisa memberi begitu banyak sensasi tak terlupakan?


Di bawah ini adalah daftar tautan (dalam bahasa Inggris) untuk studi mendalam tentang tugas-tugas dari pos ini (dan tidak hanya):


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


All Articles