Her JavaScript programcısı ne bilmeli? [kapalı]


368

Her JavaScript programcısının "JavaScript biliyorum" diyebilmesi için bilmesi gereken bir dizi şey var mı?

Yanıtlar:


590

JQuery değil. YUI değil. Yok (vb.)

Çerçeveler yararlı olabilir, ancak genellikle JavaScript ve DOM'un sizden nasıl çalıştığına dair bazen çirkin ayrıntıları gizlerler. Amacınız “JavaScript'i biliyorum” diyebilmekse, bir çerçeveye çok fazla zaman ayırmak buna karşıdır.

Yaptıklarını grok yapmak ve yakalanmamak için bilmeniz gereken, ancak birçok kişi için hemen belirgin olmayan bazı JavaScript dil özellikleri:

  • Bu object.propve object['prop']aynı şey (lütfen kullanmayı bırakabilir misin eval, teşekkürler); nesne özellikleri her zaman dizgidir (diziler için bile); Ne for... iniçindir (ve ne değildir ).

  • Mülkiyet-koklama; nedir undefined(ve neden kokuyor ); neden görünüşte az bilinen inoperatör ile ilgili faydalı ve farklıdır typeof/ undefinedkontroller; hasOwnProperty; amacı delete.

  • Bu Numberveri türü gerçekten şamandıra olduğu; şamandıra kullanmanın dilden bağımsız zorlukları; parseIntsekizli tuzaktan kaçınmak .

  • Yuvalanmış fonksiyon kapsam belirleme; varkazara küresellerden kaçınmak istediğiniz kapsamda kullanmanın gerekliliği ; kapsamların kapaklar için nasıl kullanılabileceği; kapatma döngü sorunu .

  • Küresel değişkenlerin ve windowözelliklerin nasıl çarpıştığı; küresel değişkenlerin ve belge öğelerinin IE'de nasıl çarpışmaması, nasıl çarpması gerektiği; bundan varkaçınmak için küresel kapsamda da kullanılması gerekliliği .

  • İfadeden önce bir tanımdan önce bir tanımı function' kaldırmak ' için nasıl davranır ; işlev ifadeleri ve işlev ifadeleri arasındaki fark; adlandırılmış işlev ifadeleri neden kullanılmamalıdır .

  • Yapıcı nasıl çalışır, prototypeözellik ve newoperatör gerçekten çalışır; gerçekte istediğiniz normal sınıf / alt sınıf / örnek sistemini oluşturmak için bundan faydalanma yöntemleri ; prototip oluşturmak yerine kapatma tabanlı nesneleri kullanmak isteyebileceğiniz zaman. (Çoğu JS öğretici materyali bu konuda kesinlikle korkunç; kafamda düz tutmam yıllar aldı.)

  • thisArama zamanında nasıl belirlenir, bağlı değil; sonuç olarak yöntem geçişinin diğer dillerden beklediğiniz gibi çalışmadığı ; nasıl kapanır veya Function#bindbunun üstesinden gelmek için kullanılabilir.

  • Diğer ECMAScript Beşinci Baskı gibi özellikler indexOf, forEachve işlevsel-programlama yöntemleri üzerindeArray ; eski tarayıcıları kullanabilmeniz için nasıl düzeltileceği; kompakt, okunabilir kod elde etmek için bunları satır içi anonim işlev ifadeleriyle kullanma.

  • Tarayıcı ve kullanıcı kodu arasındaki kontrol akışı; eşzamanlı ve eşzamansız çalıştırma; kontrol akışı içinde (örneğin odak) yanan olaylar, kontrol döndüğünde meydana gelen olaylar ve zaman aşımları; sözde senkronize bir yerleşik gibi çağırmanın, alertpotansiyel olarak felaketle sonuçlanan yeniden girişe neden olabilir.

  • Çapraz pencere komut dosyası oluşturma instanceof; çapraz pencere komut dosyasının farklı belgelerdeki kontrol akışını nasıl etkilediğini; postMessageumarım bunu nasıl düzeltir.

Son iki maddeyle ilgili bu cevaba bakınız .

