Saya hanya mencobanya di konsol JavaScript Firefox, tetapi tidak satu pun dari pernyataan berikut yang menghasilkan true:
parseFloat('geoff') == NaN;
parseFloat('geoff') == Number.NaN;
javascript
nan
Paul D. Waite
sumber
sumber
Jawaban:
Coba kode ini:
Untuk memeriksa apakah ada nilai NaN, bukan hanya angka, lihat di sini: Bagaimana Anda menguji NaN dalam Javascript?
sumber
NaN
, maka ya. (Saya tidak mengatakan Anda akan selalu melakukannya.)isNaN(parseFloat("geoff")) // true
isNaN(parseFloat("10geo")) // false
Bagaimana ini berguna?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
sumber
Gunakan kode ini:
Lihat
isNaN()
dokumen di MDN .sumber
var value = 0/0;
danvar value2= String("123 131");
membuat nilai NaN dan sesuatu seperti inivar value3 = "abcd";
juga merupakan nilai NaN.Sejauh nilai tipe Number harus diuji apakah itu a
NaN
atau tidak, fungsi globalisNaN
akan melakukan pekerjaan ituUntuk 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.
sumber
isNaN
mengubah argumen ke nilai angka terlebih dahulu.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.
sumber
Anda harus menggunakan
isNaN(value)
panggilan fungsi global , karena:Contoh:
Saya harap ini akan membantu Anda.
sumber
isNaN('') //false
tapiparseInt('') //NaN
. Hal yang sama dapat dikatakan untuknull
.Pada ES6 ,
Object.is(..)
adalah utilitas baru yang dapat digunakan untuk menguji dua nilai untuk kesetaraan absolut:sumber
Untuk memperbaiki masalah di mana
'1.2geoff'
menjadi diuraikan, cukup gunakanNumber()
pengurai.Jadi daripada ini:
Melakukan hal ini:
EDIT: Saya baru saja melihat masalah lain dari ini ... nilai-nilai salah (dan benar sebagai boolean nyata)
Number()
dikembalikan sebagai0
! Dalam hal ini ... parseFloat berfungsi setiap saat sebagai gantinya. Jadi kembali ke itu:Dan itu tampaknya mencakup segalanya. Saya membandingkannya pada 90% lebih lambat dari pada Lodash
_.isNaN
tetapi kemudian yang satu tidak mencakup semua NaN: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".
sumber
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
parseFloat(string)
(atau dalam kasus angka penuhparseInt(string, radix)
'dan kemudian membungkusnya denganisNaN()
, tetapi berhati-hatilah dengan gotcha dengan angka yang terkait dengan karakter non-numerik tambahan.sumber
parseFloat('test1.2')
akan kembaliNaN
.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
isNaN
metode 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:
Tampilkan cuplikan kode
Periksa Sangat Dalam, Apakah Kosong
Yang 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.
Tampilkan cuplikan kode
sumber
isNaN
TIDAK dapat diandalkan. Saya dikomentari di sana dan diberi tahu bahwa pertanyaan ini akan lebih sesuai dengan jawaban saya, sehingga memindahkannya ke sini. Cukup dengan meletakkan sesuatu yang bermanfaat / bermanfaat di luar sana dalam kaitannya dengan masalah ini yang akan muncul pada pencarian Google dari masalah yang adais it NaN?
,. Di samping catatan, jawaban saya akan lebih akurat daripada jawaban yang dipilih.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
0
danNaN
dilemparkan ketrue
.Saya telah melakukan tes cepat, dan kinerjanya sebagus
Number.isNaN
dan memeriksa dirinya sendiri untuk salah. Ketiganya berkinerja lebih baik daripadaisNan
Hasil
Semoga bermanfaat jika Anda ingin menghindari
isNaN
fungsi yang rusak .sumber
Jika lingkungan Anda mendukung ECMAScript 2015 , maka Anda mungkin ingin menggunakan
Number.isNaN
untuk memastikan bahwa nilainya benar-benarNaN
.Masalahnya
isNaN
adalah, jika Anda menggunakannya dengan data non-numerik ada beberapa aturan yang membingungkan (sesuai MDN) diterapkan. Sebagai contoh,Jadi, di lingkungan yang didukung ECMA Script 2015, Anda mungkin ingin menggunakannya
sumber
isNaN
dapat membuat Anda dalam masalah dan ingat untuk menggunakanNumber.isNaN
dalam lingkungan ECMAScript 2015 :-)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:
sumber
Saya menggunakan fungsi garis bawah
isNaN
karena dalam JavaScript:Paling tidak, waspadai gotcha itu.
sumber
undefined
perilaku yang salah? Benarkah ituundefined
bukan angka, bukan?undefined
mungkin sesuatu yang berbeda dariNaN
, namun masih bukan angka jadiisNaN(undefined)
seharusnya (dan sekarang)true
Mungkin juga ini:
sumber
Tampaknya isNaN () tidak didukung di Node.js di luar kotak.
Saya bekerja dengan
sumber
sumber
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 ..
sumber
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:
sumber
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.
sumber
Saya menulis jawaban ini untuk pertanyaan lain tentang StackOverflow di mana orang lain memeriksa kapan
NaN == null
tapi kemudian ditandai sebagai duplikat jadi saya tidak ingin menyia-nyiakan pekerjaan saya.Lihatlah Jaringan Pengembang Mozilla tentang
NaN
.Jawaban singkat
Cukup gunakan
distance || 0
ketika Anda ingin memastikan nilai Anda adalah angka yang tepat atauisNaN()
untuk memeriksanya.Jawaban panjang
NaN (Not-a-Number) adalah Benda Global aneh di javascript yang sering dikembalikan ketika beberapa operasi matematika gagal.
Anda ingin memeriksa apakah
NaN == null
hasilnyafalse
. Hovewer bahkanNaN == NaN
menghasilkanfalse
.Cara sederhana untuk mengetahui apakah variabel adalah
NaN
fungsi globalisNaN()
.Yang lain adalah
x !== x
yang hanya benar ketika x adalah NaN. (terima kasih sudah mengingatkan @ raphael-schweikert)Tetapi mengapa jawaban singkatnya berhasil?
Ayo cari tahu.
Ketika Anda memanggil
NaN == false
hasilnyafalse
, sama denganNaN == true
.Di suatu tempat di spesifikasi JavaScript memiliki catatan dengan nilai selalu salah, yang meliputi:
NaN
- Bukan-Jumlah""
- string kosongfalse
- palsu booleannull
- objek nolundefined
- variabel tidak terdefinisi0
- numerik 0, termasuk +0 dan -0sumber
var xIsNaN = x !== x;
Ini menghasilkan true hanya jika x adalahNaN
.Solusi lain disebutkan di halaman parseFloat MDN
Ini menyediakan fungsi filter untuk melakukan parsing ketat
Dan kemudian Anda dapat menggunakannya
isNaN
untuk memeriksa apakah ituNaN
sumber
Cara yang tepat untuk memeriksa adalah:
sumber
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.
sumber
Menemukan cara lain, hanya untuk bersenang-senang.
sumber
Jawaban markyzm bekerja dengan baik, tetapi tidak mengembalikan false karena
Infinity
Infinity secara teknis bukan angka.saya datang dengan
isNumber
fungsi yang akan memeriksa apakah itu angka.UPDATE: saya perhatikan bahwa kode ini gagal untuk beberapa parameter, jadi saya membuatnya lebih baik.
sumber
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.
sumber
Anda dapat memeriksa NaN menggunakan fungsi javascript isNaN. Hanya meneruskan angka atau nilai ke fungsi isNaN
sumber
Cukup konversikan hasilnya ke String dan bandingkan dengan 'NaN'.
sumber
Apakah (NaN> = 0) ? ...... " Saya tidak tahu ".
Kondisi hanya dijalankan jika BENAR .
Bukan pada SALAH .
Bukan pada " Aku Tidak Tahu ".
sumber