Apa yang harus diketahui oleh setiap programmer JavaScript? [Tutup]

368

Apakah ada satu set hal yang harus diketahui oleh setiap programmer JavaScript agar bisa mengatakan "Saya tahu JavaScript"?

gath
sumber

Jawaban:

590

Bukan jQuery. Bukan YUI. Tidak (dll. Dll)

Kerangka mungkin berguna, tetapi mereka sering menyembunyikan detail kadang-kadang jelek tentang bagaimana sebenarnya JavaScript dan DOM bekerja dari Anda. Jika tujuan Anda adalah untuk bisa mengatakan "Saya tahu JavaScript", maka menginvestasikan banyak waktu dalam suatu kerangka kerja bertentangan dengan itu.

Berikut adalah beberapa fitur bahasa JavaScript yang harus Anda ketahui untuk memahami apa yang dilakukannya dan tidak ketahuan, tetapi yang tidak segera jelas bagi banyak orang:

  • Itu object.propdan itu object['prop']adalah hal yang sama (jadi bisakah kamu berhenti menggunakan eval, terima kasih); bahwa properti objek selalu berupa string (bahkan untuk array); apa for... inadalah untuk (dan apa yang bukan ).

  • Properti mengendus; apa undefineditu (dan mengapa baunya ); mengapa inoperator yang tampaknya kurang dikenal itu menguntungkan dan berbeda dari typeof/ undefinedmemeriksa; hasOwnProperty; tujuan dari delete.

  • Bahwa Numbertipe data benar-benar pelampung; kesulitan independen menggunakan float; menghindari parseIntperangkap oktal.

  • Pelingkupan fungsi bersarang; perlunya menggunakan vardalam lingkup yang Anda inginkan untuk menghindari global yang tidak disengaja; bagaimana ruang lingkup dapat digunakan untuk penutupan; yang masalah penutupan lingkaran .

  • Bagaimana variabel dan windowproperti global bertabrakan; bagaimana variabel global dan elemen dokumen tidak boleh bertabrakan tetapi lakukan di IE; perlunya menggunakan vardalam lingkup global juga untuk menghindari ini.

  • Bagaimana functionpernyataan tersebut bertindak untuk ' mengangkat ' definisi sebelum kode sebelumnya; perbedaan antara pernyataan fungsi dan ekspresi fungsi; mengapa ekspresi fungsi bernama tidak boleh digunakan .

  • Bagaimana fungsi konstruktor, prototypeproperti, dan newoperator benar-benar berfungsi; metode mengeksploitasi ini untuk membuat sistem kelas / subclass / instance normal yang Anda inginkan; ketika Anda mungkin ingin menggunakan objek berbasis penutupan alih-alih prototyping. (Sebagian besar materi tutorial JS benar-benar mengerikan dalam hal ini; butuh bertahun-tahun untuk membuatnya langsung di kepala saya.)

  • Bagaimana thisditentukan pada saat panggilan, tidak terikat; bagaimana konsekuensinya metode passing tidak berfungsi seperti yang Anda harapkan dari bahasa lain; bagaimana penutupan atau Function#binddapat digunakan untuk mengatasi itu.

  • Fitur ECMAScript Fifth Edition lainnya seperti indexOf, forEachdan metodeArray pemrograman fungsional ; cara memperbaiki browser yang lebih lama untuk memastikan Anda dapat menggunakannya; menggunakannya dengan ekspresi fungsi anonim sebaris untuk mendapatkan kode yang ringkas dan mudah dibaca.

  • Aliran kontrol antara browser dan kode pengguna; eksekusi sinkron dan asinkron; peristiwa yang menyala di dalam aliran kontrol (mis. fokus) vs. peristiwa dan batas waktu yang terjadi ketika kontrol kembali; bagaimana memanggil builtin yang seharusnya seperti sinkron alertdapat berakhir menyebabkan berpotensi kembali bencana.

  • Bagaimana pengaruh skrip lintas-jendela instanceof; bagaimana skrip lintas-jendela memengaruhi aliran kontrol di berbagai dokumen; bagaimana postMessagemudah-mudahan akan memperbaiki hal ini.

Lihat jawaban ini mengenai dua item terakhir.