En önemlisi, JavaScript'i eleştirel bir şekilde görüntülemeli, tarihsel nedenlerden dolayı kusurlu bir dil (çoğu dilden daha fazla) olduğunu kabul etmeli ve en kötü sorunlardan kaçınmalısınız. Crockford'un bu cephedeki çalışması kesinlikle okumaya değer (her ne kadar% 100 “İyi Parçalar” olduğu konusunda hemfikir değilim).


80
Ahhhh, sonunda düşünceli, kapsamlı bir cevap. +10 yapabilseydim yapardım. Bir çerçeveyi bilmek JavaScript'i etkili bir şekilde programlayabileceğiniz anlamına gelmez.
Tim Down

6
Bu iyi düşünülmüş cevap için çok teşekkürler. Nasıl yapıldığını biliyorsanız, bir çerçeve kullanmanın gerçekten yararlı olabileceğini eklemek isterim. Bir çerçeveye başvurmadan önce bunları kendiniz yapmayı öğrenmelisiniz.
Javier Parra

4
@Daniel: Aslında öyle değil, thishangi yoldan erişirseniz bağlanın . Deneyin:, var o= {b: function(){alert(this===o);}};sonra o['b']();-> true. Ve gerçekten garip istiyorsanız , (o['b'])()-> true, ama (c= o['b'])()-> falseve sadece Mozilla'da, (true? o['b'] : null)()-> true. W, T ve gerçekten de F.
bobince

7
Ne saçma! Tüm farklı tarayıcı tuhaflıklarını bilmek sizi daha iyi bir JS kodlayıcısı yapıyor gibi değil. Belki akranlarınız arasında daha fazla sokak kredisi ... Soyutlamalar hayatı kolaylaştırır ve JS'nin önemli bir parçasıdır, bu yüzden bir çerçeveyi bilmek sizi uzun yoldan yapmayan ve yapmak istemeyenlerden daha iyi bir JS kodlayıcısı yapar diyebilirim.
Vince Panuccio

19
Sir Psycho: Bu cevabın hiçbirinin DOM'den bahsetmediğini unutmayın, bu da size yardımcı olacak büyük kütüphanelerdir. Bir çerçeve sizi burada belirtilenlerden koruyamaz . Bu şeyler, tarayıcı komut dosyası kullanan, bir çerçeve kullanan ya da kullanmayan herkes için önemlidir.
Tim Down

248

Devre dışı bırakılabilir.


12
+1, "Bu çok zor ve herkes yine de javascript etkin" çünkü zarif bozulma temelleri bile rahatsız olmayan sayfalardan bıktım.
wasatz

27
+1. JavaScript olmadan çalışmayan sayfa, JS etkinleştirilmiş olsa bile kırılgan olacak bir sayfadır.
bobince

9
@iconiK Güvenlik nedeniyle küresel olarak devre dışı bırakılmış olan tüm Hükümet müşterime hepsinin sahte olduklarını söyleyeceğim, olur mu?
graphicdivine

16
-1 Bu konu dışı ve gerçekten bir dil olarak javascript hakkında bilmek ile hiçbir şey yoktur. Bir web uygulaması tasarlarken dikkate alınması iyi bir şeydir, ancak yine de bu konuya ait bir cevap değildir.
TM.

24
@TM, hayır, bu gerçekten önemli bir husustur. Veritabanına eklemeden önce değerleri test ederken veya süslü bir javascript açılır kutusu aracılığıyla web sitenize giriş yapmanın tek yoluna sahip olduğunuzda, bu aklınızda ön planda olmalıdır. Konuşan .... Sanırım bir şey kontrol gitmek gerekir.
Elizabeth Buckwalter

75

Crockford'un Javascript: The Good Parts'da yazılan şeyleri anlamak, bir kişinin iyi bir JS programcısı olduğu konusunda oldukça iyi bir varsayımdır.

JQuery gibi iyi bir kütüphanenin nasıl kullanılacağını ve Javascript'in gizli kısımlarını hala bilmediğinizi hemen hemen biliyorsunuz.

Başka bir not, çeşitli tarayıcılarda hata ayıklama araçlarıdır. Bir JS programcısı, kodunu farklı tarayıcılarda nasıl hata ayıklayacağını bilmelidir.

Ah! Ve JSLint bilmek tamamen duygularınızı incitecek !!


+1 Bu kitabı unutmaya devam edin, mükemmel tavsiye.
David

