En son web geliştirme öğreticiler
 

JavaScript Yaygın hatalar


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:

Örnek

var z = (x * 10 + y * 10) / 10;       // z will be 0.3
Kendin dene "

JavaScript dize Breaking

JavaScript iki satır halinde bir bildiri kırmak sağlayacaktır:

Örnek 1

var x =
"Hello World!";
Kendin dene "

Ama, bir dize ortasında bir açıklama kırma çalışmaz:

Örnek 2

var x = "Hello
World!";
Kendin dene "

Bir kullanmalısınız "backslash" Eğer bir dizede bir açıklama kırmak gerekiyorsa:

Örnek 3

var x = "Hello \
World!";
Kendin dene "

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:

Örnek 1

function myFunction(a) {
    var power = 10 
    return a * power
}
Kendin dene "

Örnek 2

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

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:

Örnek 3

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

Böyle iki hatlarında return ifadesini kırmak Ama eğer, ne olacak:

Örnek 4

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

fonksiyon tanımsız dönecektir!

Niye ya? JavaScript Çünkü senin geliyordu:

Örnek 5

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

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:

Örnek

for (var i = 0; i < 10; i++) {
    // some code
}
return i;
Kendin dene "