it-swarm-id.com

JSLint mengatakan "parameter radix hilang"; apa yang harus saya lakukan?

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?

462
Mike Vierwind

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:

  • Jika string dimulai dengan "0x", radix adalah 16 (heksadesimal)
  • Jika string dimulai dengan "0", radix adalah 8 (oktal). Fitur ini sudah usang
  • Jika string dimulai dengan nilai lain, radix adalah 10 (desimal)

( Referensi )

840
Jayendra

Saya tidak benar menjawab pertanyaan tetapi, saya pikir masuk akal untuk menghapus 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:

  • [...]
  • Jika string input dimulai dengan "0", radix adalah delapan (oktal) atau 10 (desimal). Radix mana yang dipilih tergantung pada implementasi. ECMAScript 5 menentukan bahwa 10 (desimal) digunakan, tetapi belum semua browser mendukung ini. Untuk alasan ini selalu tentukan radix saat menggunakan parseInt.
  • [...]

Sumber: MDN parseInt ()

40
nmoliveira

Untuk menghindari peringatan ini, alih-alih menggunakan:

parseInt("999", 10);

Anda dapat menggantinya dengan:

Number("999");


Perhatikan bahwa parseInt dan Number memiliki perilaku berbeda , tetapi dalam beberapa kasus, satu dapat menggantikan yang lain.

39
Zanon

Anda dapat mematikan aturan ini jika Anda ingin melewati tes itu.

Memasukkan:

radix: false

Di bawah properti "rules" di file tslint.json.

Tidak disarankan untuk melakukannya jika Anda tidak memahami pengecualian ini.

23
Spock

Menambahkan berikut ini di atas file JS Anda akan memberitahu JSHint untuk menekan peringatan radix:

/*jshint -W065 */

Lihat juga: http://jshint.com/docs/#options

21
aleemb

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.

4
Rohit Nethi

Saya menyelesaikannya dengan hanya menggunakan + foo, untuk mengubah string.

Perlu diingat itu tidak bagus untuk keterbacaan (perbaikan kotor).

console.log( +'1' )
// 1 (int)
4
user2369834

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 utama dalam argumen string diabaikan.

radix Suatu bilangan bulat antara 2 dan 36 yang mewakili radix (basis 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;

2
Ahmed.Dz

Alih-alih memanggil fungsi substring Anda bisa menggunakan .slice()

    imageIndex = parseInt(id.slice(-1)) - 1;

Di sini, -1 dalam slice menunjukkan bahwa untuk memulai slice dari indeks terakhir.

Terima kasih.

0
Daniel