8
Ayrıca developer.yahoo.com/yui/theater adresinde eğitici ve anlayışlı Crockford videoları da var - ve crockfordfacts.com'dan bahsetmeme gerek olmadığını düşünüyorum :-)
ndim

+1 - JSLint, katıştırılmış sıfır hata ayıklama desteğine ( öksürük Siebel, öksürük PDF'leri) sahip bir çerçeve için JS geliştirmeye çalıştığınızda harika bir şeydir .
J. Polfer

49

Eğer gerçek bir JavaScript ninjası olmak istiyorsanız, Perfection'daki her sorunun cevabını bilmeniz gerekir .

İştahınızı hafifletmek için bir örnek:

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

Bu ifade ne döndürüyor?

  • "numara"
  • "Tanımsız"
  • “İşlev”
  • Hata

10
Cevaplarıma bir göz atın: codingspot.com/2010/02/…
CMS

@CMS Çok iyi! Aslında ilk seferde iyi bir şey yaptınız mı, yoksa bu biraz araştırma içeriyor mu?
Skilldrick

7
Skilldrick: Sanırım hepsini ilk kez aldım, ECMA-262 Standardının sık okuyucusuyum (Biliyorum, ben bir ucubeyim :-)
CMS

46

Bilmiyorsanız JavaScript bilmiyorsunuz:

  1. Kapaklar
  2. Prototip tabanlı miras
  3. Modül düzeni
  4. W3C-DOM
  5. Etkinlikler nasıl çalışır?

Bu cevabı gerçekten çok beğendim. Bilginizdeki karanlık alanları tespit etmenize yardımcı olur. Olaylar bu kontrol listesinde bana biraz belirsiz olan tek şeydir (eğer modül kalıbı "global ad alanını tıkamıyorsunuz" ve kapsamları ve var operatörünü içeriyorsa).
silviot

11
Bunu tartışırım You don't know JavaScript if you don't know The W3C-DOM. İki şey farklı.
gblazex

37

javascript java değil :)

Web sitesi geliştirme ile başlayan birçok kişi, bana javascript sadece basit java olduğunu söyledi!


+1 Bu nokta oldukça temel!
amelvin

71
“Halı halıya olduğu için JavaScript Java'ya.”
Josh Lee

1
Javascript, Java ile C # 'ye C kadar benzer. Sözdizimi biraz benzer, ancak farklı bir şekilde görünüyor.
Earlz

4
Google Web Araç Seti'ni kullanmadığı sürece
Afriza N. Arief

İlginç bir şekilde Microsoft, Y2k uyumlu tarih işlevlerini IE3 için JScript'te java.util.Date'de temel aldı.
Bayard Randel

27
  1. En az bir Javascript kütüphanesi (Jquery, Prototype, vb.)

  2. Büyük tarayıcıların (MSIE 7-8, Firefox, Chrome, Safari) hata ayıklama araçlarını nasıl kullanacağınızı öğrenin

  3. Endüstride okuyun: Douglas Crockford'un web sitesi bir hazine hazinesi iken, Ajaxian.com Javascript için yeni, ilginç ve garip fikirlere ayak uydurmak için iyi bir blog. Başka kaynaklar da var ama bunlar bana en çok yardımcı olanlar.


Cidden, aşağı oylama neden?
David

+1 Çok fazla taktiksel oylama, ciddi olarak insanlar sadece iyi tepkileri onaylamalı, sadece tepelerine cevap vermeye çalışmamalıdır.
amelvin

1
@Murali VP Tarayıcılar bağlamında Javascript "bilinen" varsayımı yaptım. Merhaba dünyaya eşdeğer bir şeyden hemen sonra, tercüman başına farklı olabilecek mantıksal ve çalışma zamanı hatalarınızı bulmanız gerekecektir. Nasıl hata ayıklayacağımı bilmeseydim herhangi bir dil bildiğimi iddia etmem. Bir çerçeve gereksinimine gelince, Javascript, küçük uygulama farklılıklarının dikkatsizce sabote edeceği erken C gibidir; jQuery & prototypejs bu farkları açıklar ve üretkenliği artırmak için ek API çağrıları eklerken Javascript'i güvenilir bir araç haline getirir. (devamı)
David

