JavaScript, bahasa yang kita suka (atau suka membenci), dipenuhi dengan gelagat unik dan keanehan yang menjadikannya hebat dan membingungkan. Walaupun "bahagian aneh" ini boleh mengelirukan pemula, menguasainya adalah penting untuk menjadi pembangun yang mahir. Mari kita selami beberapa keanehan JavaScript yang menarik yang setiap pembangun harus tahu.
JavaScript cuba membantu dengan menukar nilai antara jenis, tetapi "kebergunaan" ini boleh membawa kepada hasil yang mengejutkan.
Contoh: Matematik Tidak Dijangka
console.log('5' - 3); // 2 console.log('5' + 3); // '53'
Tingkah laku ini dalam JavaScript sering mengelirukan kerana ia berubah bergantung pada bagaimana fungsi dipanggil.
Contoh: Konteks Berbeza
function showThis() { console.log(this); } showThis(); // Window or undefined in strict mode const obj = { method: showThis }; obj.method(); // obj const boundFunc = showThis.bind(obj); boundFunc(); // obj
JavaScript adalah satu benang tetapi boleh mengendalikan tugas tak segerak melalui gelung acara.
Contoh: Apa Yang Dimulakan?
console.log('Start'); setTimeout(() => console.log('Timeout'), 0); Promise.resolve().then(() => console.log('Promise')); console.log('End');
Output
Start End Promise Timeout
Memahami gelung acara adalah kunci untuk menulis kod tak segerak berprestasi.
Penutupan ialah apabila fungsi "mengingat" skop leksikalnya walaupun selepas fungsi luar telah kembali.
Contoh: Pembolehubah Peribadi
function counter() { let count = 0; return function () { count++; console.log(count); }; } const increment = counter(); increment(); // 1 increment(); // 2
Penutupan membolehkan anda membuat pembolehubah peribadi dan mengekalkan keadaan merentas panggilan fungsi.
JavaScript menggunakan warisan berasaskan prototaip, bermakna objek boleh mewarisi sifat dan kaedah daripada objek lain.
Contoh: Kaedah Tersuai
console.log('5' - 3); // 2 console.log('5' + 3); // '53'
Prototaip membolehkan anda berkongsi kaedah merentas kejadian dengan cekap.
JavaScript menyediakan kedua-dua kesamaan longgar (==) dan kesamaan ketat (===), dan mereka berkelakuan berbeza.
Contoh: Kes Pelik Null dan Undefined
function showThis() { console.log(this); } showThis(); // Window or undefined in strict mode const obj = { method: showThis }; obj.method(); // obj const boundFunc = showThis.bind(obj); boundFunc(); // obj
Sentiasa gunakan === melainkan anda memerlukan penukaran jenis secara eksplisit.
Elakkan membandingkan nilai bukan primitif secara langsung ({} !== {}).
JavaScript memperlakukan objek dan tatasusunan sebagai jenis rujukan, bermakna perubahan pada rujukan mempengaruhi asal.
Contoh: Menyalin Perangkap
console.log('Start'); setTimeout(() => console.log('Timeout'), 0); Promise.resolve().then(() => console.log('Promise')); console.log('End');
NaN bermaksud "Bukan Nombor", tetapi tingkah lakunya tidak jelas.
Contoh: Membandingkan NaN
Start End Promise Timeout
Gunakan Object.is apabila anda memerlukan kesetaraan yang ketat untuk kes khas seperti NaN.
Hoisting mengalihkan pembolehubah dan pengisytiharan fungsi ke bahagian atas skopnya.
Contoh: Pembolehubah Mengangkat
function counter() { let count = 0; return function () { count++; console.log(count); }; } const increment = counter(); increment(); // 1 increment(); // 2
Gunakan let dan const untuk mengelakkan kekeliruan angkat berubah-ubah.
Parameter lalai menjadikan fungsi lebih fleksibel tetapi boleh berkelakuan aneh apabila digabungkan dengan undefined.
Contoh: Lalai dan Argumen
function Person(name) { this.name = name; } Person.prototype.greet = function () { console.log(`Hello, my name is ${this.name}`); }; const alice = new Person('Alice'); alice.greet(); // Hello, my name is Alice
Parameter lalai hanya digunakan jika hujah tidak ditentukan, bukan batal.
Keanehan JavaScript menjadikannya mengecewakan dan menyeronokkan. Memahami gelagat ini bukan sahaja menjadikan anda pembangun yang lebih baik tetapi juga membantu anda menghargai fleksibiliti bahasa dan pilihan reka bentuk.
Manakah antara kebiasaan ini yang pernah anda temui, dan bagaimana anda mengatasinya? Kongsi pendapat anda dalam komen di bawah!
Atas ialah kandungan terperinci Menyahkod Bahagian Pelik JavaScript Setiap Pembangun Patut Tahu. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!