Yang terpenting, Anda harus melihat JavaScript secara kritis, mengakui bahwa karena alasan historis bahasa yang tidak sempurna (bahkan lebih dari kebanyakan bahasa), dan menghindari titik kesulitan terburuknya. Karya Crockford di bagian depan ini pasti layak dibaca (meskipun saya tidak 100% setuju dengannya tentang "Bagian Bagus").

bobince
sumber
80
Ahhhh, akhirnya jawaban yang bijaksana, menyeluruh. Jika saya bisa +10, saya akan. Mengetahui kerangka kerja tidak berarti Anda dapat memprogram JavaScript secara efektif.
Tim Down
6
Terima kasih banyak untuk jawaban yang dipikirkan dengan baik. Saya ingin menambahkan bahwa menggunakan kerangka kerja bisa sangat bermanfaat jika Anda tahu bagaimana hal itu dilakukan. Anda harus belajar melakukan hal-hal itu sendiri sebelum beralih ke suatu kerangka kerja.
Javier Parra
4
@Aniel: sebenarnya tidak begitu, thisterikat dengan cara apa pun Anda mengaksesnya. Cobalah:, var o= {b: function(){alert(this===o);}};lalu o['b']();-> true. Dan jika Anda ingin benar - benar aneh, (o['b'])()-> true, tetapi (c= o['b'])()-> false, dan hanya di Mozilla, (true? o['b'] : null)()-> true. W, T, dan memang, F.
bobince
7
Sempit! Ini bukan seolah-olah mengetahui semua kebiasaan browser yang berbeda membuat Anda menjadi JS coder yang lebih baik. Mungkin lebih banyak kredibilitas jalanan di antara rekan-rekan Anda ... Abstraksi membuat hidup lebih mudah dan merupakan bagian penting dari JS jadi saya akan mengatakan mengetahui kerangka kerja membuat Anda pembuat kode JS yang lebih baik daripada orang yang tidak dan ingin melakukan banyak hal jauh.
Vince Panuccio
19
Sir Psycho: perhatikan bahwa tidak ada jawaban yang menyebutkan DOM, yang ada di perpustakaan besar untuk membantu Anda. Kerangka kerja tidak dapat melindungi Anda dari hal-hal yang disebutkan di sini . Hal ini penting bagi siapa saja yang melakukan skrip browser, menggunakan kerangka kerja atau tidak.
Tim Down
248

Itu bisa dinonaktifkan.

grafisdivine
sumber
12
+1, saya sangat bosan dengan halaman yang bahkan tidak peduli dengan dasar-dasar degradasi yang bagus karena "sangat sulit dan semua orang telah mengaktifkan javascript".
wasatz
27
+1. Halaman yang tidak berfungsi tanpa JavaScript adalah halaman yang akan rapuh walaupun JS diaktifkan.
bobince
9
@iconiK Saya akan pergi dan memberi tahu semua klien Government saya yang telah menonaktifkan JavaScript secara global untuk alasan keamanan bahwa mereka semua bodoh, boleh?
graphicdivine
16
-1 ini di luar topik dan tidak ada hubungannya dengan mengetahui tentang javascript sebagai bahasa. Ini hal yang baik untuk dipertimbangkan ketika merancang aplikasi web, tetapi itu masih bukan jawaban yang ada di utas ini.
TM.
24
@ TM, tidak, itu benar-benar pertimbangan penting. Ini harus berada di garis depan pikiran Anda saat Anda menguji nilai sebelum memasukkannya ke dalam basis data atau memiliki satu-satunya cara untuk masuk ke situs web Anda melalui kotak sembulan javascript mewah. Omong-omong .... Saya pikir saya perlu memeriksa sesuatu.
Elizabeth Buckwalter
75

Memahami hal-hal yang ditulis dalam Javascript Crockford : The Good Parts adalah asumsi yang cukup bagus bahwa seseorang adalah programmer JS yang layak.

Anda dapat mengetahui cara menggunakan pustaka yang bagus seperti JQuery dan masih belum tahu bagian-bagian tersembunyi dari Javascript.

Catatan lain adalah alat Debugging di berbagai browser. Seorang programmer JS harus tahu cara men-debug kodenya di browser yang berbeda.

Oh! Dan mengetahui JSLint akan benar-benar melukai perasaan Anda !!