@Murali VP Adil olmak gerekirse, Javascript 90'larda kullanmaya başladığımdan beri uzun bir yol kat etti ve Microsoft hariç, diğer Javascript tercümanları şartnamelere uymak ve adil oynamak için etkileyici çalışmalar yaptı.
David

@ Güzel açıklama için teşekkürler. Sizinle aynı fikirde olma eğilimindedir.
Murali VP

24

Javascript nesneleri ve birinci sınıf vatandaş olarak işlev , geri çağrılar , olayları unutmamak ve sonra JQuery .


20
Ah jQuery, aşırı huzursuz JS çerçevesi!
Murali VP


23

Yerel olduğu bildirilmedikçe değişkenler globaldir !!

Kötü (DoSomething () yalnızca 10 kez çağrılır):

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

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

CountToFive();

İyi (DoSomething () amaçlandığı gibi 50 kez çağrılır):

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

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

CountToFive();

2
Bunu hiç düşünmemiştim bile. Çok iyi bir nokta.
zeytin

6
for (var i=0;Tüm döngülerimde alışkanlık
kazanıyorum

2
Crockford var, fonksiyonun en üstüne koymayı tercih eder , çünkü değişkenin kapsamının boyutu hakkında sizi aldatmaz. aynı işlevde iki ayrı döngüde js2-modeolup olmadığınızdan şikayet edecek , çünkü iki ayrı değişkeniniz olduğunu düşündüğünüz anlamına geliyor ve yok. Yine de, onları başlattığım yerden asla ayrı bir şey yapmaya çalışmıyorum . var iforvar
Kragen Javier Sitaker

Kapsamlı olup olmadığı umurumda değil. Değişken kullanılmadan önce 20 satır olarak bildirilmeye dayanamıyorum
Juan Mendes


8

Javascript'in başlangıçta LiveScript olarak adlandırıldığını bilmek için ve 'Java' önekinin pazarlama amacıyla eklendiğini için Java ve Javascript ilişkili değillerdir.

Oh ve David Flanagan'ın 'Javascript: The Definitive Guide' programının herhangi bir sürümüne sahip olduğun için ( bu bilgi (sayfa 2'de verilmiştir).

... ve Jquery'den önce Internet Explorer 4'ün document.all [] ve Netscape Navigator 4'ün document.layers [] öğelerini gizlemeye çalışırken daha önce gitmiş olanları takdir ettiğiniz için.

DÜZENLE:

@Kinopiko'nun JavaScript'e aslında Mocha projesi denildiğini belirttiği gibi ( bazı kaynaklar buna LiveWire projesi olarak da adlandırılır), ancak genellikle Java öneki kabul edilmeden önce dilin (Brendan Eich tarafından yazılmıştır) LiveScript olarak yayınlanması planlanmaktadır. 1996 başlarında piyasaya sürüldü.


Douglas Crockford'dan tit bitleri toplamak için +1!
topla

1
JavaScript'in aslında Mocha olarak adlandırıldığını düşündüm.

1
@Kinopiko David Flanaghan'ın 'Javascript: The Definitive Guide' 3ed (Haziran 1998) kitabına göre LiveScript olarak adlandırıldı.
amelvin

@gath Bir şey öğrendiğiniz bir gün iyi bir gün!
amelvin

1
@amelvin Her gün bir okul günü.
Albay Sponsz

8

"JavaScript Biliyorum" demek için aşağıdakilerin farkında olunmalıdır:

  1. JavaScript iyi ama DOM acı noktası
  2. Çapraz tarayıcı sorunları sizi çıldırtabilir
  3. Kod en az 4 farklı iyi tarayıcıda test edilmedikçe, hatasız olduğunu söyleyemezsiniz
  4. Kapanış .............. bilmeli
  5. Onun prototip tabanlı ........... Güzel bir bunu öğrenmek için eğlenceli
  6. debugger anahtar kelime ..... Krize yardımcı olur

Güzel liste, oldukça ince. "4" iyi tarayıcılara gülüyorum. :) Bence 7 numara 8 sürümü altında IE tarayıcılar için sağlıklı bir nefret olmalı
Shyam

@Shyam, IE8'in sağlıklı bir nefretine sahip olmamamız gerektiğini düşündüren nedir? Hala IE8 sorunları var ... o sadece IE8 sorunları.
Tracker1

