NaN (Not-a-Number) dalam JavaScript sering mengelirukan pembangun. Tetapi sebenarnya, NaN bukanlah outlier mudah, tetapi nilai sentinel , mewakili nombor tidak sah. Ia bukan nombor yang hilang, mahupun sifar, tetapi isyarat yang jelas bahawa ada kesilapan dalam operasi berangka. (Atau, saya tidak tahu, saya bukan orang yang mencipta bahasa itu)
NaN berasal daripada spesifikasi IEEE 754 , yang mentakrifkan cara nombor berfungsi dalam JavaScript. Ia bukan pepijat atau pepijat, ia adalah bahagian bahasa yang disengajakan. Fikirkan NaN sebagai bendera merah yang mengatakan "hei, operasi ini tidak masuk akal matematik".
Contohnya:
<code class="language-javascript">console.log(Math.sqrt(-1)); // NaN</code>
Anda tidak boleh mengira punca kuasa dua nombor negatif (sekurang-kurangnya dalam julat sebenar), jadi JavaScript mengembalikan NaN. Ia seperti bertanya "Apakah warna kebahagiaan?" - ia adalah soalan tanpa jawapan yang bermakna.
Apa yang menjadi pelik ialah NaN ialah satu-satunya nombor dalam JavaScript yang tidak sama dengan dirinya :
<code class="language-javascript">console.log(NaN === NaN); // false</code>
Ini bukan pepijat, tetapi mengikut reka bentuk. Menurut spesifikasi ECMAScript, NaN adalah "tidak tersusun" berbanding dengan nilai lain, termasuk nilainya sendiri. Ini bermakna anda tidak boleh menggunakan ===
untuk menyemak NaN. Anda perlu menggunakan Number.isNaN()
:
<code class="language-javascript">console.log(Number.isNaN(NaN)); // true console.log(Number.isNaN("Hello")); // false</code>
Anehnya, NaN secara teknikal tergolong dalam jenis nombor. Ya, anda membacanya dengan betul. Hasil daripada typeof NaN
ialah "nombor". Ini kerana NaN adalah sebahagian daripada spesifikasi IEEE 754, yang mentakrifkan operasi berangka. Apabila operasi berangka gagal, tidak masuk akal untuk mengembalikan undefined
, null
atau -1
- tiada satu pun daripadanya adalah nombor. Sebaliknya, JavaScript mengembalikan NaN, yang masih merupakan nombor, hanya nombor yang tidak sah.
Andaikan anda sedang membina fungsi untuk mengira purata tatasusunan nombor. Apakah yang berlaku jika tatasusunan mengandungi nilai bukan angka?
<code class="language-javascript">function calculateAverage(arr) { const sum = arr.reduce((acc, val) => acc + val, 0); return sum / arr.length; } console.log(calculateAverage([1, 2, "three", 4])); // NaN</code>
Di sini, rentetan "tiga" tidak boleh ditambah kepada jumlah, jadi hasilnya ialah NaN. Ini adalah contoh yang bagus tentang cara NaN boleh menyelinap ke dalam kod anda dan menyebabkan tingkah laku yang tidak dijangka.
Walaupun terdapat keanehan ini, NaN masih merupakan alat yang berkuasa. Ia satu-satunya nilai pulangan yang bermakna apabila operasi berangka gagal, dan kita perlu belajar cara menggunakan bahasa tersebut.
NaN ialah konsep unik dan penting dalam JavaScript. Ia bukan sekadar nilai, ia adalah isyarat bahawa ada sesuatu yang salah dengan pengiraan anda.
Atas ialah kandungan terperinci JavaScript NaN Quirks: Ciri, Bukan Cacat.. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!