Apakah mungkin entah bagaimana mengembalikan 0 alih-alih NaN
saat menguraikan nilai dalam JavaScript?
Dalam kasus string kosong parseInt
kembali NaN
.
Apakah mungkin untuk melakukan hal seperti itu di JavaScript untuk memeriksanya NaN
?
var value = parseInt(tbb) == NaN ? 0 : parseInt(tbb)
Atau mungkin ada fungsi lain atau plugin jQuery yang dapat melakukan hal serupa?
javascript
nan
Joper
sumber
sumber
NaN != NaN
,. Kamu akan membutuhkanisNaN(value)
.parseInt()
dua kali (dalam kasus yang berhasil / normalNaN
) tidak pernah merupakan ide yang baik. Terlepas dari ketidakefisienan, bagi yang tidak waspada jika apa pun yang dilewatkantbb
adalah panggilan fungsi dengan efek samping itu mengerikan. Saya tidak akan menggunakan solusi apa pun di sini di mana saya melihatparseInt()
dua kali.Jawaban:
Ketika tidak digunakan dengan nilai boolean,
||
operator logika OR ( ) mengembalikan ekspresi pertama (parseInt(s)
) jika dapat dievaluasi menjadi true, jika tidak maka mengembalikan ekspresi kedua (0). Nilai kembaliparseInt('')
adalah NaN. NaN dievaluasi menjadi false, sehingganum
akhirnya ditetapkan ke 0.sumber
0
bukanNaN
. Ini diselesaikan dengan kode Matt dengan sempurna.var nextIphone = parseInt("4S") + 1; // wow it works!
Anda juga dapat menggunakan
isNaN()
fungsi ini:sumber
parseInt(s)
dua kali? Selain itu harusparseInt(s, 10)
parseInt()
dua kali.Saya terkejut tidak melihat ada yang menyebutkan menggunakan
Number()
. Mengabulkannya akan menguraikan desimal jika disediakan, jadi akan bertindak berbeda dariparseInt()
, namun itu sudah mengasumsikan basis 10 dan akan berubah "" atau bahkan "" menjadi 0.sumber
Untuk orang-orang yang tidak dibatasi
parseInt
, Anda dapat menggunakan operator ATAU bitwise (yang secara implisit memanggilToInt32
operannya).Catatan:
ToInt32
berbeda dariparseInt
. (yaituparseInt('33Ab') === 33
)sumber
'10000000000' | 0 === 1410065408
.Math.pow(2, 31)
akan meluap.Masalah
Jawaban lain tidak memperhitungkan yang
0
salah, dan dengan demikian yang berikut adalah 20 bukannya 0:Solusinya
Saya mengusulkan fungsi pembantu, yang memecahkan sebagian besar masalah:
Fungsi helper akan memberikan hasil berikut:
sumber
parseInt(string, radix)
pertimbangkan ini:parseInt("0x10") === 16
JugaparseInt("010")
dapat menghasilkan8
di beberapa browserdefaultTo
fungsi praktis yang melakukan hal ini:_.defaultTo(NaN, -1)
mengembalikan-1
, tetapi_.defaultTo(0, -1);
mengembalikan0
.parseInt
dua kaliApakah pekerjaannya jauh lebih bersih daripada parseInt menurut saya, Gunakan operator +
sumber
sumber
Lakukan pemeriksaan terpisah untuk string kosong (karena ini adalah satu kasus khusus) dan setel ke nol dalam kasus ini.
Anda dapat menambahkan "0" ke awal, tetapi kemudian Anda perlu menambahkan awalan untuk menunjukkan bahwa itu adalah desimal dan bukan angka oktal
sumber
Mengapa tidak mengganti fungsi? Dalam hal ini, Anda selalu dapat memastikan itu kembali
0
jikaNaN
:Sekarang, di mana saja dalam kode Anda:
sumber
|| 0
seperti dalam jawaban Matt. Saya melihat objek utama yang tidak Anda miliki sebagai pilihan terakhir atau jika tidak melakukannya akan jauh lebih mahal dalam hal waktu dan kompleksitas.Saya punya masalah yang sama (firefox v34) dengan string sederhana seperti:
Jadi saya datang dengan retasan cepat:
Dan kemudian menjadi sangat rumit untuk berurusan dengan mengapung + int untuk hal-hal yang tidak sederhana:
Ini akan mengembalikan 0 untuk hal-hal seperti:
sumber
sumber
||
pendekatan. Saya tahu ini adalah pertanyaan dan jawaban lama, tetapi jawaban ini menghindari memanggil parseInt dua kali, dan menggunakan isNaN dengan benar. Itu hanya perlu radixparseInt(x, 10)
untuk menyeluruh. (Preferensi saya adalah variabel internal yang terpisah alih-alih digunakan kembalix
.)Saya membuat 2 prototipe untuk menangani ini untuk saya, satu untuk nomor, dan satu untuk sebuah String.
Jika Anda tidak ingin menggunakan pemeriksaan keamanan, gunakan
Contoh penggunaan:
sumber
Penjelasan, bagi mereka yang tidak menganggapnya sepele:
Mengalikan dengan satu, metode yang disebut "pemain implisit", mencoba untuk mengubah operan tipe yang tidak dikenal menjadi tipe 'nomor' primitif. Secara khusus, string kosong akan menjadi nomor 0, menjadikannya tipe yang memenuhi syarat untuk parseInt () ...
Contoh yang sangat bagus juga diberikan di atas oleh PirateApp, yang menyarankan untuk menambahkan tanda +, memaksa JavaScript untuk menggunakan pemeran tersirat Number.
sumber
parseInt('str'*1)
parseInt
sesuatu yang sudah menjadi nomor? Itu akan menimbulkan konversi lain kembali ke string hanya untuk mengonversinya menjadi angka lagi.Juga dengan cara ini, mengapa tidak menulis fungsi dan menyebutnya di mana pun diperlukan. Saya berasumsi itu adalah entri ke bidang formulir untuk melakukan perhitungan.
apa yang salah melakukan ini?
sumber
NaN
.Berikut adalah metode tryParseInt yang saya gunakan, ini mengambil nilai default sebagai parameter kedua sehingga bisa apa saja yang Anda butuhkan.
sumber
fungsi pembantu yang masih memungkinkan untuk menggunakan radix
sumber
Anda dapat memiliki kode yang sangat bersih, saya memiliki masalah yang sama dan saya menyelesaikannya dengan menggunakan:
sumber
Untuk orang lain yang mencari solusi ini, cukup gunakan: ~~ tanpa parseInt, ini adalah mode terbersih.
Jika NaN, itu akan mengembalikan 0 sebagai gantinya.
sumber