


JavaScript ialah bahasa yang kita semua suka, bukan? Ia fleksibel, ringan dan berjalan di mana-mana. Tetapi untuk semua kehebatannya, katakan secara jujur, ia boleh menjadi pelik. Jenis pelik yang membuat anda mempersoalkan kewarasan anda selepas melihat sesuatu yang tidak sepatutnya berfungsi.
Dalam artikel ini, kami akan meninjau beberapa kelemahan dalam JavaScript - tingkah laku yang mengejutkan anda apabila anda tidak menjangkakannya. Nasib baik, terdapat seorang kesatria dalam perisai bersinar untuk pembangun yang dipanggil TypeScript. Kami menunjukkan kepada anda di sini bagaimana ia boleh menyelamatkan anda daripada merobek rambut anda dengan menjadikan keanehan JavaScript tersebut agak lebih terurus.
1. Yang Hebat == vs === Debat
JavaScript memberi kita dua rasa kesaksamaan: == atau kesaksamaan longgar dan === atau kesaksamaan yang ketat.
console.log(0 == '0'); // true console.log(0 === '0'); // false
Tunggu, apa? Ya, JavaScript membuat 0 dan '0' dianggap sama dengan ==, tetapi tidak dengan ===. Ini kerana == melakukan paksaan menaip, atau menukar jenis, sebelum melakukan perbandingan. Ia cuba membantu, menjadikan rentetan itu menjadi nombor untuk anda—tetapi bantuan ini membawa kepada pepijat.
Bayangkan menggunakan == pada input pengguna untuk menyemak nombor. Anda mungkin menjadi benar apabila jenisnya tidak sama yang membawa kepada tingkah laku yang tidak dijangka yang sukar untuk dikesan. Mengapa perkara ini penting? Kerana jenis paksaan JavaScript sering berfungsi sehingga ia memecahkan sesuatu yang penting.
Bagaimana TypeScript Membantu
TypeScript sudah pun menguatkuasakan keselamatan jenis di luar kotak. Jika anda membandingkan dua perkara daripada jenis yang berbeza, ia akan menjerit lama sebelum anda boleh menjalankan sebarang kod:
let a: number = 0; let b: string = '0'; console.log(a === b); // TypeScript Error: This comparison is invalid
Sebarang kejutan hilang membandingkan nombor dengan rentetan. TypeScript memastikan anda sentiasa membandingkan epal dan epal atau dalam kes ini nombor dengan nombor.
2. The Mysterious undefined vs null
Kedua-dua undefined dan null bercakap tiada apa-apa, tetapi dengan cara yang berbeza secara halus. undefined ialah perkara yang diberikan oleh JavaScript kepada pembolehubah yang belum dimulakan, manakala null digunakan apabila anda sengaja mahu memberikan nilai kosong. Mereka berbeza, namun cukup serupa untuk mengelirukan.
let foo; console.log(foo); // undefined let bar = null; console.log(bar); // null
Melainkan anda berhati-hati, anda mungkin akhirnya menyemak satu tetapi tidak yang lain, yang mengakibatkan beberapa pepijat yang mengelirukan.
if (foo == null) { console.log("This catches both undefined and null"); }
Ini berfungsi tetapi boleh membawa kepada pepijat halus jika anda tidak membezakan dengan jelas antara keduanya.
Bagaimana TypeScript Membantu
TypeScript menggalakkan anda untuk menyatakan dengan jelas dan tepat sama ada sesuatu boleh menjadi batal atau tidak ditentukan. Ia melakukan ini dengan membuat anda mengendalikan kedua-dua kes secara eksplisit, jadi anda pasti tentang perkara yang berlaku:
let foo: number | undefined; let bar: number | null = null; // TypeScript will enforce these constraints foo = null; // Error bar = 5; // No problem!
Dengan TypeScript, anda memutuskan jenis yang dibenarkan supaya anda tidak mencampurkan jenis secara tidak sengaja. Ketegasan jenis ini melindungi anda daripada pepijat yang anda terlupa untuk menyemak sama ada batal atau tidak ditentukan.
3. Kes Penasaran NaN (Bukan Nombor)
Pernahkah anda terserempak dengan NaN yang digeruni? Ia adalah singkatan untuk Not-a-Number, dan ia muncul apabila anda cuba melakukan operasi matematik yang tidak masuk akal.
console.log(0 / 0); // NaN console.log("abc" - 5); // NaN
Inilah hasil tangkapannya: NaN sebenarnya daripada jenis nombor. Betul, Bukan-Nombor ialah nombor!
console.log(typeof NaN); // "number"
Ini boleh membawa kepada beberapa hasil yang benar-benar pelik jika anda tidak menyemak NaN secara eksplisit. Lebih buruk lagi, NaN tidak pernah sama dengan dirinya sendiri, jadi anda tidak boleh membandingkannya dengan mudah untuk memeriksa sama ada ia wujud.
console.log(NaN === NaN); // false
Bagaimana TypeScript Membantu
TypeScript boleh mengurangkan isu ini dengan menguatkuasakan pemeriksaan jenis yang betul dan menangkap operasi yang tidak baik pada masa penyusunan. Jika TypeScript boleh menyimpulkan bahawa operasi akan mengembalikan NaN, ia boleh menimbulkan ralat sebelum kod anda berjalan.
let result: number = 0 / 0; // Warning: Possible 'NaN'
TypeScript juga boleh membantu anda mengecilkan masa dan tempat NaN mungkin muncul, menggalakkan pengendalian nilai berangka yang lebih baik.
4. The Wild ini
ini dalam JavaScript ialah salah satu konsep yang paling berkuasa tetapi mudah disalah fahami. Nilai ini bergantung sepenuhnya pada bagaimana fungsi dipanggil, yang boleh membawa kepada tingkah laku yang tidak diingini dalam konteks tertentu.
const person = { name: 'Alice', greet() { console.log('Hello, ' + this.name); } }; setTimeout(person.greet, 1000); // Uh-oh, what happened here?
Apa yang anda jangkakan ialah melihat "Hello, Alice" dicetak selepas satu saat, tetapi sebaliknya, anda akan mendapat Hello, undefined. kenapa? Kerana setTimeout dalam ini merujuk kepada objek global, bukan objek orang.
Bagaimana TypeScript Membantu
TypeScript boleh membantu anda mengelakkan jenis isu ini dengan menggunakan fungsi anak panah yang tidak mempunyai ini sendiri dan mengekalkan konteks objek yang berada di dalamnya.
const person = { name: 'Alice', greet: () => { console.log('Hello, ' + person.name); // Always refers to 'person' } }; setTimeout(person.greet, 1000); // No more surprises!
Tiada lagi tingkah laku ini yang tidak dijangka. TypeScript memaksa anda berfikir tentang konteks dan membantu anda mengikat ini dengan betul, mengurangkan risiko pepijat pelik yang tidak ditentukan.
5. Function Hoisting: When Order Does Not Matter
JavaScript functions are hoisted to the top of the scope; that means you can invoke them even before you have declared them in your code. This is kind of a cool trick, but can also be confusing if you are not paying attention to what's going on.
greet(); function greet() { console.log('Hello!'); }
While this can be convenient, it can also cause confusion, especially when you're trying to debug your code.
This works just fine, because of function declaration hoisting. But it can make your code harder to follow, especially for other developers (or yourself after a few months away from the project).
How TypeScript Helps
TypeScript does not change how hoisting works but it gives you clearer feedback about your code's structure. If you accidentally called a function before it is defined, TypeScript will let you know immediately.
greet(); // Error: 'greet' is used before it’s defined function greet() { console.log('Hello!'); }
TypeScript forces you to do some cleanup, where your functions are declared before they are used. It makes your code much more maintainable this way.
Wrapping It Up
JavaScript is an amazing language, but it can certainly be quirky at times. By using TypeScript, you can tame some of JavaScript’s weirdest behaviors and make your code safer, more reliable, and easier to maintain. Whether you’re working with null and undefined, taming this, or preventing NaN disasters, TypeScript gives you the tools to avoid the headaches that can arise from JavaScript’s flexible—but sometimes unpredictable—nature.
So next time you find yourself puzzling over a strange JavaScript quirk, remember: TypeScript is here to help!
Happy coding!
Atas ialah kandungan terperinci Twist Seronok JavaScript dan Cara TypeScript Menjadikannya Lebih Baik. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

JavaScript adalah bahasa utama pembangunan web moden dan digunakan secara meluas untuk kepelbagaian dan fleksibiliti. 1) Pembangunan front-end: Membina laman web dinamik dan aplikasi satu halaman melalui operasi DOM dan kerangka moden (seperti React, Vue.js, sudut). 2) Pembangunan sisi pelayan: Node.js menggunakan model I/O yang tidak menyekat untuk mengendalikan aplikasi konkurensi tinggi dan masa nyata. 3) Pembangunan aplikasi mudah alih dan desktop: Pembangunan silang platform direalisasikan melalui reaktnatif dan elektron untuk meningkatkan kecekapan pembangunan.