bron
sumber
+1 Tetap lupa tentang buku itu, rekomendasi yang bagus.
David
8
Ada juga banyak video Crockford yang instruktif dan berwawasan luas di developer.yahoo.com/yui/theater - dan saya rasa saya tidak perlu menyebutkan crockfordfacts.com :-)
ndim
+1 - JSLint adalah hal yang luar biasa ketika Anda mencoba mengembangkan JS untuk kerangka kerja yang tidak memiliki dukungan debugging tertanam ( batuk Siebel, batuk PDF).
J. Polfer
49

Jika Anda ingin menjadi ninja JavaScript sejati, Anda harus tahu jawaban untuk setiap pertanyaan di Kuis Kesempurnaan membunuh JavaScript .

Contoh untuk membangkitkan selera Anda:

(function f(f){ 
  return typeof f(); 
})(function(){ return 1; });

Apa yang dikembalikan ungkapan ini?

  • "jumlah"
  • "tidak terdefinisi"
  • "fungsi"
  • Kesalahan
Skilldrick
sumber
10
Lihat jawaban saya: codingspot.com/2010/02/…
CMS
@ CMS Sangat bagus! Apakah Anda benar-benar mendapatkan yang pertama kali benar, atau apakah ini termasuk beberapa penelitian?
Skilldrick
7
Skilldrick: Saya pikir saya mendapatkan semuanya pada saat pertama, saya sering membaca Standar ECMA-262 (Saya tahu, saya aneh :-)
CMS
46

Anda tidak tahu JavaScript jika Anda tidak tahu:

  1. Penutupan
  2. Warisan berbasis prototipe
  3. Pola modul
  4. W3C-DOM
  5. Cara kerja acara
edwin
sumber
Saya sangat suka jawaban ini. Ini membantu Anda menemukan area gelap dalam pengetahuan Anda. Peristiwa adalah satu-satunya hal yang masih agak tidak jelas bagi saya dalam daftar periksa ini (jika pola modul berarti "jangan merusak namespace global" dan termasuk lingkup dan operator var).
silviot
11
Saya berpendapat itu You don't know JavaScript if you don't know The W3C-DOM. Kedua hal itu berbeda.
gblazex
37

..bahwa javascript bukan java :)

Banyak, banyak orang mulai dengan pengembangan situs web telah mengatakan kepada saya bahwa javascript hanyalah java!

Sripathi Krishnan
sumber
+1 Poin ini sangat mendasar!
amelvin
71
“JavaScript adalah untuk Java seperti karpet untuk mobil.”
Josh Lee
1
Javascript hampir sama dengan Java sama seperti C # mirip dengan C. Tentu ada sintaks yang terlihat agak mirip, tetapi caranya sangat berbeda.
Earlz
4
kecuali mereka menggunakan Google Web Toolkit
Afriza N. Arief
Menariknya, Microsoft mendasarkan fungsi tanggal yang sesuai Y2k di JScript untuk IE3 di java.util.Date.
Bayard Randel
27
  1. Biasakan diri Anda dengan minimal satu perpustakaan Javascript (Jquery, Prototype, dll).

  2. Pelajari cara menggunakan alat debugging dari browser utama (MSIE 7-8, Firefox, Chrome, Safari)

  3. Baca di industri: situs web Douglas Crockford adalah harta karun sementara Ajaxian.com adalah blog yang bagus untuk mengikuti ide-ide baru, menarik, dan aneh untuk Javascript. Ada sejumlah sumber daya lain tetapi itu adalah yang paling membantu saya.

David
sumber
Serius, mengapa suara turun?
David
+1 Terlalu banyak pemungutan suara taktis, orang-orang yang serius seharusnya hanya menaikkan nilai jawaban yang baik tidak hanya mencoba untuk menggerakkan jawaban mereka ke atas.
amelvin
1
@Murali VP Saya membuat asumsi untuk "dikenal" Javascript dalam konteks browser. Tepat setelah beberapa hal yang setara dengan hello world, Anda perlu mencari tahu kesalahan logis dan runtime Anda, yang bisa berbeda per penerjemah. Saya tidak akan mengklaim tahu bahasa apa pun jika saya tidak tahu cara men-debug-nya. Adapun persyaratan kerangka kerja, Javascript adalah jenis seperti awal C, di mana perbedaan implementasi yang halus akan menyabot yang tidak waspada; jQuery & prototypejs mengatasi perbedaan-perbedaan ini dan menjadikan Javascript alat yang andal sambil menambahkan panggilan API tambahan untuk meningkatkan produktivitas. (lanjutan)
David
@Murali VP Agar adil, Javascript telah datang jauh sejak saya mulai menggunakannya di tahun 90-an dan dengan pengecualian Microsoft, para penerjemah Javascript lainnya telah melakukan pekerjaan yang mengesankan untuk mematuhi spesifikasi dan bermain adil.
David
@ David terima kasih atas penjelasannya. Cenderung setuju dengan Anda.
VP Murali
24