@ Tracker1: Her zaman sorunlar olacaktır. Ve dokunmadım bir tarayıcı dayak, bu biraz haksızlık olur. Bu yüzden 4 iyi tarayıcıya güldüm: `` Firefox, Chrome, Safari ve Opera '' yalnızca geliştirdiğim tarayıcılar. IE için hacklemeyi bıraktım, sanki JavaScript devre dışı bırakılmış gibi Fisher Price kodunu çalıştırıyorum.
Şam


7

Her javascript kodlayıcısının bilmesi gereken nedir?

Nasıl olursa olsun, 2 tıklama ile çabalarınızı kapatabilirim. Bu yüzden mümkünse bir yedek sağlayın.


Web tarayıcınızı da kaldırabilirsiniz. Bu gün javascript'i devre dışı bırakan çok az insan var. Muhtemelen web'e göz atmaya gerek yok. Bunun tek istisnası, web tarayıcılarının genel içeriğinize erişmesi gerektiğidir ve bunu yapmak için JS'ye güvenemez.
Jean Vincent

Daha çok şeylere erişmek için JS olmayan yollar sağlamakla ilgileniyorum. JS'yi devre dışı bırakan veya ekran okuyucu kullanan kişileri tanıyorum. JS ile her zaman iyi oynamazlar. Sitelerin basit bir giriş sayfasının hiç bir geri dönüş olmadan ajax üzerinden gönderildiğini gördüm. JS yok, giriş yok. Site sadece form göndermek için çok fazla JS kullanmıyor.
Khainestar

Bildiğiniz gibi JS'yi kasıtlı olarak devre dışı bırakan kullanıcıların bugün çok nadir, kesinlikle 10 yıl önce çok az olduğuna inanıyorum. Bu yüzden, sitenizi gerçekten ziyaret etmek istemeyen kişiler için neden iki kez bir site tasarlamamız gerektiğini anlamıyorum. Örneğin, giriş yapamazlar, ne olmuş yani? Başka bir şey, JS olmadan modern bir site tasarlamanın kesinlikle hiçbir yolu olmamasıdır.
Jean Vincent


6

Array, Number, String, Date ve Object'i etkili bir şekilde kullanabiliyorsanız javascript biliyorsunuz. Matematik ve RegExp için artı puan. İşlevler yazabilmeli ve değişkenleri kullanabilmelisiniz (doğru kapsamda, yani bir nesnenin 'yöntemleri' olarak).

Kapakları bilmek, abartılı fonksiyon sözdizimi, blabla hakkında bazı yorumlar görüyorum. Bütün bunlar bu soru için oldukça alakasız. Bu, 100 metrelik çizgiyi 11 saniyenin altında çalıştırabiliyorsanız koşucu olduğunuzu söylemek gibidir.

Javascript'te yetkin olmanın belki birkaç hafta sürdüğünü söylüyorum. Bundan sonra, uzman, ninja vb.Olarak yıllarca düzinelerce kitap ve binlerce satır programlama gerekir.

Ama soru bu değildi.

Oh, ve DOM javascript bir parçası değildir ve her ikisi de jQuery değildir. Bu yüzden her ikisinin de soru ile aynı derecede alakasız olduğunu düşünüyorum.


1
İster önemsesin ister istemesin kapanma var. Güçlüdür, ancak kolayca yanlış kullanılabilir. Nasıl çalıştığını bilmiyorsanız dili bilmiyorsunuz.
gblazex



4

Yukarıdakilerin tümünü okuduktan sonra, jQuery gibi bir çerçeve kullanarak Javascript öğrenmek de gayet iyi . Gerçek şu ki, bir çok millet ilk etapta JS'yi aldı. Bunda utanç yok.


4

dizi . lengthyöntemi dizi öğelerinin sayısı değil, en yüksek dizintir. öğe olarak ayarlanmış olsa bileundefined

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

bu davranış bir dil tasarım hatasından ayırt edilemez.


3

jQuery benim en iyi tavsiyem olurdu. Sadece kodun kendisi için değil, deyim, stil, arkasındaki öykünmeye öykünmeye değer.


2
+1 Jquery, javascript kullanımımda devrim yarattı.
amelvin

1
İyi bir argüman anahat. Genişlemek harika bir cevap olurdu .
Donal Fellows

