Apakah ada cara untuk mengkonversi nilai NaN ke 0 tanpa pernyataan if:
if (isNaN(a)) a = 0;
Sangat menjengkelkan untuk memeriksa variabel saya setiap saat.
javascript
Tamás Pap
sumber
sumber
function noNaN( n ) { return isNaN( n ) ? 0 : n; }
dan kemudiannoNaN( a )
Jawaban:
Kamu bisa melakukan ini:
... yang akan mengubah nilai dari "falsey" menjadi
0
.Nilai "falsey" adalah:
false
null
undefined
0
""
(string kosong)NaN
(Bukan Angka)Atau ini jika Anda lebih suka:
... yang akan memiliki efek yang sama seperti di atas.
Jika maksudnya adalah untuk menguji lebih dari sekadar
NaN
, maka Anda dapat melakukan hal yang sama, tetapi lakukan konversi toNumber terlebih dahulu.Ini menggunakan operator + unary untuk mencoba mengkonversi
a
ke nomor. Ini memiliki manfaat tambahan untuk mengonversi hal-hal seperti string numerik'123'
ke angka.Satu-satunya hal yang tidak terduga adalah jika seseorang melewati Array yang berhasil dikonversi menjadi nomor:
Di sini kita memiliki Array yang memiliki anggota tunggal yang merupakan string numerik. Ini akan berhasil dikonversi menjadi angka.
sumber
NaN
. Ini tidak akan berfungsi sebagai tes untuk semua nilai bukan angka. Meskipun kami dapat mencoba konversi toNumber terlebih dahulu. Saya akan memperbarui.Menggunakan double-tilde (double bitwise NOT) -
~~
- melakukan beberapa hal menarik dalam JavaScript. Misalnya Anda dapat menggunakannya sebagai gantiMath.floor
atau bahkan sebagai alternatifparseInt("123", 10)
! Sudah banyak dibahas di web, jadi saya tidak akan masuk mengapa itu bekerja di sini, tetapi jika Anda tertarik: Apa itu "double tilde" (~~) operator di JavaScript?Kita dapat mengeksploitasi properti double-tilde ini untuk mengkonversi
NaN
ke angka, dan dengan senang hati angka itu nol!console.log(~~NaN); // 0
sumber
~~
sama sekali, saya hanya menggunakannya sepanjang sisi denganparseFloat()
seperti:~~parseFloat($variable);
. Sangat rapi :) +1Tulis metode Anda sendiri, dan gunakan di mana saja Anda menginginkan nilai angka:
sumber
null
maka itu tidak memberi saya hasil yang diharapkan0
. Lebih lanjut tentang poin saya di sini: stackoverflow.com/questions/115548/why-is-isnannull-false-in-jsNumber(val)
karena itu kembali0
ketika tidak bisa memahaminya.Sesuatu yang lebih sederhana dan efektif untuk apa pun:
... yang akan mengubah nilai dari "falsey" menjadi
0
.Nilai "falsey" adalah:
false
null
undefined
0
""
(string kosong)NaN
(Bukan Angka)sumber
Daripada melakukan kludging sehingga Anda bisa melanjutkan, mengapa tidak membuat cadangan dan bertanya-tanya mengapa Anda mengalami NaN?
Jika salah satu input numerik ke operasi adalah NaN, output juga akan menjadi NaN. Begitulah cara standar IEEE Floating Point saat ini (bukan hanya Javascript). Perilaku itu untuk alasan yang baik : niat dasarnya adalah untuk mencegah Anda menggunakan hasil palsu tanpa menyadari itu palsu.
Cara kerja NaN adalah jika terjadi kesalahan pada beberapa sub-sub-operasi (menghasilkan NaN pada level yang lebih rendah), hasil akhirnya juga akan menjadi NaN, yang akan segera Anda kenali sebagai kesalahan walaupun Anda logika penanganan kesalahan (melempar / menangkap mungkin?) belum selesai.
NaN sebagai hasil dari perhitungan aritmatika selalu menunjukkan sesuatu yang serba salah dalam rincian aritmatika. Ini adalah cara bagi komputer untuk mengatakan "diperlukan debug di sini". Alih-alih menemukan cara untuk tetap melanjutkan dengan beberapa nomor yang hampir tidak pernah benar (apakah 0 benar-benar yang Anda inginkan?), Mengapa tidak menemukan masalah dan memperbaikinya.
Masalah umum dalam Javascript adalah bahwa kedua
parseInt(...)
danparseFloat(...)
akan kembali NaN jika diberi argumen masuk akal (null
,''
, dll). Perbaiki masalah di level serendah mungkin daripada di level yang lebih tinggi. Maka hasil perhitungan keseluruhan memiliki peluang bagus untuk masuk akal, dan Anda tidak mengganti beberapa angka ajaib (0 atau 1 atau apa pun) untuk hasil seluruh perhitungan. (Trik (parseInt (foo.value) || 0) hanya berfungsi untuk penjumlahan, bukan produk - untuk produk yang Anda inginkan nilai default menjadi 1 daripada 0, tetapi tidak jika nilai yang ditentukan benar-benar 0.)Mungkin untuk kemudahan pengkodean Anda ingin fungsi mengambil nilai dari pengguna, membersihkannya, dan memberikan nilai default jika perlu, seperti ini:
sumber
Bagaimana dengan regex ?
Kode di bawah ini akan mengabaikan NaN untuk memungkinkan perhitungan angka yang dimasukkan dengan benar
Tampilkan cuplikan kode
sumber
Metode yang menggunakan isNaN tidak berfungsi jika Anda mencoba menggunakan parseInt, misalnya:
Tetapi dalam kasus kedua isNaN menghasilkan false (yaitu string nol adalah angka)
Singkatnya, string nol dianggap sebagai nomor yang valid oleh isNaN tetapi tidak oleh parseInt. Diverifikasi dengan Safari, Firefox dan Chrome di OSX Mojave.
sumber
sumber
menggunakan solusi pengguna 113716, yang omong-omong sangat bagus untuk menghindari semua itu jika-kalau tidak saya telah menerapkannya dengan cara ini untuk menghitung kotak teks subtotal saya dari unit kotak teks dan jumlah kotak teks.
Dalam proses penulisan angka non dalam kotak teks kuantitas dan satuan, nilainya diganti dengan nol sehingga posting akhir data pengguna tidak memiliki angka.
sumber
Silakan coba fungsi sederhana ini
sumber