Objek dan fungsi Javascript sebagai warga negara kelas satu , panggilan balik , untuk tidak melupakan acara dan kemudian JQuery .

Sarfraz
sumber
20
Ah jQuery, kerangka JS overhyped!
VP Murali
24

Javascript itu bukan sesuatu yang bisa dipelajari dalam satu jam!

Ashwin Prabhu
sumber
4
tetapi ini tampaknya menjadi kepercayaan umum
Livingston Samuel
23

Variabel bersifat global kecuali dinyatakan sebagai lokal !!

Buruk (DoSomething () hanya disebut 10 kali):

function CountToTen()
{
  for(i=0; i< 10; i++)
  {
    DoSomething(i);
  }
}

function countToFive()
{
  for(i=0; i<5; i++)
  {
    CountToTen();
  }
}

CountToFive();

Baik (DoSomething () disebut 50 kali sebagaimana dimaksud):

function CountToTen()
{
  var i;
  for(i=0; i< 10; i++)
  {
    DoSomething(i);
  }
}

function countToFive()
{
  var i;
  for(i=0; i<5; i++)
  {
    CountToTen();
  }
}

CountToFive();
mereka memanggil saya
sumber
2
Aku bahkan tidak pernah mempertimbangkan ini. Poin yang sangat bagus.
zaitun
6
Saya mencoba dan membiasakan diri for (var i=0;dalam semua putaran saya
ghoppe
2
Crockford lebih suka menempatkan bagian varatas fungsi, karena itu tidak menipu Anda tentang ukuran ruang lingkup variabel. js2-modeakan mengeluh jika Anda berada var idi dua forloop terpisah di fungsi yang sama, karena itu menunjukkan Anda pikir Anda memiliki dua variabel yang terpisah, dan Anda tidak. Namun demikian, saya mencoba untuk tidak pernah varmemisahkan hal-hal dari tempat saya menginisialisasi mereka.
Kragen Javier Sitaker
Saya tidak peduli jika itu tidak dicakup. Saya tidak tahan jika ada variabel yang menyatakan 20 baris sebelum digunakan
Juan Mendes
8

Untuk mengetahui bahwa Javascript pada awalnya disebut LiveScript dan awalan 'Java' dilampirkan untuk tujuan pemasaran bukan karena Java dan Javascript terkait (yang tidak).

Oh dan untuk memiliki 'Javascript: The Definitive Guide' versi David Flanagan (informasi ini ada di halaman 2).

... dan untuk menghargai orang-orang yang telah pergi sebelumnya dalam mencoba mengaburkan dokumen Internet Explorer 4.all [] dan dokumen Netscape Navigator 4.pemain [] sebelum orang-orang seperti Jquery menghilangkan rasa sakit.

EDIT:

Seperti @Kinopiko tunjukkan bahwa JavaScript disebut sebagai proyek Mocha awalnya ( beberapa sumber juga menganggap itu disebut proyek LiveWire) tetapi secara umum diterima bahwa bahasa (ditulis oleh Brendan Eich) dijadwalkan akan dirilis sebagai LiveScript sebelum awalan Java diadopsi pada rilis pada awal 1996.

amelvin
sumber
+1 untuk memilih bit tit dari Douglas Crockford!
gath
1
Saya pikir JavaScript pada awalnya disebut Mocha?
1
@Kinopiko Menurut buku Javascript: The Definitive Guide '3ed (Juni 1998) karya David Flanaghan saya menyebutnya LiveScript.
amelvin
@gath Suatu hari ketika Anda belajar sesuatu adalah hari yang baik!
amelvin
1
@amelvin Setiap hari adalah hari sekolah.
Kolonel Sponsz
8

Orang harus menyadari tentang hal berikut untuk mengatakan "Saya Tahu JavaScript":

  1. JavaScript bagus tapi DOM adalah titik sakit
  2. Masalah lintas browser dapat membuat Anda menjadi gila
  3. Kecuali jika kode diuji pada setidaknya 4 browser bagus yang berbeda, Anda tidak bisa mengatakan bebas bug
  4. Penutupan .............. Harus tahu
  5. Ini berdasarkan prototipe ........... Bagus menyenangkan untuk mempelajari ini
  6. kata kunci debugger ..... Membantu dalam krisis
Anil Namde
sumber
Daftar yang bagus, cukup ramping. Saya tertawa di "4" browser yang bagus. :) Saya pikir nomor 7 harus menjadi kebencian yang sehat untuk browser IE di bawah versi 8.
Shyam
@ Syam, apa yang membuatmu berpikir kita seharusnya tidak memiliki kebencian yang sehat terhadap IE8? Saya masih memiliki masalah di IE8 ... masalah yang hanya ada di IE8.
Tracker1
@ Pelacak1: Akan selalu ada masalah. Dan memukul browser yang belum saya sentuh, yah, itu akan sedikit tidak adil. Itulah mengapa saya menertawakan 4 browser yang bagus: 'Firefox, Chrome, Safari dan Opera' adalah satu-satunya yang saya kembangkan. Saya berhenti meretas untuk IE, saya hanya membuatnya menjalankan kode Fisher Price, seolah-olah JavaScript akan dinonaktifkan.
Shyam
7

