Rumah  >  Artikel  >  hujung hadapan web  >  Keunikan JavaScript: Perkara yang Anda Perlu Tahu

Keunikan JavaScript: Perkara yang Anda Perlu Tahu

PHPz
PHPzasal
2024-08-01 09:10:51884semak imbas

JavaScript Quirks: What You Need to Know

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.

1. Jenis Paksaan

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

2. NaN Tidak Sama dengan NaN

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

3. Jenis Operator

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

4. Menambah Tatasusunan

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

5. Aritmetik Titik Terapung

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

6. Operator Berganda Sama (==).

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

7. Skop yang Mengelirukan dengan var

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

8. Objek Global

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)

Kesimpulan

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn