Najnowsze tutoriale tworzenie stron internetowych
 

JavaScript Częste błędy


Ten rozdział wskazuje na kilka typowych błędów JavaScript.


Przypadkowo Korzystanie operatora przypisania

Programy JavaScript może generować nieoczekiwane rezultaty, jeśli programista przypadkowo używa operator przypisania (=) , a nie operator porównania (==) w razie stwierdzenia.

To if wyrażenie zwraca false (zgodnie z oczekiwaniami), ponieważ x nie jest równe 10:

var x = 0;
if (x == 10)
Spróbuj sam "

To if wyrażenie zwraca true (może nie tak oczekiwany), ponieważ 10 jest prawdziwe:

var x = 0;
if (x = 10)
Spróbuj sam "

To if wyrażenie zwraca false (może nie tak oczekiwany), ponieważ 0 jest fałszywe:

var x = 0;
if (x = 0)
Spróbuj sam "

Przypisanie zawsze zwraca wartość zlecenia.


Spodziewając Porównanie Loose

W regularnych porównania, typ danych nie ma znaczenia. Ta if zwróci true :

var x = 10;
var y = "10";
if (x == y)
Spróbuj sam "

W bezpośrednim porównaniu, typ danych ma znaczenia. Ta if zwraca false :

var x = 10;
var y = "10";
if (x === y)
Spróbuj sam "

Jest to częsty błąd zapomnieć, że oświadczenia przełącznika używać ścisłego porównania:

Przełącznik ten przypadek wyświetli alert:

var x = 10;
switch(x) {
    case 10: alert("Hello");
}
Spróbuj sam "

Przełącznik ten przypadek nie wyświetli alert:

var x = 10;
switch(x) {
    case "10": alert("Hello");
}
Spróbuj sam "

Dodawanie i mylące Łączenie

Dodatek jest o dodawaniu liczb.

Łączenie jest o dodawaniu sznurki.

W JavaScript obie operacje używać tego samego operatora +.

W związku z tym, dodanie numer jako numerze jest inny wynik dodawania numeru jako wyrażenie:

var x = 10 + 5;          // the result in x is 15
var x = 10 + "5";        // the result in x is "105"
Spróbuj sam "

Podczas dodawania dwóch zmiennych, może być trudne do przewidzenia wynik:

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"
Spróbuj sam "

nieporozumienie pływaków

Wszystkie numery w JavaScript są zapisywane jako 64-bitowych liczb zmiennoprzecinkowych (float).

Wszystkie języki programowania, w tym JavaScript, mają trudności z precyzyjnym wartości zmiennoprzecinkowych:

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
Spróbuj sam "

Aby rozwiązać powyższy problem, pomaga mnożenie i dzielenie:

Przykład

var z = (x * 10 + y * 10) / 10;       // z will be 0.3
Spróbuj sam "

Złamanie JavaScript String

JavaScript pozwala przełamać oświadczenie na dwie linie:

Przykład 1

var x =
"Hello World!";
Spróbuj sam "

Ale, łamiąc oświadczenie w środku łańcucha nie będzie działać:

Przykład 2

var x = "Hello
World!";
Spróbuj sam "

Musisz użyć "ukośnik" jeśli trzeba złamać oświadczenie w ciągu:

Przykład 3

var x = "Hello \
World!";
Spróbuj sam "

misplacing średnik

Ze względu na zagubienia średnikiem, blok ten kod wykonać niezależnie od wartości x:

if (x == 19);
{
    // code block 
}
Spróbuj sam "

Złamanie instrukcji return

Jest to zachowanie domyślne JavaScript zamknąć komunikatu automatycznie na końcu linii.

W związku z tym, te dwa przykłady zwrócić ten sam wynik:

Przykład 1

function myFunction(a) {
    var power = 10 
    return a * power
}
Spróbuj sam "

Przykład 2

function myFunction(a) {
    var power = 10;
    return a * power;
}
Spróbuj sam "

JavaScript będzie również pozwalają przełamać oświadczenie na dwie linie.

W związku z tym, przykład 3 również zwrócić ten sam wynik:

Przykład 3

function myFunction(a) {
    var
    power = 10; 
    return a * power;
}
Spróbuj sam "

Ale co się stanie, jeśli złamiesz instrukcji return w dwóch wierszach, takich jak ten:

Przykład 4

function myFunction(a) {
    var
    power = 10; 
    return
    a * power;
}
Spróbuj sam "

Funkcja zwróci niezdefiniowana!

Czemu? Ponieważ JavaScript myśli, że rozumie:

Przykład 5

function myFunction(a) {
    var
    power = 10; 
    return;
    a * power;
}
Spróbuj sam "

Wyjaśnienie

Jeżeli oświadczenie jest niekompletne, takich jak:

var

JavaScript będzie starał się wypełnić oświadczenie czytając następną linię:

power = 10;

Ale ponieważ to stwierdzenie jest kompletna:

return

JavaScript automatycznie zamknie go w następujący sposób:

return;

Dzieje się tak dlatego zamknięcia (zakończenia) sprawozdanie ze średnikiem jest opcjonalny w JavaScript.

JavaScript zamyka return na końcu linii, gdyż jest pełna stwierdzenie.

Nigdy nie złamać instrukcji return.


Dostęp do tablic z nazwanych indeksów

Wiele języków programowania obsługują macierze z wymienionych indeksów.

Tablice z wymienionych indeksów nazywane są tablice asocjacyjne (lub skrótów).

JavaScript nie obsługuje macierze z wymienionych indeksów.

W JavaScript, tablice używać indeksów ponumerowanych:

Przykład

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"
Spróbuj sam "

W JavaScript, obiekty używać nazwanych indeksów.

Jeśli używasz nazwie indeksu, przy dostępie do tablicy, JavaScript będzie przedefiniować tablicę do standardowego obiektu.

Po automatycznym redefinicji, metody i właściwości tablicy będzie produkować niezdefiniowanych lub nieprawidłowych wyników:

Przykład:

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
Spróbuj sam "

Kończąc definicji tablicy przecinkami

Błędny:

points = [40, 100, 1, 5, 25, 10,];

Niektóre silniki JSON i JavaScript nie powiedzie, lub zachowywać się niespodziewanie.

Poprawny:

points = [40, 100, 1, 5, 25, 10];

Zakończenie definicji obiektu przecinkami

Błędny:

person = {firstName:"John", lastName:"Doe", age:46,}

Niektóre silniki JSON i JavaScript nie powiedzie, lub zachowywać się niespodziewanie.

Poprawny:

person = {firstName:"John", lastName:"Doe", age:46}

Niezdefiniowany is Not Null

Z JavaScript, null jest dla obiektów, jest niezdefiniowana dla zmiennych, właściwości i metod.

Aby być null, obiekt musi być zdefiniowana, w przeciwnym razie zostanie ona zdefiniowana.

Jeśli chcesz sprawdzić, czy obiekt istnieje, to wygeneruje błąd, jeśli obiekt jest nieokreślony:

Błędny:

if (myObj !== null && typeof myObj !== "undefined") 

Z tego powodu należy sprawdzić typeof () po raz pierwszy:

Poprawny:

if (typeof myObj !== "undefined" && myObj !== null) 

Spodziewając Blok Poziom Zakres

JavaScript nie stworzyć nowe możliwości dla każdego bloku kodu.

To prawda, w wielu językach programowania, ale nie jest prawdą w JavaScript.

Jest to częsty błąd, wśród nowych programistów JavaScript, aby wierzyć, że kod ten zwraca niezdefiniowana:

Przykład

for (var i = 0; i < 10; i++) {
    // some code
}
return i;
Spróbuj sam "