JavaScript itu jauh lebih berbeda dari bahasa lain daripada yang Anda kira. Tonton Google Tech Talk yang hebat ini untuk mendapatkan kesan: http://www.youtube.com/watch?v=hQVTIJBZook

ericteubert
sumber
1
+1 Ini adalah penjelasan yang bagus tentang cara menghentikan penghisapan JavaScript. Ini patut ditonton setelahnya: yuiblog.com/crockford
Kolonel Sponsz
Presentasi Crockfod yang baik lainnya ("Bahasa Pemrograman JavaScript" 4 bagian) video.yahoo.com/watch/111593/1710507
Alex K.
7

Apa yang harus diketahui oleh setiap pembuat kode javascript?

Bagaimana, saya dapat mematikan upaya Anda dengan 2 klik. Jadi berikan fallback jika memungkinkan.

Khainestar
sumber
Anda mungkin juga menghapus instalan browser web Anda. Ada sangat sedikit orang yang menonaktifkan javascript hari ini. Mereka yang melakukannya mungkin tidak perlu menelusuri web. Satu-satunya pengecualian untuk ini adalah bahwa perayap web perlu mengakses konten publik Anda dan jangan mengandalkan JS untuk melakukannya.
Jean Vincent
Saya lebih tertarik menyediakan cara non-JS untuk mengakses sesuatu. Saya tahu orang-orang yang menelusuri dengan JS dinonaktifkan, atau menggunakan pembaca layar. Mereka tidak selalu bermain baik dengan JS. Saya telah melihat situs-situs yang halaman login sederhana dikirimkan melalui ajax tanpa mundur sama sekali. Tanpa JS, tanpa login. Situs ini bahkan tidak menggunakan banyak JS, hanya untuk mengirimkan formulir.
Khainestar
Saya percaya bahwa pengguna yang sengaja menonaktifkan JS seperti yang Anda maksudkan, sangat jarang hari ini, tentunya jauh lebih sedikit dari 10 tahun yang lalu. Inilah sebabnya saya tidak mengerti mengapa kita harus mendesain situs dua kali untuk orang-orang yang sebenarnya tidak ingin mengunjungi situs Anda. Jadi, dalam contoh Anda, mereka tidak bisa masuk, jadi apa? Hal lain adalah sama sekali tidak ada cara Anda dapat merancang situs modern tanpa JS.
Jean Vincent
6

Anda tahu javascript jika Anda dapat menggunakan Array, Number, String, Date dan Object secara efektif. Poin plus untuk Matematika dan RegExp. Anda harus dapat menulis fungsi dan menggunakan variabel (dalam ruang lingkup yang benar, yaitu sebagai 'metode' suatu objek).