Trend terkini dalam JavaScript termasuk kebangkitan TypeScript, populariti kerangka dan perpustakaan moden, dan penerapan webassembly. Prospek masa depan meliputi sistem jenis yang lebih berkuasa, pembangunan JavaScript, pengembangan kecerdasan buatan dan pembelajaran mesin, dan potensi pengkomputeran IoT dan kelebihan.

JavaScript adalah asas kepada pembangunan web moden, dan fungsi utamanya termasuk pengaturcaraan yang didorong oleh peristiwa, penjanaan kandungan dinamik dan pengaturcaraan tak segerak. 1) Pengaturcaraan yang didorong oleh peristiwa membolehkan laman web berubah secara dinamik mengikut operasi pengguna. 2) Penjanaan kandungan dinamik membolehkan kandungan halaman diselaraskan mengikut syarat. 3) Pengaturcaraan Asynchronous memastikan bahawa antara muka pengguna tidak disekat. JavaScript digunakan secara meluas dalam interaksi web, aplikasi satu halaman dan pembangunan sisi pelayan, sangat meningkatkan fleksibiliti pengalaman pengguna dan pembangunan silang platform.

Python lebih sesuai untuk sains data dan pembelajaran mesin, manakala JavaScript lebih sesuai untuk pembangunan front-end dan penuh. 1. Python terkenal dengan sintaks ringkas dan ekosistem perpustakaan yang kaya, dan sesuai untuk analisis data dan pembangunan web. 2. JavaScript adalah teras pembangunan front-end. Node.js menyokong pengaturcaraan sisi pelayan dan sesuai untuk pembangunan stack penuh.