jQuery sizi yordamsal bir moda sokar. Ben çok OO JS yazıyorum
Juan Mendes

Nesne yönelimi hakkında büyülü bir şey yok. John Resig tarafından tasarlanan ve moddan bağımsız olarak sizin veya yazacağımdan başka binlerce geliştirici tarafından kullanılan bir çerçeve kullanmayı tercih ederim.
duffymo

3

Bu javascript dünyada en yaygın kullanılan dildir. (Muhtemelen)


8
En yaygın kullanılan doğal doğal dil Mandarin'dir. Bunun sizi Mandarin konuşmacısı yaptığını bilebilir misiniz? Bu gerçeği bilmek bile dili kavramakla ilgisi var mı?
Zano

11
Dünyada en yaygın kullanılan dil, hücrelerdeki protein sentezini kontrol eden DNA'nın genetik kodudur.
Ernelli

Mandarin ve DNA'dan önce, Sevgi dili konuşlandırılmalıdır: böylece kazanır. BAM!
Christopher

3

Bir dili gerçekten iyi öğrenmek ve çeşitli tuhaflıklarını anlamak (yılların) deneyiminden gelir. Daha iyi bir programcı olmak istiyorsanız, tasarım desenlerini, nasıl ve ne zaman kullanılacağını ve / veya farkında olmadan bile kullandığınızı anlayarak söyleyebilirim; teknik mimari ve kullanıcı deneyimi.

(JavaScript) dilini bilmek, istediğiniz çerçeveyi alabileceğiniz ve istediğiniz zaman kullanabileceğiniz anlamına gelir. Kaçınılmaz olarak kaynak koduna dalmanız gerekecek ve bildiğiniz tek şey sözdizimi bir çerçeve veya 2 veya 3 ise, o zaman ileri gitmeyeceksiniz. Bununla birlikte, birkaç farklı çerçevenin kaynak koduna girmek muhtemelen JavaScript'in nasıl kullanılabileceğini görmenin en iyi yollarından biridir. Firebug veya Web Inspector'daki koda atlayarak, baktığınız şeyi daha iyi anlamak için JavaScript Belgelerini, özellikle Mozilla ve Webkit dokümanlarını kontrol ederek uğraşmak.

Nesneye Dayalı ve Fonksiyonel Programlama arasındaki farkı anlamak, JavaScript'in ikisinin seksi bir karışımıdır ve bir katil kod tabanı ve harika uygulamalar oluşturmak için ne zaman ve nasıl kullanılacağını daha iyi bir JavaScript Programcısı yapar.

Sadece bazı kitapların, özellikle de Crockford'un JavaScript'te neyin iyi olduğuna dair fikirlerini sunan "iyi bölümleri" okumak, JavaScript'in AWESOME bölümlerinin çoğunu atlamak sizi yanlış yere götürecektir.

Öte yandan Thomas Fuchs gibi biri tarafından yazılan kodlara göz atmak, şaşırtıcı ve etkili JavaScript yazmanın gücü hakkında size daha fazla bilgi verecektir.

Birkaç gotcha veya WTF'yi ezberlemeye çalışmak da pek yardımcı olmayacaktır, neden belirli kullandıklarını görmek için bir kütüphane / çerçeve kodunu, özellikle de yararlı bir şekilde yorumlanmış bir kodu kodlamaya ve adım atmaya başlarsanız, özellikleri / değerleri ve diğerlerini değil neden belirli işlenenleri ve işleçleri kullanmanın iyi ve ne zaman iyi olduğu, çerçevenin insanların kullandığı kodda hepsi bu kadar. Örnekle öğrenmekten daha iyi ne olabilir? : ^)


Crockford'a ibadet etmediği için +1. Onun görüşlerini kilisede bir vaiz yapıyormuşum gibi davranıyorum. Söylediklerine saygı duyuyorum ama hepsini bir tane tuzla alıyorum.
Juan Mendes

2

Javascript'te Performans önemlidir.

Kodunuzu optimize etmek için akıllı bir derleyici yok, bu yüzden C #, Java gibi dillerden daha javascript kodu yazarken daha dikkatli olmalısınız ...


1
Aslında Tarayıcı derleyicileri kodunuzu optimize etmekte çok iyidir.
Eduardo