Saya melihat beberapa komentar tentang mengetahui penutupan, sintaks fungsi boros, blabla. Semua itu tidak relevan untuk pertanyaan ini. Itu seperti mengatakan Anda seorang pelari jika Anda dapat menjalankan tanda hubung 100m dalam waktu 11 detik.

Saya mengatakan mungkin perlu beberapa minggu untuk menjadi mahir dalam javascript. Setelah itu butuh bertahun-tahun dan puluhan buku dan ribuan jalur pemrograman untuk menjadi ahli, seorang ninja, dll.

Tapi itu bukan pertanyaannya.

Oh, dan DOM bukan bagian dari javascript, dan juga bukan jQuery. Jadi saya pikir keduanya sama-sama tidak relevan dengan pertanyaan juga.

Michiel van der Blonk
sumber
1
Penutupan ada apakah Anda peduli atau tidak. Ini kuat tetapi dapat dengan mudah disalahgunakan. Anda tidak tahu bahasanya jika Anda tidak tahu cara kerjanya.
gblazex
Terlepas dari kerusakan yang diakibatkannya, seperti kebocoran memori, terutama pada teman sejati kita Internet Explorer 6.
Marcel Korpel
4

Setelah membaca semua di atas, itu juga baik-baik saja untuk belajar Javascript dengan menggunakan kerangka kerja seperti jQuery. Yang benar adalah ini adalah cara pertama yang dilakukan banyak orang pada JS. Tidak perlu malu.

Sup
sumber
4

Array . lengthMetode bukanlah hitungan item array, tetapi indeks tertinggi. bahkan ketika item diatur keundefined

var a = [];
a.length;   // === 0
a[10];      // === undefined
a[10] = undefined;
a.length;   // === 11
a.pop();    // === undefined
a.length;   // === 10

perilaku ini sulit dibedakan dari bug desain bahasa ..

rev mykhal
sumber
3

jQuery akan menjadi rekomendasi terbaik saya. Bukan hanya untuk kode itu sendiri, itu adalah idiom, gaya, pemikiran di baliknya yang paling layak ditiru.

Duffymo
sumber
2
+1 Jquery telah merevolusi penggunaan javascript saya.
amelvin
1
Garis besar argumen yang bagus. Memperluas akan membuatnya menjadi jawaban yang bagus .
Donal Fellows
jQuery memaksa Anda ke mode prosedural. Saya lebih suka menulis OO JS
Juan Mendes
Tidak ada yang ajaib tentang orientasi objek. Saya lebih suka menggunakan kerangka kerja yang dirancang oleh John Resig dan digunakan oleh ribuan pengembang lain daripada apa pun yang Anda atau saya akan tulis, terlepas dari mode.
duffymo
3

Javascript itu adalah bahasa yang paling banyak digunakan di dunia. (Mungkin)

zaf
sumber
8
Bahasa alami asli yang paling banyak digunakan adalah Mandarin. Apakah mengetahui hal itu menjadikan Anda seorang pembicara bahasa Mandarin? Apakah mengetahui fakta itu ada hubungannya dengan pemahaman Anda akan bahasa tersebut?
Zano
11
Bahasa yang paling banyak digunakan di dunia adalah kode genetik DNA yang mengendalikan sintesis protein di dalam sel.
Ernelli
Sebelum Mandarin dan DNA, bahasa Cinta pertama-tama harus digunakan: dengan demikian, ia menang. BAM!
Christopher
3

Belajar bahasa dengan sangat baik dan memahami berbagai keanehannya berasal dari pengalaman bertahun-tahun. Jika Anda ingin menjadi programmer yang lebih baik, saya akan mengatakan, memahami pola desain, bagaimana dan kapan menggunakannya dan / atau bahkan ketika Anda menggunakannya tanpa menyadarinya; arsitektur teknis & pengalaman pengguna.

Mengetahui bahasa (JavaScript) berarti Anda dapat mengambil kerangka kerja apa pun dan menggunakannya sesuka hati. Anda pasti harus menyelami kode sumber, dan jika semua yang Anda tahu adalah sintaks kerangka kerja atau 2 atau 3, maka Anda tidak akan melangkah jauh. Dengan mengatakan itu, masuk ke beberapa kode sumber kerangka kerja yang berbeda mungkin merupakan salah satu cara terbaik untuk melihat bagaimana JavaScript dapat digunakan. Bercakap-cakap dengan melangkah melalui kode di Firebug atau Inspektur Web, kemudian memeriksa Dokumentasi JavaScript, terutama dokumen Mozilla dan Webkit, untuk mendapatkan pemahaman lebih lanjut tentang apa yang Anda lihat.

