JavaScript ialah bahasa yang berkuasa dan fleksibel, tetapi ia juga mempunyai beberapa ciri yang boleh mengejutkan walaupun pembangun berpengalaman. Memahami tingkah laku aneh ini boleh membantu anda menulis kod yang lebih mantap dan bebas pepijat. Dalam artikel ini, kami akan meneroka beberapa keanehan yang paling ketara dalam JavaScript.
JavaScript menukar jenis secara automatik dalam situasi tertentu, yang boleh membawa kepada hasil yang tidak dijangka.
console.log(1 + '1'); // '11' - Number 1 is coerced to a string console.log(1 - '1'); // 0 - String '1' is coerced to a number console.log(true + true); // 2 - true is coerced to 1 console.log('' == 0); // true - Empty string is coerced to 0 console.log([] == 0); // true - Empty array is coerced to 0
NaN bermaksud "Bukan-Nombor" dan digunakan untuk mewakili nilai yang bukan nombor yang sah. Menariknya, NaN tidak sama dengan dirinya sendiri.
console.log(NaN === NaN); // false console.log(Number.isNaN(NaN)); // true - Correct way to check for NaN
Jenis pengendali boleh mengembalikan beberapa hasil yang tidak dijangka.
console.log(typeof null); // 'object' - This is a long-standing bug in JavaScript console.log(typeof []); // 'object' - Arrays are technically objects in JavaScript console.log(typeof function(){}); // 'function' - Functions have their own type
Menambah dua tatasusunan bersama-sama boleh menghasilkan hasil yang mengejutkan disebabkan paksaan jenis.
console.log([] + []); // '' - Both arrays are coerced to empty strings console.log([] + {}); // '[object Object]' - Empty array is coerced to empty string, empty object is coerced to string '[object Object]' console.log({} + []); // 0 - Here, {} is interpreted as an empty block
JavaScript menggunakan aritmetik titik terapung, yang boleh membawa kepada isu ketepatan.
console.log(0.1 + 0.2); // 0.30000000000000004 console.log(0.1 + 0.2 === 0.3); // false
Pengendali == melakukan paksaan jenis sebelum perbandingan, yang boleh membawa kepada hasil yang tidak dijangka. Secara amnya, lebih baik menggunakan pengendali kesaksamaan yang ketat (===).
console.log('' == false); // true console.log(0 == false); // true console.log('' == 0); // true console.log(null == undefined); // true
Pembolehubah yang diisytiharkan dengan var adalah skop fungsi, bukan skop blok, yang boleh membawa kepada tingkah laku yang tidak dijangka.
if (true) { var x = 5; } console.log(x); // 5 - x is available outside the block for (var i = 0; i < 3; i++) { setTimeout(() => console.log(i), 1000); } // Output: 3 3 3 - Because var is function-scoped, the same i is referenced
Dalam penyemak imbas, ini merujuk kepada objek tetingkap global dalam mod tidak ketat. Ini boleh menyebabkan beberapa tingkah laku yang mengejutkan.
function foo() { console.log(this); // window (in browser) } foo(); const bar = { method: function() { console.log(this); // bar object } }; bar.method(); const baz = bar.method; baz(); // window (in browser)
JavaScript ialah bahasa yang serba boleh dan berkuasa, tetapi penting untuk mengetahui ciri-ciri dan keistimewaannya. Dengan memahami tingkah laku aneh ini, anda boleh mengelakkan perangkap biasa dan menulis kod yang lebih dipercayai. Teruskan meneroka dan bereksperimen dengan JavaScript untuk memperdalam pemahaman anda tentang ini dan aspek menarik lain dalam bahasa.
Adakah anda tahu ciri-ciri lain dalam Javascript? Tulis dalam komen.
Adakah anda tahu kaedah asas dalam Javascript? Lihat artikel saya di sini untuk mengetahui lebih lanjut!
Atas ialah kandungan terperinci Keunikan JavaScript: Perkara yang Anda Perlu Tahu. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!