Saya menjalankan JSLint pada kode JavaScript ini dan mengatakan:
Masalah pada baris 32 karakter 30: Parameter radix tidak ada.
Ini adalah kode yang dimaksud:
imageIndex = parseInt(id.substring(id.length - 1))-1;
Apa yang salah di sini?
Saya menjalankan JSLint pada kode JavaScript ini dan mengatakan:
Masalah pada baris 32 karakter 30: Parameter radix tidak ada.
Ini adalah kode yang dimaksud:
imageIndex = parseInt(id.substring(id.length - 1))-1;
Apa yang salah di sini?
Jawaban:
Itu selalu praktik yang baik untuk lulus radix dengan parseInt -
parseInt(string, radix)
Untuk desimal -
parseInt(id.substring(id.length - 1), 10)
Jika parameter radix dihilangkan, JavaScript mengasumsikan yang berikut:
( Referensi )
Redundant radix parameter
radix
Argumen adalah nilai numerik, bukan representasi string dari nilai numerik, jadi tidak ada radix untuk ditentukan.
Untuk menghindari peringatan ini, alih-alih menggunakan:
parseInt("999", 10);
Anda dapat menggantinya dengan:
Number("999");
Perhatikan bahwa parseInt dan Number memiliki perilaku yang berbeda , tetapi dalam beberapa kasus, satu dapat menggantikan yang lain.
Number()
lebih cepat 6x dariparseInt()
Saya tidak menjawab pertanyaan dengan benar tetapi, saya pikir masuk akal untuk menjelaskan mengapa kita harus menentukan radix .
Pada dokumentasi MDN kita dapat membaca bahwa:
Jika radix tidak terdefinisi atau 0 (atau tidak ada), JavaScript mengasumsikan sebagai berikut:
Sumber: MDN parseInt ()
Anda dapat mematikan aturan ini jika Anda ingin melewati tes itu.
Memasukkan:
radix: false
Di bawah rules
properti " " dalam tslint.json
file.
Tidak disarankan untuk melakukannya jika Anda tidak memahami pengecualian ini.
Menambahkan berikut ini di atas file JS Anda akan memberitahu JSHint untuk menekan peringatan radix:
/*jshint -W065 */
Lihat juga: http://jshint.com/docs/#options
"-W065": true
, misalnya dalam .jshintrc
file.
Saya menyelesaikannya dengan hanya menggunakan + foo, untuk mengkonversi string.
Perlu diingat itu tidak bagus untuk keterbacaan (perbaikan kotor).
console.log( +'1' )
// 1 (int)
Anda juga bisa menambahkan baris ini tepat di atas baris parseInt Anda:
// eslint-disable-next-line
Ini akan menonaktifkan pemeriksaan eslint untuk baris berikutnya. Gunakan ini jika Anda hanya perlu melewati satu atau dua baris.
Cukup masukkan string kosong di tempat radix, karena parseInt () mengambil dua argumen:
parseInt (string, radix);
string Nilai untuk diuraikan. Jika argumen string bukan string, maka itu dikonversi ke string (menggunakan operasi abstrak ToString). Ruang kosong terkemuka dalam argumen string diabaikan.
radix Bilangan bulat antara 2 dan 36 yang mewakili radix (dasar dalam sistem angka matematika) dari string yang disebutkan di atas. Tentukan 10 untuk sistem angka desimal yang biasa digunakan oleh manusia. Selalu tentukan parameter ini untuk menghilangkan kebingungan pembaca dan untuk menjamin perilaku yang dapat diprediksi. Implementasi yang berbeda menghasilkan hasil yang berbeda ketika radix tidak ditentukan, biasanya nilai defaultnya adalah 10.
imageIndex = parseInt (id.substring (id.length - 1)) - 1;
imageIndex = parseInt(id.substring(id.length - 1), '')-1;
Cukup tambahkan aturan khusus Anda di .eslintrc yang terlihat seperti itu
"radix": "off"
dan Anda akan bebas dari peringatan tanpa pemberitahuan eslint ini. Ini untuk linter eslint.
Sebelum ECMAScript 5, parseInt () juga secara otomatis mendeteksi literal oktal, yang menyebabkan masalah karena banyak pengembang menganggap 0 terkemuka akan diabaikan.
Jadi Alih-alih:
var num = parseInt("071"); // 57
Melakukan hal ini:
var num = parseInt("071", 10); // 71
var num = parseInt("071", 8);
var num = parseFloat(someValue);