Συχνά Σφάλματα JavaScript
- Προηγούμενη σελίδα JS καλύτερες πρακτικές
- Επόμενη σελίδα JS απόδοση
Αυτό το κεφάλαιο αναφέρει ορισμένα συχνά σφάλματα του JavaScript.
μη αναμενόμενη χρήση του οπτικοποιητή ανάθεσης
Αν ο προγραμματιστής χρησιμοποιεί if
Η μη αναμενόμενη χρήση του οπτικοποιητή ανάθεσης στην πρόταση=
)αντί για τον συγκριτικό οπτικοποιητή (=====
),η πρόγραμμα JavaScript μπορεί να παράγει ορισμένα απρόβλεπτα αποτελέσματα.
αυτή if
Η πρόταση επιστρέφει ψευδές
(όπως αναμένεται), επειδή το x δεν είναι ίσο με το 10:
var x = 0; if (x == 10)
αυτή if
Η πρόταση επιστρέφει αληθές
(μπορεί να μην είναι όπως αναμένεται), επειδή το 10 είναι αληθές:
var x = 0; if (x = 10)
αυτή if
Η πρόταση επιστρέφει ψευδές
(μπορεί να μην είναι όπως αναμένεται), επειδή το 0 είναι ψευδές:
var x = 0; if (x = 0)
Η ανάθεση πάντα επιστρέφει την τιμή της ανάθεσης.
αναμένεται η χαλαρή σύγκριση
Στην κανονική σύγκριση, ο τύπος δεδομένων δεν είναι σημαντικός. Αυτό το if
Η πρόταση επιστρέφει αληθές
:
var x = 10; var y = "10"; if (x == y)
Στη στενή σύγκριση, ο τύπος δεδομένων είναι σημαντικός. Αυτό το if
Η πρόταση επιστρέφει ψευδές
:
var x = 10; var y = "10"; if (x === y)
Ένας συχνός σφάλμα είναι να ξεχνάμε να χρησιμοποιήσουμε switch
Η πρόταση χρησιμοποιεί στενή σύγκριση:
αυτή switch
Η πρόταση θα εμφανίσει το παράθυρο προειδοποίησης:
var x = 10; switch(x) { case 10: alert("Hello"); }
αυτή switch
Η πρόταση δεν θα εμφανίσει το παράθυρο προειδοποίησης:
var x = 10; switch(x) { case "10": alert("Hello"); }
Ασαφής προσθήκη και κατασυγχώνευση
πρόσθεσηγια προσθήκηαριθμητικός。
κατασυγχώνευση (Concatenation)για προσθήκηαλφαριθμητικό。
Στο JavaScript, και οι δύο πράξεις χρησιμοποιούν τον ίδιο +
Οπτικοποιητής.
Για αυτό, η προσθήκη αριθμών ως αριθμητικά και ως αλφαριθμητικά δημιουργεί διαφορετικά αποτελέσματα:
var x = 10 + 5; // Το αποτέλεσμα στο x είναι 15 var x = 10 + "5"; // Το αποτέλεσμα στο x είναι "105"
Αν προσθέσουμε δύο μεταβλητές, είναι δύσκολο να προβλέψουμε το αποτέλεσμα:
var x = 10; var y = 5; var z = x + y; // Το αποτέλεσμα στο z είναι 15 var x = 10; var y = "5"; var z = x + y; // Το αποτέλεσμα στο z είναι "105"
Ανακρίβεια των δεδομένων πόντιων
Όλοι οι αριθμοί στο JavaScript αποθηκεύονται ως 64-bitFloating-point numbers (Floats)。
All programming languages, including JavaScript, have difficulties in handling floating-point values:
var x = 0.1; var y = 0.2; var z = x + y // The result in z will not be 0.3
To solve the above problem, please use multiplication and division operations:
Παράδειγμα
var z = (x * 10 + y * 10) / 10; // The result in z will be 0.3
Line break in JavaScript strings
JavaScript allows you to split a statement into two lines:
Example 1
var x = "Hello World!";
But, it is not correct to break lines in the middle of a string:
Example 2
var x = "Hello World!";
If you have to break lines in a string, you must use the backslash:
Example 3
var x = "Hello ", World!";
Misplaced semicolon
Because of a misplaced semicolon, this code block will always execute regardless of the value of x:
if (x == 19); { // code block }
Line break in return statements
Automatically closing statements at the end of a line is the default behavior of JavaScript.
That's why the following two examples return the same result:
Example 1
function myFunction(a) { var power = 10 return a * power }
Example 2
function myFunction(a) { var power = 10; return a * power; }
JavaScript also allows you to split a statement into two lines.
That's why Example 3 will also return the same result:
Example 3
function myFunction(a) { var power = 10; return a * power; }
But, if you put return
What will happen if the statement is split into two lines:
Example 4
function myFunction(a) { var power = 10; return a * power; }
This function will return undefined
!
Why? Because JavaScript assumes that you mean:
Example 5
function myFunction(a) { var power = 10; return; a * power; }
Explanation
If a statement is incomplete:
var
JavaScript will complete this statement by reading the next line:
power = 10;
But because this statement is complete:
return
JavaScript will automatically close this statement:
return;
This happens because, in JavaScript, using a semicolon to close (end) a statement is optional.
JavaScript will close at the end of the line return
The statement, because it is a complete statement itself.
Therefore, never do this return
The statement is for line break.
Through naming index to access the array
Πολλά γλώσσες προγραμματισμού υποστηρίζουν τους πίνακες με ονομαστικές ετικέτες.
Οι πίνακες με ονομαστικές ετικέτες ονομάζονται συνδεδεμένοι πίνακες (ή χαρτοί).
JavaScript Δεν υποστηρίζονταιΠίνακες με ονομαστικές ετικέτες.
Στο JavaScript:ΠίνακαςΧρησιμοποιήστεΑριθμητικές ετικέτες:
Παράδειγμα
var person = []; person[0] = "Bill"; person[1] = "Gates"; person[2] = 46; var x = person.length; // Το person.length θα επιστρέψει 3 var y = person[0]; // Το person[0] θα επιστρέψει "Bill"
Στο JavaScript:ΆντικειμέναΧρησιμοποιήστεΟνομαστικές ετικέτες。
Αν χρησιμοποιήσετε ονομαστικές ετικέτες, τότε κατά την πρόσβαση στον πίνακα, το JavaScript θα επαναπροσδιορίσει τον πίνακα ως τυπικό αντικείμενο.
Μετά την αυτόματη επαναπροσδιορισμό, οι μεθόδοι ή οι ιδιότητες του πίνακα θα παράγουν μη ορισμένα ή μη σωστά αποτελέσματα:
Παράδειγμα
var person = []; person["firstName"] = "Bill"; person["lastName"] = "Gates"; person["age"] = 46; var x = person.length; // Το person.length θα επιστρέψει 0 var y = person[0]; // Το person[0] θα επιστρέψει undefined
Χρησιμοποιήστε τα σημεία κόμματος για να ολοκληρώσετε τη διαδρομή
Τα κενά σημεία κόμματος στη διαδρομή του αντικειμένου και του πίνακα είναι νόμιμα στην ECMAScript 5.
Παράδειγμα διαδρομής του αντικειμένου:
person = {firstName:"Bill", lastName:"Gates", age:62,}
Παράδειγμα διαδρομής του πίνακα:
points = [35, 450, 2, 7, 30, 16,];
Προειδοποίηση!!
O Internet Explorer 8 θα υποκύψει.
Το JSON δεν επιτρέπει τα κενά σημεία κόμματος στο τέλος.
JSON:
person = {firstName:"Bill", lastName:"Gates", age:62}
JSON:
points = [35, 450, 2, 7, 30, 16];
Undefined δεν είναι Null
Τα αντικείμενα, οι μεταβλητές, οι ιδιότητες και τα μέθοδοι του JavaScript μπορούν να είναι μη ορισμένα.
Επιπλέον, οι τιμές των κενών JavaScript αντικειμένων μπορούν να είναι: null
。
Αυτό μπορεί να κάνει τη δοκιμή αν το αντικείμενο είναι κενό λίγο δύσκολη.
Μπορείτε να δοκιμάσετε αν ο τύπος είναι: undefined
Για να δοκιμάσουμε αν το αντικείμενο υπάρχει:
Παράδειγμα
if (typeof myObj === "undefined")
αλλά δεν μπορείτε να δοκιμάσετε αν το αντικείμενο είναι null
γιατί αν το αντικείμενο είναι μη ορισμένο, θα προκαλέσει σφάλμα:
Μη σωστή χρήση:
if (myObj === null)
Για να λύσετε το πρόβλημα, πρέπει να δοκιμάσετε αν το αντικείμενο είναι null
αντί για undefined.
αλλά αυτό θα προκαλέσει ακόμα σφάλμα:
Μη σωστή χρήση:
if (myObj !== null && typeof myObj !== "undefined")
Άρα, πριν δοκιμάσετε αν είναι μη null, πρέπει να δοκιμάσετε αν είναι μη ορισμένο:
Καλή χρήση:
if (typeof myObj !== "undefined" && myObj !== null)
προσδοκεί ορίζοντα κουτί
JavaScript Δενδημιουργεί νέο ορίζοντα για κάθε κώδικα.
Πολλά γλωσσές προγραμματισμού είναι έτσι, αλλά το JavaScript Δεν είναι έτσι。
πιστεύουν ότι αυτός ο κώδικας θα επιστρέψει undefined
είναι συχνή λάθη νέων προγραμματιστών JavaScript:
Παράδειγμα
for (var i = 0; i < 10; i++) { // κώδικας } return i;
- Προηγούμενη σελίδα JS καλύτερες πρακτικές
- Επόμενη σελίδα JS απόδοση