1
Chrome kodunuzu optimize etmede çok akıllı, bu cevap tüm yeni JS motorlarında doğru değil
Juan Mendes

IE, mobil tarayıcılar ne olacak?
caltuntas



0
  1. Olan ve olmayan bir yaşam olduğunu bilmek with()Çizgiyi çizecek ve çizecek ve nerede çizecek .
  2. throwJavascript çalışma zamanını bilerek durdurmak için ifadeyle özel hatalar oluşturabilirsiniz .

-1

JavaScript, return anahtar sözcüğünü ve return ifadesini aşağıdaki kod gibi yeni satır karakteriyle ayırmayı desteklemez (veya jsFiddle sayfamda deneyin )

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

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

JavaScript'in bu stili neden desteklemediğini anlamıyorum çünkü varsayılan JavaScript stiliyle karşılaştırıldığında çok karmaşık JavaScript kaynak kodunu okumak çok daha kolay.

PS. Yaklaşık 6 yıldır JavaScript yazdım. Ancak aşağıdaki işlevi yürütmeye çalıştığımda bu hatayı kendimle buldum. Her zaman tanımsız döndürür. Hata ayıklayıcı kullandığımda ve bu fonksiyona adım attığımda her şey yolunda gidiyor. Bence hayatımdaki en kötü programlama hatası olmalı.

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') : '');
}

3
JavaScript'te, yeni satır karakterleri genellikle ifadelerin ayırıcısı olarak işlev görür; ancak var foo = "bar" +çözümleyicinin okuduğu bir ifade sona erdiğinde (örneğin ).
Marcel Korpel


2
@Marcel - Bu tam olarak doğru değil; örneğin, iki satır var foo = 5ve -1;her biri kendi başına geçerli ifadeler olsa da foo 4 olarak ayarlanacaktır.
Ben Blank

4
Bunun nedeni, dilin deyimleri ayırmak için otomatik olarak noktalı virgül enjekte etmesidir. Bu dil ile bir yakaladım. İade ifadeniz buna dönüştürülür: return; {key: value,} Bu sorunu önlemek için noktalı virgülleri aynı satıra yerleştirme uygulamasını benimsemelisiniz: return {key: value}; Ayrıca, kendinize bir iyilik yapın ve Douglas Crockford: The Good Parts'ın bir kopyasını alın. Bu kitapta açıkça belirtilmiştir.
Rajat

@Ben - İlginç bir durum, buna işaret ettiğiniz için teşekkürler. Bununla birlikte, bu kenar durumlarına güvenmemenizi ve sadece her şeyi noktalı virgülle biten bir satıra koymanızı ve kodunuzu yalnızca bir satır bir ifadenin veya ifadenin bitemeyeceği bir şeyle bittiği zaman birden çok satıra koymanızı öneririm .
Marcel Korpel

-3

JS işlevsel bir dil olduğundan, iyi bir JS programcısı Y-birleştiriciyi yazabilmeli ve başının üstünden nasıl çalıştığını açıklayabilmelidir.


1
Y-birleştiricisinin yazımıyla ilgili sorun nedir? Ve evet javascript işlevsel bir dildir. Eğer "javascript biliyorum" demek istiyorsanız fonksiyonel programlama iyi bir anlayış gereklidir.
Raynos

C işlevsel bir dil olarak da kullanılabilir.
kzh

Son zamanlarda Y birleştiricisini okudum, nasıl çalıştığını ve hangi durumlarda kullanılabileceğini anladım .. ancak Y birleştiriciye ihtiyaç duymamak için bir sorunu yeniden yazamayacağım bir örnek bulamadım.
Evert

-5

... hakkında Google Web Toolkit sizin javascript proje muhtemelen çok daha conveniant şekilde geliştirilebilir anlama geldiğini.


2
GWT gerçekten JavaScript değil, JavaScript yazmanın Java yoludur.
Livingston Samuel

... ve her Javascipt programcısı bunu bilmeli.
Viktor Sehr

Javascript projeniz muhtemelen çok daha uygun bir şekilde geliştirilebilir.
Viktor Sehr

6
Javascript ile başa çıkmak için şahsen Java'dan daha kolay olduğunu düşünüyorum.
timw4mail
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.