Saat ini saya memvalidasi JavaScript saya terhadap JSLint dan membuat kemajuan, ini membantu saya untuk menulis JavaScript yang lebih baik - khususnya dalam bekerja dengan perpustakaan Jquery.
Saya sekarang menemukan JSHint , garpu JSLint .
Jadi saya bertanya-tanya untuk aplikasi web, yang sangat didorong oleh JavaScript, yang merupakan alat validasi yang lebih baik atau paling dapat diterapkan untuk mengatasi:
- JSLint atau JSHint?
Saya ingin memutuskan sekarang pada mekanisme validasi dan bergerak maju, gunakan ini untuk validasi sisi klien.
Dan Perbedaan antara jshint dan jslint? Tolong jelaskan dalam contoh javascript tunggal.
Tautan:
jshint - http://www.jshint.com/
jslint - http://jslint.com/
javascript
jslint
jshint
amatir
sumber
sumber
Combine this with the previous 'var' statement
->Do not mix 'require' and other declarations
, paradoks.Jawaban:
[EDIT]
Jawaban ini telah diedit. Saya meninggalkan jawaban asli di bawah ini untuk konteks (jika tidak komentar tidak masuk akal).
Ketika pertanyaan ini awalnya diajukan, JSLint adalah alat linting utama untuk JavaScript. JSHint adalah garpu baru JSLint, tetapi belum banyak menyimpang dari aslinya.
Sejak itu, JSLint tetap statis, sementara JSHint telah banyak berubah - JSLint telah membuang banyak aturan JSLint yang lebih antagonistik, telah menambah banyak aturan baru, dan umumnya menjadi lebih fleksibel. Juga, alat ESLint lain sekarang tersedia, yang bahkan lebih fleksibel dan memiliki lebih banyak opsi aturan.
Dalam jawaban asli saya, saya mengatakan bahwa Anda tidak harus memaksakan diri untuk mematuhi aturan JSLint; selama Anda mengerti mengapa itu memberikan peringatan, Anda dapat membuat keputusan untuk diri sendiri tentang apakah akan mengubah kode untuk menyelesaikan peringatan atau tidak.
Dengan aturan ultra-ketat JSLint dari 2011, ini adalah saran yang masuk akal - Saya telah melihat sangat sedikit kode JavaScript yang dapat lulus tes JSLint. Namun dengan aturan yang lebih pragmatis tersedia di alat JSHint dan ESLint hari ini, itu adalah usulan yang jauh lebih realistis untuk mencoba membuat kode Anda melewatinya dengan nol peringatan.
Mungkin kadang-kadang masih ada kasus-kasus di mana linter akan mengeluh tentang sesuatu yang telah Anda lakukan dengan sengaja - misalnya, Anda tahu bahwa Anda harus selalu menggunakan
===
tetapi hanya kali ini saja Anda memiliki alasan yang baik untuk menggunakannya==
. Tetapi meskipun demikian, dengan ESLint Anda memiliki opsi untuk menentukan dieslint-disable
sekitar baris yang dimaksud sehingga Anda masih dapat memiliki tes serat yang lulus dengan nol peringatan, dengan sisa kode Anda mematuhi aturan. (Hanya saja, jangan melakukan hal semacam itu terlalu sering!)[ORIGINAL JAWABAN BERIKUT]
Dengan segala cara gunakan JSLint. Tapi jangan terpaku pada hasil dan memperbaiki semua yang diperingatkan. Ini akan membantu Anda meningkatkan kode Anda, dan itu akan membantu Anda menemukan bug potensial, tetapi tidak semua yang dikeluhkan JSLint ternyata menjadi masalah nyata, jadi jangan merasa Anda harus menyelesaikan proses ini dengan nol peringatan.Hampir semua kode Javascript dengan panjang atau kompleksitas yang signifikan akan menghasilkan peringatan di JSLint, tidak peduli seberapa baik ditulisnya. Jika Anda tidak percaya, coba jalankan beberapa perpustakaan populer seperti JQuery melaluinya.
Beberapa peringatan JSLint lebih berharga daripada yang lain: pelajari yang mana yang harus diperhatikan, dan mana yang kurang penting. Setiap peringatan harus dipertimbangkan, tetapi jangan merasa berkewajiban untuk memperbaiki kode Anda untuk menghapus setiap peringatan yang diberikan; tidak apa-apa untuk melihat kode dan memutuskan Anda senang dengan itu; ada kalanya hal-hal yang JSlint tidak suka sebenarnya adalah hal yang benar untuk dilakukan.sumber
for (i = 0; i < dontEnumsLength; i++)
melempar keUnexpected '++'
tempat yang tidak apa-apa. dll.tl; dr takeaway :
Jika Anda mencari standar yang sangat tinggi untuk diri sendiri atau tim, JSLint. Tapi itu belum tentu THE standar, hanya standar A, beberapa di antaranya datang kepada kita secara dogmatis dari dewa javascript bernama Doug Crockford. Jika Anda ingin sedikit lebih fleksibel, atau memiliki beberapa pro lama di tim Anda yang tidak setuju dengan pendapat JSLint, atau akan bolak-balik antara JS dan bahasa C-family lainnya secara teratur, coba JSHint.
versi panjang :
Alasan di balik garpu menjelaskan dengan cukup baik mengapa JSHint ada:
http://badassjs.com/post/3364925033/jshint-an-community-driven-fork-of-jslint http://anton.kovalyov.net/2011/02/20/why-i-forked-jslint-to -jshint /
Jadi saya kira idenya adalah "didorong oleh komunitas" dan bukan oleh Crockford. Secara praktis, JSHint umumnya sedikit lebih lunak (atau paling tidak dapat dikonfigurasi atau agnostik) pada beberapa "pendapat" sintaksis gaya dan minor yang digunakan JSLint.
Sebagai contoh, jika Anda berpikir A dan B di bawah baik-baik saja, atau jika Anda ingin menulis kode dengan satu atau lebih aspek A yang tidak tersedia di B, JSHint cocok untuk Anda. Jika menurut Anda B adalah satu-satunya pilihan yang benar ... JSLint. Saya yakin ada perbedaan lain, tetapi ini menyoroti beberapa.
A) Lulus JSHint di luar kotak - gagal JSLint
B) Melewati JSHint dan JSLint
Secara pribadi saya menemukan kode JSLint sangat bagus untuk dilihat, dan satu-satunya fitur keras yang saya tidak setuju adalah kebenciannya terhadap lebih dari satu deklarasi var dalam suatu fungsi dan
var i = 0
deklarasi for-loop , dan beberapa penegakan spasi putih untuk deklarasi fungsi .Beberapa hal spasi putih yang diterapkan JSLint, saya menemukan belum tentu buruk, tetapi tidak sinkron dengan beberapa konvensi ruang putih standar yang cukup untuk bahasa lain dalam keluarga (C, Java, Python, dll ...), yang sering diikuti sebagai konvensi dalam Javascript juga. Karena saya menulis dalam berbagai bahasa ini sepanjang hari, dan bekerja dengan anggota tim yang tidak suka spasi putih ala Lint dalam kode kami, saya menemukan JSHint menjadi keseimbangan yang baik. Ini menangkap hal-hal yang merupakan bug yang sah atau bentuk yang benar-benar buruk, tetapi tidak menggonggong pada saya seperti JSLint (kadang-kadang, dengan cara saya tidak dapat menonaktifkan) untuk pendapat gaya atau nitpicks sintaksis yang tidak saya pedulikan.
Banyak perpustakaan yang bagus tidak Lint'able, yang bagi saya menunjukkan bahwa ada beberapa kebenaran dengan gagasan bahwa beberapa JSLint hanya tentang mendorong 1 versi "kode yang baik" (yang memang kode yang baik). Tapi sekali lagi, perpustakaan yang sama (atau yang bagus lainnya) mungkin juga tidak bisa dihubungi, jadi, sentuhlah.
sumber
for (var i = 0; ...; i++)
adalah karena itu tidak membuat loop mandiri. Ruang lingkupi
adalah fungsinya. Sintaksisnya sepertinya menciptakan ruang lingkup blok, tetapi tidak dan itu menyebabkan programmer JavaScript yang kurang berpengalaman dan orang-orang yang menulis dalam berbagai bahasa untuk salah paham ruang lingkup variabel dan yang dapat mengakibatkan bug halus. Banyak dari kita (termasuk saya sendiri) mungkin tidak suka tampilannya menempatkan semua deklarasi di atas, tetapi ini adalah pengingat yang baik bahwa JavaScript tidak memiliki ruang lingkup blok.i
tidak akan secara tidak sengaja menjadi global. Fakta bahwai
fungsi scoped bukan block scoped bukan alasan yang cukup baik untuk mendeklarasikan variabel di atas, variabel harus selalu dinyatakan sedekat mungkin dengan tempat mereka digunakan ( programmers.stackexchange.com/questions/56585/… ).Ada lagi "pemain" dewasa dan aktif dikembangkan di depan javascript linting -
ESLint
:Yang benar-benar penting di sini adalah dapat diperpanjang melalui plugin / aturan khusus . Sudah ada beberapa plugin yang ditulis untuk tujuan yang berbeda. Di antara yang lainnya , ada:
Dan, tentu saja, Anda dapat menggunakan alat bangun pilihan Anda untuk menjalankan
ESLint
:sumber
Saya punya pertanyaan yang sama beberapa minggu yang lalu dan sedang mengevaluasi JSLint dan JSHint.
Bertentangan dengan jawaban dalam pertanyaan ini, kesimpulan saya bukanlah:
Atau:
Seperti Anda dapat mengkonfigurasi hampir aturan yang sama di JSHint seperti pada JSLint. Jadi saya berpendapat bahwa tidak ada banyak perbedaan dalam aturan yang bisa Anda capai.
Jadi alasan untuk memilih satu lebih dari yang lain lebih bersifat politis daripada teknis.
Kami akhirnya memutuskan untuk menggunakan JSHint karena alasan berikut:
sumber
Saya akan membuat saran ketiga, Google Closure Compiler (dan juga Clinter Linter ). Anda dapat mencobanya online di sini .
sumber
Kata Pengantar: Ya, itu meningkat dengan cepat. Tetapi memutuskan untuk melakukannya. Semoga jawaban ini bermanfaat bagi Anda dan pembaca lainnya.
Petunjuk Kode
Meskipun JSLint dan JSHint adalah alat yang baik untuk digunakan, selama bertahun-tahun saya menghargai apa yang disebut teman saya @ugly_syntax :
Ini adalah prinsip umum, seperti "biarawan zen", membatasi pilihan yang harus dibuat, seseorang dapat lebih produktif dan kreatif.
Karenanya, gaya kode JS nol konfigurasi favorit saya saat ini:
PEMBARUAN :
Aliran telah meningkat banyak. Dengan itu, Anda dapat menambahkan jenis ke JS Anda dengan akan membantu Anda mencegah banyak bug. Tapi itu juga bisa menghalangi Anda, misalnya ketika menghubungkan JS yang tidak diketik. Cobalah!
Mulai cepat / TL; DR
Tambahkan
standard
sebagai ketergantungan pada proyek AndaLalu
package.json
, tambahkan skrip pengujian berikut:Untuk keluaran yang lebih bagus saat mengembangkan,
npm install --global snazzy
dan jalankan sebagai gantinyanpm test
.Catatan: Jenis pemeriksaan versus Heuristik
Teman saya ketika menyebutkan ruang desain yang mengacu pada Elm dan saya mendorong Anda untuk mencoba bahasa itu.
Mengapa? JS sebenarnya terinspirasi oleh LISP, yang merupakan kelas bahasa khusus, yang kebetulan tidak diketik . Bahasa seperti Elm atau Purescript adalah bahasa pemrograman fungsional yang diketik .
Ketik membatasi kebebasan Anda agar kompiler dapat memeriksa dan memandu Anda saat Anda akhirnya melanggar bahasa atau aturan program Anda sendiri; terlepas dari ukuran (LOC) program Anda.
Kami baru-baru ini memiliki kolega yunior mengimplementasikan antarmuka reaktif dua kali: sekali di Elm, sekali di React; lihatlah untuk mendapatkan beberapa gagasan tentang apa yang saya bicarakan.
(ps. perhatikan bahwa kode Bereaksi tidak idiomatik dan dapat ditingkatkan)
Satu komentar terakhir,
kenyataannya adalah bahwa JS tidak diketik. Siapa yang saya sarankan untuk mengetik program untuk Anda?
Lihat, dengan JS kita berada di domain yang berbeda: terbebas dari tipe, kita dapat dengan mudah mengekspresikan hal-hal yang sulit atau tidak mungkin untuk memberikan tipe yang tepat (yang tentunya bisa menjadi keuntungan).
Tetapi tanpa tipe ada sedikit untuk menjaga program kami di cek, jadi kami dipaksa untuk memperkenalkan tes dan (untuk memperluas) gaya kode.
Saya sarankan Anda melihat LISP (misalnya ClojureScript ) untuk inspirasi dan berinvestasi dalam pengujian kode Anda. Baca Cara subtack untuk mendapatkan ide.
Perdamaian.
sumber
Nah, Alih-alih melakukan pengaturan serat manual kita bisa memasukkan semua pengaturan serat di bagian atas file JS kita sendiri misalnya
Nyatakan semua var global dalam file itu seperti:
Nyatakan semua pengaturan serat seperti:
Semoga ini bisa membantu Anda :)
sumber
Ada juga alternatif lain yang dikembangkan secara aktif - JSCS - JavaScript Code Style :
Itu datang dengan beberapa preset yang dapat Anda pilih dengan hanya menentukan
preset
dalam.jscsrc
file konfigurasi dan menyesuaikannya - menimpa, mengaktifkan atau menonaktifkan aturan apa pun:Ada juga plugin dan ekstensi yang dibangun untuk editor populer.
Lihat juga:
sumber