Memahami perbedaan antara Pemrograman Berorientasi Objek dan Fungsional, bahwa JavaScript adalah campuran yang seksi dari keduanya dan kapan serta bagaimana menggunakan keduanya untuk membuat basis kode pembunuh dan aplikasi yang mengagumkan akan membuat Anda menjadi Programmer JavaScript yang lebih baik.

Cukup membaca beberapa buku, terutama "bagian bagus" Crockford yang hanya menyajikan pendapatnya tentang apa yang baik dalam JavaScript, sementara melewatkan sebagian besar bagian yang mengagumkan dari JavaScript akan membuat Anda salah langkah.

Memeriksa kode yang ditulis oleh seseorang seperti Thomas Fuchs di sisi lain akan memberi Anda lebih banyak wawasan tentang kekuatan menulis JavaScript yang luar biasa dan efisien.

Mencoba untuk menghafal beberapa gotchas atau WTF tidak akan banyak membantu, Anda akan mengambilnya jika Anda mulai mengkodekan dan melangkah melalui kode perpustakaan / kerangka kerja, terutama yang berkomentar bermanfaat, untuk melihat mengapa mereka telah menggunakan tertentu properti / nilai dan bukan yang lain mengapa dan kapan sebaiknya menggunakan operan dan operator tertentu, ini semua ada dalam kode kerangka yang digunakan orang. Bagaimana lebih baik daripada belajar dengan contoh? : ^)

christos constandinou
sumber
+1 karena tidak memuja Crockford. Saya memperlakukan pandangannya seperti saya melakukan pengkhotbah di gereja. Saya menghormati apa yang mereka katakan, tetapi bawa semuanya dengan sebutir garam.
Juan Mendes
2

Dalam Javascript, Kinerja penting.

Tidak ada kompiler yang cerdas untuk mengoptimalkan kode Anda sehingga Anda harus lebih berhati-hati saat menulis kode javascript daripada bahasa seperti C #, Java ...

caltuntas
sumber
1
Bahkan kompiler Browser sangat baik dalam mengoptimalkan kode Anda.
Eduardo
1
Chrome sangat pintar dalam mengoptimalkan kode Anda, jawaban ini tidak benar dengan semua mesin JS baru
Juan Mendes
Bagaimana dengan IE, browser seluler?
caltuntas
1

objek literal karena mereka sangat bagus untuk menulis.

kotoran
sumber
0
  1. Mengetahui bahwa ada kehidupan dengan dan tanpa with()dan di mana harus menarik garis.
  2. Anda dapat membuat kesalahan khusus dengan throwpernyataan untuk menghentikan runtime javascript secara sengaja.
FK82
sumber
-1

JavaScript tidak mendukung pemisahan kata kunci kembali dan pernyataan kembali dengan karakter baris baru seperti kode berikut (atau coba di halaman jsFiddle saya )

function foo()
{
    return
    {
        bar: 'something'
    };
}

$(function()
{
    document.write(foo());
});

Saya tidak mengerti mengapa JavaScript tidak mendukung gaya ini karena jauh lebih mudah untuk membaca kode sumber JavaScript yang sangat kompleks bila dibandingkan dengan gaya default JavaScript.

PS. Saya telah menulis JavaScript hampir 6 tahun. Tetapi saya baru saja menemukan bug ini pada diri saya ketika saya mencoba menjalankan fungsi berikut. Itu selalu mengembalikan tidak terdefinisi. Ketika saya menggunakan debugger dan masuk ke fungsi ini semuanya berfungsi dengan baik. Saya pikir itu harus menjadi bug pemrograman terburuk dalam hidup saya.