JavaScript tidak memerlukan pemasangan kerana ia sudah dibina dalam pelayar moden. Anda hanya memerlukan editor teks dan penyemak imbas untuk memulakan. 1) Dalam persekitaran penyemak imbas, jalankan dengan memasukkan fail HTML melalui tag. 2) Dalam persekitaran Node.js, selepas memuat turun dan memasang node.js, jalankan fail JavaScript melalui baris arahan.

Cara Menghantar Pemberitahuan Tugas di Quartz terlebih dahulu Apabila menggunakan pemasa kuarza untuk menjadualkan tugas, masa pelaksanaan tugas ditetapkan oleh ekspresi cron. Sekarang ...

Cara mendapatkan parameter fungsi pada rantaian prototaip dalam JavaScript dalam pengaturcaraan JavaScript, pemahaman dan memanipulasi parameter fungsi pada rantaian prototaip adalah tugas yang biasa dan penting ...

Analisis sebab mengapa kegagalan anjakan gaya dinamik menggunakan vue.js dalam pandangan web applet weChat menggunakan vue.js ...


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

VSCode Windows 64-bit Muat Turun
Editor IDE percuma dan berkuasa yang dilancarkan oleh Microsoft

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

SecLists
SecLists ialah rakan penguji keselamatan muktamad. Ia ialah koleksi pelbagai jenis senarai yang kerap digunakan semasa penilaian keselamatan, semuanya di satu tempat. SecLists membantu menjadikan ujian keselamatan lebih cekap dan produktif dengan menyediakan semua senarai yang mungkin diperlukan oleh penguji keselamatan dengan mudah. Jenis senarai termasuk nama pengguna, kata laluan, URL, muatan kabur, corak data sensitif, cangkerang web dan banyak lagi. Penguji hanya boleh menarik repositori ini ke mesin ujian baharu dan dia akan mempunyai akses kepada setiap jenis senarai yang dia perlukan.

SublimeText3 versi Inggeris
Disyorkan: Versi Win, menyokong gesaan kod!

Dreamweaver CS6
Alat pembangunan web visual