JavaScript Ortak Hataları

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ırbeklendiği gibi, çünkü x 10'a eşit değildir:

var x = 0;
if (x == 10) 

Kendi Kendinize Deneyin

bu if ifadesi doğruolabilir, çünkü 10 true olarak kabul edilir:

var x = 0;
if (x = 10) 

Kendi Kendinize Deneyin

bu if ifadesi yapılmamıştırolabilir, çünkü 0 false olarak kabul edilir:

var x = 0;
if (x = 0) 

Kendi Kendinize Deneyin

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) 

Kendi Kendinize Deneyin

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) 

Kendi Kendinize Deneyin

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");
}

Kendi Kendinize Deneyin

bu switch ifade, uyarı kutusunu göstermez:

var x = 10;
switch(x) {
    case "10": alert("Hello");
}

Kendi Kendinize Deneyin

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"

Kendi Kendinize Deneyin

İ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"

Kendi Kendinize Deneyin

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

Kendi Kendinize Deneyin

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

Kendi Kendinize Deneyin

JavaScript dizgesine satır değiştirme

JavaScript, bir cümleyi satıra ayırmanıza izin verir:

örnek 1

var x =
"Hello World!";

Kendi Kendinize Deneyin

Ancak, dizge içinde satır değiştirmek doğru değildir:

örnek 2

var x = "Hello
World!";

Kendi Kendinize Deneyin

örnek 3

var x = "Hello \
World!";

Kendi Kendinize Deneyin

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
}

Kendi Kendinize Deneyin

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
}

Kendi Kendinize Deneyin

örnek 2

function myFunction(a) {
    var power = 10;
    return a * power;
}

Kendi Kendinize Deneyin

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;
}

Kendi Kendinize Deneyin

Ancak, eğer return Cümleleri satıra ayırarak ne olur:

örnek 4

function myFunction(a) {
    var
    power = 10;  
    return
    a * power;
}

Kendi Kendinize Deneyin

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;
}

Kendi Kendinize Deneyin

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

Kendi Kendinize Deneyin

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

Kendi Kendinize Deneyin

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: undefinedObjeyi var mı test etmek için:

Örnek

if (typeof myObj === "undefined")

Kendi Kendinize Deneyin

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 nullyerine 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)

Kendi Kendinize Deneyin

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;

Kendi Kendinize Deneyin