function JqGridInlineEditor_GenerateTool(cellvalue, options, rowObject, disableEdit, disableDelete)
{
    return 
        (!disableEdit ? '<a class="button edit" href="javascript: void(0);" onclick="JqGridInlineEditor_EditRow(this, \'{0}\');return false;" title="{2}"><img src="{1}" alt="{2}" /></a>'.format(options.rowId, getUrl('~/Content/Icons/Edit.gif'), 'Click here to Edit or \nDouble-click row to edit.') : '') +
        (!disableDelete ? '<a class="button delete" href="javascript: void(0);" onclick="JqGridInlineEditor_DeleteRow(this, \'{0}\');return false;" title="{2}"><img src="{1}" alt="{2}" /></a>'.format(options.rowId, getUrl('~/Content/Icons/Delete.png'), 'Click here to Delete or \nSelect row and then press Delete') : '') +
        (!disableEdit ? '<a class="button save" style="display:none" href="javascript: void(0);" onclick="JqGridInlineEditor_SaveRow(this, \'{0}\');return false;" title="{2}"><img src="{1}" alt="{2}" /></a>'.format(options.rowId, getUrl('~/Content/Icons/Save.png'), 'Click here to Save or \nPress Enter') : '') +
        (!disableEdit ? '<a class="button cancel" style="display:none" href="javascript: void(0);" onclick="JqGridInlineEditor_RestoreRow(this, \'{0}\');return false;" title="{2}"><img src="{1}" alt="{2}" /></a>'.format(options.rowId, getUrl('~/Content/Icons/Cancel.png'), 'Click here to Cancel or \nPress Esc') : '');
}
Soul_Master
sumber
3
Dalam JavaScript, karakter baris baru biasanya bertindak sebagai pemisah pernyataan; hanya ketika tidak mungkin sebuah pernyataan telah berakhir (misalnya, var foo = "bar" +) pengurai membaca.
Marcel Korpel
JsFiddle lain. jsfiddle.net/Soul_Master/BxrDJ
Soul_Master
2
@ Marscel - Itu tidak sepenuhnya benar; misalnya, dua baris var foo = 5dan -1;akan menghasilkan foo diatur ke 4, meskipun masing-masing adalah pernyataan yang valid sendiri.
Ben Blank
4
Ini karena bahasa menyuntikkan titik koma secara otomatis ke pernyataan yang terpisah. Ini adalah gotcha dengan bahasa. Pernyataan pengembalian Anda akan dikonversi menjadi ini: kembali; {key: value,} Untuk menghindari masalah ini, Anda harus mengadopsi praktik meletakkan titik koma di baris yang sama, seperti ini: return {key: value}; Juga, bantulah diri Anda sendiri dan dapatkan salinan Douglas Crockford: The Good Parts. Ini jelas disebutkan dalam buku ini.
Rajat
@ Ben - Kasus yang menarik, terima kasih telah menunjukkan itu. Yang mengatakan, saya akan merekomendasikan untuk tidak bergantung pada kasus tepi ini dan hanya meletakkan segala sesuatu pada satu baris yang diakhiri dengan titik koma dan hanya menempatkan kode Anda pada beberapa baris ketika sebuah baris berakhir dengan sesuatu pernyataan atau ekspresi tidak bisa diakhiri dengan .
Marcel Korpel
-3

Karena JS adalah bahasa fungsional, seorang programmer JS yang baik harus mampu menulis Y-combinator dan menjelaskan cara kerjanya dari atas kepala.

pengguna187291
sumber
1
Apa yang salah dengan bisa menulis Y-combinator? Dan ya, javascript adalah bahasa fungsional. Jika Anda ingin mengatakan Anda "tahu javascript" pemahaman yang baik tentang pemrograman fungsional sangat diperlukan.
Raynos
C juga dapat digunakan sebagai bahasa fungsional.
kzh
Saya telah membaca tentang Y combinator baru-baru ini, memahami cara kerjanya dan dalam kasus apa ini dapat digunakan .. tetapi tidak pernah menemukan contoh di mana saya tidak dapat menulis ulang masalah untuk tidak memerlukan Y combinator.
Evert
-5

... tentang Google Web Toolkit , yang berarti proyek javascript Anda mungkin dapat dikembangkan dengan cara yang jauh lebih nyaman.

Viktor Sehr
sumber
2
GWT sebenarnya bukan JavaScript, ini adalah cara Jawa menulis JavaScript.
Livingston Samuel
... dan setiap programmer Javascipt harus mengetahuinya.
Viktor Sehr
bahwa proyek javascript Anda mungkin dapat dikembangkan dengan cara yang jauh lebih menyenangkan.
Viktor Sehr
6
Saya pikir Javascript lebih mudah ditangani daripada Java, secara pribadi.
timw4mail