Bu bölümde bazı yaygın JavaScript hatalarını işaret ediyor.
Kazayla Atama Operatör kullanma
Bir programcı yanlışlıkla bir atama operatörü kullanıyorsa JavaScript uygulamalarının beklenmedik sonuçlar oluşturabilir (=) yerine bir karşılaştırma operatörü, (==) bir if açıklamada.
Bu if deyim döndürür false x 10 eşit olmadığı için (beklendiği gibi):
var x = 0;
if (x == 10)
Kendin dene " Bu if deyim döndürür true 10 doğrudur, çünkü (değil beklenen belki):
var x = 0;
if (x = 10)
Kendin dene " Bu if deyim döndürür false 0 yanlıştır, çünkü (değil beklenen belki):
var x = 0;
if (x = 0)
Kendin dene " Atama daima atama değerini verir.
Gevşek Karşılaştırma bekleniyor
Düzenli karşılaştırıldığında, veri türü önemli değildir. Bu eğer deyim döndürür true :
var x = 10;
var y = "10";
if (x == y)
Kendin dene " Sıkı karşılaştırıldığında, veri türü önemli. Bu eğer deyim döndürür false :
var x = 10;
var y = "10";
if (x === y)
Kendin dene " Anahtar ifadeleri sıkı bir karşılaştırma kullanmak unutmak yaygın bir hatadır:
Bu durum anahtarı bir uyarı görüntüler:
var x = 10;
switch(x) {
case 10: alert("Hello");
}
Kendin dene " Bu durum anahtarı bir uyarı göstermez:
var x = 10;
switch(x) {
case "10": alert("Hello");
}
Kendin dene " Kafa karıştırıcı Toplama & Birleştirme
Toplama numaraları ekleyerek ilgili.
Birleştirme dizeleri ekleyerek ilgili.
JavaScript her iki işlemleri aynı + operatörünü kullanın.
Bu nedenle, bir sayı olarak bir sayı ekleyerek bir dize olarak bir sayı ekleyerek farklı bir sonuç üretecektir:
var x = 10 + 5; //
the result in x is 15
var x = 10 + "5";
// the result in x is "105"
Kendin dene " iki değişken eklerken, sonucunu tahmin etmek zor olabilir:
var x = 10;
var y = 5;
var z = x + y;
// the result in z is 15
var x = 10;
var y = "5";
var z =
x + y;
// the result in z is "105"
Kendin dene " Yanlış anlaşılma Şamandıralar
JavaScript tüm numaralar 64-bit Kayan nokta sayılar olarak depolanır (Floats) .
JavaScript dahil tüm programlama dilleri, hassas kayan nokta değerleri ile zorluk:
var x = 0.1;
var y = 0.2;
var z = x + y
// the result in z will not be 0.3
if (z == 0.3)
// this if test will fail
Kendin dene " Yukarıdaki sorunu çözmek için, onları çoğalmak ve bölünmeye yardımcı olur:
JavaScript dize Breaking
JavaScript iki satır halinde bir bildiri kırmak sağlayacaktır:
Ama, bir dize ortasında bir açıklama kırma çalışmaz:
Bir kullanmalısınız "backslash" Eğer bir dizede bir açıklama kırmak gerekiyorsa:
misplacing Noktalı virgül
Çünkü bir yanlış noktalı virgül nedeniyle, bu kod bloğu x değerine bakılmaksızın çalıştırır:
if (x == 19);
{
// code block
}
Kendin dene " İade Bildirimi Breaking
Bir satırın sonunda otomatik olarak bir açıklama kapatmak için varsayılan bir JavaScript davranıştır.
Bu nedenle, bu iki örnek aynı sonucu döndürür:
JavaScript ayrıca iki satır halinde bir bildiri kırmak için izin verecektir.
Bu nedenle, örneğin 3 de aynı sonucu döndürür:
Böyle iki hatlarında return ifadesini kırmak Ama eğer, ne olacak:
fonksiyon tanımsız dönecektir!
Niye ya? JavaScript Çünkü senin geliyordu:
açıklama
Bir deyim eksik gibi ise:
var
JavaScript sonraki satırını okuyarak ifadeyi tamamlamaya çalışacak:
power = 10;
Ama bu açıklama tamamlandığında tarihi:
return
JavaScript otomatik şöyle kapanacak:
return;
Kapanış Bunun nedeni (ending) noktalı virgül ile ifadeleri JavaScript isteğe bağlıdır.
tam bir ifadesi olduğu için JavaScript satırın sonunda return ifadesini kapanacak.
return ifadesi kırmak asla.
Adlandırılan Dizinleriyle Dizileri erişme
Birçok programlama dilleri adlı endekslerine dizileri destekler.
Adlandırılmış endekslerine Diziler ilişkilendirilebilir diziler denir (or hashes) .
JavaScript adlı endekslerine diziler desteklemez.
JavaScript'inizde, diziler numaralı endeksleri kullanın:
Örnek
var person = [];
person[0] = "John";
person[1] = "Doe";
person[2] = 46;
var x = person.length;
// person.length will return 3
var y = person[0];
// person[0] will return "John"
Kendin dene " JavaScript'inizde, nesneler endeksleri adlı kullanın.
Eğer bir adlandırılmış bir dizin kullanıyorsanız bir dizi erişirken, JavaScript, standart bir nesneye diziyi yeniden belirleyecek.
Otomatik yeniden tanımlanması sonra, dizi yöntemleri ve özellikleri tanımlanmamış ya da hatalı sonuçlar elde edilir:
Örnek:
var person = [];
person["firstName"] = "John";
person["lastName"] = "Doe";
person["age"] = 46;
var x = person.length; // person.length will
return 0
var y = person[0];
// person[0] will return undefined
Kendin dene " virgülle Dizi Tanımı Bitiş
Yanlış:
points = [40, 100, 1, 5, 25, 10,];
Bazı JSON ve JavaScript motorları başarısız veya beklenmedik davranacaktır.
Doğru:
points = [40, 100, 1, 5, 25, 10];
bir virgülle bir nesne tanımı Bitiş
Yanlış:
person = {firstName:"John", lastName:"Doe", age:46,}
Bazı JSON ve JavaScript motorları başarısız veya beklenmedik davranacaktır.
Doğru:
person = {firstName:"John", lastName:"Doe", age:46}
Tanımsız Boş Değildir
JavaScript ile, boş tanımsız değişkenler, özellikleri ve yöntemleri için ise, nesneler içindir.
boş olması için, bir amacı, aksi takdirde tanımsız olacak tanımlanmalıdır.
Eğer bir nesne varsa test etmek isterseniz nesne tanımsız ise, bu bir hata atar:
Yanlış:
if (myObj !== null && typeof myObj !== "undefined")
Bu nedenle, test gerekir typeof() ilk:
Doğru:
if (typeof myObj !== "undefined" && myObj !== null)
Beklemek Blok Seviye Kapsamı
JavaScript her kod bloğu için yeni bir kapsam oluşturmaz.
Bu JavaScript birçok programlama dillerinde gerçek değil doğrudur.
Bu kod tanımsız döndürür inanmak, yeni JavaScript geliştiricileri arasında yaygın bir hatadır: