NaN, singkatan dari Not a Number, adalah salah satu output dari data di ECMAscript dan turunanna (i.e. JavaScript) yang keluar kalau kita melakukan operasi yang menghasilkan output non angka (i.e. ngebagi 1 dengan 0, ngebagi angka dengan string, modulus ke string) Cara mengatasi NaN:
Saya hanya mencobanya di konsol JavaScript Firefox, tetapi tidak satu pun dari pernyataan berikut yang menghasilkan true:
Jawaban: Saya baru saja menemukan teknik ini dalam buku JavaScript Efektif yang cukup sederhana: Karena NaN adalah satu-satunya nilai JavaScript yang diperlakukan sebagai tidak sama dengan dirinya sendiri, Anda selalu dapat menguji apakah suatu nilai adalah NaN dengan mengeceknya untuk persamaan dengan dirinya sendiri:
Tidak menyadarinya sampai @allsyed berkomentar, tetapi ini ada dalam spesifikasi ECMA: https://tc39.github.io/ecma262/#sec-isnan-number Gunakan kode ini:
Lihat
Sejauh nilai tipe Number harus diuji apakah itu a
Untuk pendekatan generik yang bekerja untuk semua jenis di JS, kita bisa menggunakan salah satu dari yang berikut: Untuk Pengguna ECMAScript-5:
Untuk orang yang menggunakan ECMAScript-6:
Dan Untuk tujuan konsistensi di ECMAScript 5 & 6 keduanya, kita juga dapat menggunakan polyfill ini untuk Number.isNan
silakan periksa Jawaban Ini untuk lebih jelasnya. NaN adalah nilai khusus yang tidak dapat diuji seperti itu. Suatu hal yang menarik yang ingin saya bagikan adalah ini
Ini mengembalikan nilai true hanya untuk nilai-nilai NaN dan Merupakan cara aman untuk pengujian. Harus jelas dibungkus dalam suatu fungsi atau minimal berkomentar, karena itu tidak masuk akal jelas untuk menguji apakah variabel yang sama tidak sama satu sama lain, hehe. Anda harus menggunakan
Contoh:
Saya harap ini akan membantu Anda. Pada ES6 ,
Untuk memperbaiki masalah di mana Jadi daripada ini:
Melakukan hal ini:
EDIT: Saya baru saja melihat masalah lain dari ini ... nilai-nilai salah (dan benar sebagai boolean nyata)
Dan itu tampaknya mencakup segalanya. Saya
membandingkannya pada 90% lebih lambat dari pada Lodash http://jsperf.com/own-isnan-vs-underscore-lodash-isnan Untuk lebih jelasnya, saya menangani interpretasi literal manusia dari sesuatu yang "Bukan Angka" dan lodash mengurus interpretasi literal komputer untuk memeriksa apakah ada sesuatu yang "NaN". Meskipun jawaban @ chiborg benar, ada hal lain yang harus diperhatikan:
Intinya, jika Anda menggunakan metode ini untuk validasi input, hasilnya akan agak liberal. Jadi, ya Anda dapat menggunakan Solusi Sederhana!BENAR-BENAR super sederhana! Sini! Dapatkan metode ini!
Gunakan sesederhana:
Contoh:
Ada beberapa jalur alternatif yang Anda ambil untuk implementasi, jika Anda tidak ingin menggunakan metode berganti nama, dan ingin memastikan itu lebih tersedia secara global. Peringatan Solusi ini melibatkan pengubahan objek asli, dan mungkin bukan solusi terbaik Anda. Selalu gunakan hati-hati dan sadar bahwa Perpustakaan lain yang mungkin Anda gunakan mungkin bergantung pada kode asli atau perubahan serupa. Implementasi Alternatif 1: Ganti isNaNmetode Asli .
Implementasi Alternatif 2: Tambahkan ke Objek Nomor * Disarankan karena juga merupakan poly-fill untuk ECMA 5 hingga 6
Tes solusi alternatif jika kosong Metode jendela sederhana yang saya tulis tes itu jika objek kosong . Ini sedikit berbeda karena tidak memberikan jika item "persis" NaN , tapi saya pikir saya akan membuang ini karena mungkin juga berguna ketika mencari barang kosong.
Contoh:Periksa Sangat Dalam, Apakah KosongYang terakhir ini berjalan agak dalam, bahkan memeriksa apakah suatu Obyek penuh dengan Objek kosong. Saya yakin itu memiliki ruang untuk perbaikan dan kemungkinan lubang, tetapi sejauh ini, tampaknya menangkap sebagian besar segalanya. Saya hanya ingin berbagi alternatif lain, ini belum tentu lebih baik daripada yang lain di sini, tapi saya pikir itu layak untuk dilihat:
Logika di balik ini adalah bahwa setiap angka kecuali Saya telah melakukan tes cepat, dan kinerjanya sebagus Hasil
Semoga bermanfaat jika Anda ingin menghindari NaN dalam JavaScript adalah singkatan dari "Not A Number", meskipun jenisnya sebenarnya adalah angka.
Untuk memeriksa apakah suatu variabel bernilai NaN, kita tidak bisa hanya menggunakan fungsi isNaN (), karena isNaN () memiliki masalah berikut, lihat di bawah:
Apa yang sebenarnya terjadi di sini adalah bahwa myVar secara implisit dipaksa ke nomor:
Ini sebenarnya masuk akal, karena "A" sebenarnya bukan angka. Tapi yang ingin kita periksa adalah apakah myVar benar-benar bernilai NaN. Jadi isNaN () tidak dapat membantu. Lalu apa yang harus kita lakukan? Mengingat NaN adalah satu-satunya nilai JavaScript yang diperlakukan tidak setara dengan dirinya sendiri, jadi kami dapat memeriksa kesetaraannya dengan menggunakan sendiri! ==
Jadi untuk menyimpulkan , jika benar bahwa variabel! == itu sendiri, maka variabel ini persis bernilai NaN:
Saya
menggunakan fungsi garis bawah
Paling tidak, waspadai gotcha itu. Mungkin juga ini:
Tampaknya isNaN () tidak didukung di Node.js di luar kotak.
Lihatlah Dokumentasi Mozilla Properti NaN global adalah nilai yang mewakili Not-A-Numbe Cara terbaik adalah menggunakan 'isNaN ()' yang merupakan fungsi buit-in untuk memeriksa NaN. Semua browser mendukung cara .. Aturannya adalah:
Masalah fungsi isNaN () adalah bahwa ia dapat mengembalikan hasil yang tidak terduga dalam beberapa kasus:
Cara yang lebih baik untuk memeriksa apakah nilainya benar-benar NaN adalah:
Menurut IEEE 754, semua hubungan yang melibatkan NaN dievaluasi sebagai false kecuali! =. Jadi, misalnya, (A> = B) = false dan (A <= B) = false jika A atau B atau keduanya adalah / adalah NaN. Saya menulis jawaban ini untuk pertanyaan lain tentang StackOverflow di mana orang lain memeriksa kapan Lihatlah
Jaringan Pengembang Mozilla tentang Jawaban singkatCukup gunakan Jawaban panjangNaN (Not-a-Number) adalah Benda Global aneh di javascript yang sering dikembalikan ketika beberapa operasi matematika gagal. Anda ingin memeriksa apakah Cara sederhana untuk mengetahui apakah variabel adalah Yang lain adalah Tetapi mengapa jawaban singkatnya berhasil?Ayo cari tahu. Ketika Anda memanggil Di suatu tempat di spesifikasi JavaScript memiliki catatan dengan nilai selalu salah, yang meliputi:
Solusi lain disebutkan di halaman parseFloat MDN Ini menyediakan fungsi filter untuk melakukan parsing ketat
Dan kemudian Anda dapat menggunakannya Cara yang tepat untuk memeriksa adalah:
Saya telah membuat fungsi kecil ini yang berfungsi seperti pesona. Alih-alih memeriksa NaN yang tampaknya kontra intuitif, Anda memeriksa nomor. Saya cukup yakin saya bukan yang pertama melakukannya dengan cara ini, tetapi saya pikir saya akan berbagi.
Menemukan cara lain, hanya untuk bersenang-senang.
Jawaban markyzm bekerja dengan baik, tetapi tidak mengembalikan false karena saya datang dengan
UPDATE: saya perhatikan bahwa kode ini gagal untuk beberapa parameter, jadi saya membuatnya lebih baik.
Ini tidak elegan. tetapi setelah mencoba isNAN () saya sampai pada solusi ini yang merupakan alternatif lain. Dalam contoh ini saya juga mengizinkan '.' karena saya menutupi float. Anda juga bisa membalikkan ini untuk memastikan tidak ada angka yang digunakan.
Ini adalah evaluasi karakter tunggal tetapi Anda juga dapat mengulangi string untuk memeriksa angka apa pun. Anda dapat memeriksa NaN menggunakan fungsi javascript isNaN. Hanya meneruskan angka atau nilai ke fungsi isNaN
Cukup konversikan hasilnya ke String dan bandingkan dengan 'NaN'.
Apakah (NaN> = 0) ? ...... " Saya tidak tahu ".
Kondisi hanya dijalankan jika BENAR . Bukan pada SALAH . Bukan pada " Aku Tidak Tahu ". |