JavaScript Ortak Hataları
- Önceki Sayfa JS En İyi Uygulamaları
- Sonraki Sayfa JS Performansı
Bu bölüm, bazı yaygın JavaScript hatalarını işaret eder.
beklenmedik şekilde değer atama işlevi kullanırsa
Programcı if
ifadesinde beklenmedik şekilde değer atama işlevi kullanılır:=
)değil, karşılaştırma işlevi olarak===
),JavaScript programları bazı beklenmedik sonuçlar üretebilir.
bu if
ifadesi yapılmamıştır
beklendiği gibi, çünkü x 10'a eşit değildir:
var x = 0; if (x == 10)
bu if
ifadesi doğru
olabilir, çünkü 10 true olarak kabul edilir:
var x = 0; if (x = 10)
bu if
ifadesi yapılmamıştır
olabilir, çünkü 0 false olarak kabul edilir:
var x = 0; if (x = 0)
değer atama her zaman atanmış değeri döner.
boş karşılaştırma
konvansiyonel karşılaştırmada, veri türleri önemlidir. Bu if
ifadesi doğru
:
var x = 10; var y = "10"; if (x == y)
katı karşılaştırmada, veri türleri gerçekten önemlidir. Bu if
ifadesi yapılmamıştır
:
var x = 10; var y = "10"; if (x === y)
Yapay hata, switch
ifadesinde katı karşılaştırma kullanılır:
bu switch
ifadesi, uyarı kutusunu gösterir:
var x = 10; switch(x) { case 10: alert("Hello"); }
bu switch
ifade, uyarı kutusunu göstermez:
var x = 10; switch(x) { case "10": alert("Hello"); }
Karışık toplama ve kullanışlılık
toplamatoplama için kullanılırsayısal。
kullanışlılık (Concatenation)toplama için kullanılırdize。
JavaScript'te, bu iki işlem aynı +
İşleç.
Bu yüzden, sayıları sayı olarak toplamak ve sayıları string olarak toplamak, farklı sonuçlar üretir:
var x = 10 + 5; // x'deki sonuç 15 var x = 10 + "5"; // x'deki sonuç "105"
İki değişkenin toplandığı durumda, sonuç tahmin edilemez:
var x = 10; var y = 5; var z = x + y; // z'deki sonuç 15 var x = 10; var y = "5"; var z = x + y; // z'deki sonuç "105"
Yanlış anlaşılan kesir
JavaScript'teki sayılar 64 bit olarak saklanırKütle sayıları (Floats)。
Tüm programlama dilleri,其中包括 JavaScript, float değerleriyle başa çıkma zorluklarıyla karşı karşıyadır:
var x = 0.1; var y = 0.2; var z = x + y // z'deki sonuç 0.3 olmayacaktır
Yukarıdaki sorunu çözmek için çarpma ve bölme işlemlerini kullanın:
Örnek
var z = (x * 10 + y * 10) / 10; // z'deki sonuç 0.3 olacaktır
JavaScript dizgesine satır değiştirme
JavaScript, bir cümleyi satıra ayırmanıza izin verir:
örnek 1
var x = "Hello World!";
Ancak, dizge içinde satır değiştirmek doğru değildir:
örnek 2
var x = "Hello World!";
örnek 3
var x = "Hello \ World!";
Yanlış yerleştirilmiş semicolon
Bir yanlış semicolon nedeniyle, bu kod bloğu x'nin değeri ne olursa olsun çalışacaktır:
if (x == 19); { // kod bloğu }
return cümlesine satır değiştirme
Bir satırın sonunda otomatik olarak cümleleri kapatmak, JavaScript'in varsayılan davranışıdır.
Bu yüzden, aşağıdaki iki örnek de aynı sonucu döndürecektir:
örnek 1
function myFunction(a) { var power = 10 return a * power }
örnek 2
function myFunction(a) { var power = 10; return a * power; }
JavaScript, bir cümleyi satıra ayırmanıza izin verir.
Bu yüzden, örnek 3 de aynı sonucu döndürecektir:
örnek 3
function myFunction(a) { var power = 10; return a * power; }
Ancak, eğer return
Cümleleri satıra ayırarak ne olur:
örnek 4
function myFunction(a) { var power = 10; return a * power; }
Bu fonksiyon şu değerleri döndürecektir undefined
!
Neden mi? Çünkü JavaScript, senin şu anki niyetin şu olduğunu düşünüyor:
örnek 5
function myFunction(a) { var power = 10; return; a * power; }
açıklama
Eğer bir cümle eksikse:
var
JavaScript bu cümleyi bir sonraki satırı okuyarak tamamlar:
power = 10;
Ancak bu cümle tam bir cümledir:
return
JavaScript bu cümleyi otomatik olarak kapatır:
return;
Bu durum, JavaScript'te, cümleleri kapatmak (sonlandırmak) için semicolon kullanmanın zorunlu olmadığı için ortaya çıkar.
JavaScript satır sonunda kapatır return
cümlesi zaten tam bir cümle olduğu için.
daima bu cümleyi asla return
dizesi ile satır değiştirilir.
Diziyi adlandırma indeksleri ile erişmek
Birçok programlama dili adlandırılmış indeksli dizileri destekler.
Adlandırılmış indeksli diziler, ilişkili diziler (veya harita) olarak adlandırılır.
JavaScript DesteklenmezAdlandırılmış indeksli diziler.
JavaScript'te:DiziKullanım:Sayısal indeks:
Örnek
var person = []; person[0] = "Bill"; person[1] = "Gates"; person[2] = 46; var x = person.length; // person.length 3 döndürecektir var y = person[0]; // person[0] "Bill" döndürecektir
JavaScript'te:NesneKullanım:Adlandırılmış indeks。
Adlandırılmış indeks kullanırsanız, array'e erişirken JavaScript array'i standart nesneye dönüştürecektir.
Otomatik yeniden tanımlama sonrası, dizi yöntemleri veya özellikleri tanımlanmamış veya yanlış sonuçlar üretebilir:
Örnek
var person = []; person["firstName"] = "Bill"; person["lastName"] = "Gates"; person["age"] = 46; var x = person.length; // person.length 0 döndürecektir var y = person[0]; // person[0] undefined döndürecektir
Tanımı sonlandırmak için virgül kullanın
Nesne ve dizi tanımlamalarındaki son virgül ECMAScript 5'te yasaldır.
Nesne örneği:
person = {firstName:"Bill", lastName:"Gates", age:62,}
Dizi örnekleri:
points = [35, 450, 2, 7, 30, 16,];
Uyarı!!
Internet Explorer 8 çöküşe geçebilir.
JSON sonunda virgülü izin vermez.
JSON:
person = {firstName:"Bill", lastName:"Gates", age:62}
JSON:
points = [35, 450, 2, 7, 30, 16];
Undefined Null değil
JavaScript nesnesi, değişken, özellik ve yöntemler tanımlanmamış olabilir.
Ayrıca, boş JavaScript nesnesinin değeri: null
。
Bu, test nesnesinin boş olup olmadığını belirlemeyi biraz zorlaştırabilir.
Test türünün: undefined
Objeyi var mı test etmek için:
Örnek
if (typeof myObj === "undefined")
ama nesnenin tanımlanıp tanımlanmadığını test edemezsiniz null
çünkü nesne tanımlanmamışsa hata fırlatarak:
Hatalı:
if (myObj === null)
Bu sorunu çözmek için nesnenin null olup olmadığını test etmek zorundasınız null
yerine undefined.
Bu hala bir hataya neden olacaktır:
Hatalı:
if (myObj !== null && typeof myObj !== "undefined")
Bu yüzden, null olmadan önce test etmek zorundayız:
Düzenli:
if (typeof myObj !== "undefined" && myObj !== null)
blok seviyesi etkisini bekler
JavaScript değildirher kod bloğu için yeni bir etkisi alan oluşturur.
Birçok programlama dili böyledir, ancak JavaScript Bu böyle değil。
Bu kodun döndüğünü düşünüyor: undefined
,yeni JavaScript geliştiricilerinin yaygın hatalarından biridir:
Örnek
for (var i = 0; i < 10; i++) { // Kod Bloğu } return i;
- Önceki Sayfa JS En İyi Uygulamaları
- Sonraki Sayfa JS Performansı