En İyi Uygulamalarım – JavaScript
1. Önbelleği devre dışı bırakın
Firefox:
Geliştirici araçlarını açın -> Ayarları açın (F1) -> "HTTP önbelleğini devre dışı bırak (araç kutusu açıkken)"
Chrome:
DevTools’u açın -> Ayarları açın (F1) -> "Disable cache (while DevTools is open)"
2. JS konsolunu açık tutun
DevTools’ta Konsol sekmesini açın ve açık bırakın; böylece 1. adım etkin kalır, ayrıca ağdaki ve JS’teki hataları da fark edersiniz.
Ayrıca, siz bakmayı unuttuğunuzda bile JS hatalarını daha da iyi gösteren şu eklenti de tavsiye edilir:
3. JavaScript: Mutlaka okunması gereken “You Don't Know JS”
- You Don't Know JS (1st Edition)
thiskullanımından neden kaçınılması gerektiğini açıklıyor- JS’te neden bazen tuhaf görünen şeyler olduğunu açıklıyor (anahtar kavramlar: lexical scope, closure’lar)
4. Noktalı virgül
- Her zaman koyun
- Zorunlu değildir, ama örneğin şu tuzaktan kaçınmanıza yardımcı olabilir: Stack Overflow
- JavaScript noktalı virgülü otomatik olarak ekler:
// you want to return 5 and have ugly formatting:
return
5
// JavaScript Interpretation:
return;
5;
5. Mantıksal operatörler && ve ||
- Java’da
a && bvea || b, Boole cebirine göre değerlendirilir.avebboolean olmak zorundadır. - JavaScript’te ise:
a && bifadesindeatrue isebdöndürülüra || bifadesindeafalse isebdöndürülür
Böylece ifadeler (expression) de bağlanabilir ve bu, akla gelebilecek en kısa if deyimini mümkün kılar – bir syntactic sugar:
isAdmin && showDeleteButton();- (Aslına bakılırsa bu artık bir deyim (statement) değil)
Bu yöntem varsayılan değerler için de sıkça kullanılır:
let sendNewsletter = form.getNewsletterOptIn() || false;
6. JavaScript pass-by-reference mı, yoksa pass-by-value mu?
JavaScript’te durum ilginç. Bir örnek:
function changeStuff(a, b, c) {
a = a * 10;
b.item = "changed";
c = {item: "changed"};
}
var num = 10;
var obj1 = {item: "unchanged"};
var obj2 = {item: "unchanged"};
changeStuff(num, obj1, obj2);
console.log(num);
console.log(obj1.item);
console.log(obj2.item);
Şu çıktıyı üretir:
10
changed
unchanged
obj1 hiç referans olmasaydı, obj1.item üzerindeki değişikliğin fonksiyonun dışındaki obj1 üzerinde hiçbir etkisi olmazdı.
Argüman gerçek bir referans olsaydı, her şey değişirdi: num 100 olur, obj2.item da “changed” değerini içerirdi. Oysa num 10 olarak kalıyor ve
obj2.item “unchanged” olarak kalıyor.
Aslında aktarılan öğe değer olarak aktarılır. Ancak değer olarak aktarılan şeyin kendisi bir referanstır. Teknik olarak buna call-by-sharing denir.
Pratikte bunun anlamı şudur: Parametrenin kendisini değiştirirseniz (num ve obj2 örneğinde olduğu gibi), bu, fonksiyona aktarılan asıl nesneyi
etkilemez. Ancak parametrenin iç değerlerini değiştirirseniz, bu değişiklikler kalıcı olur (obj1 örneğinde olduğu gibi).