Δηλώσεις υπό όρους σε JavaΣενάριο: αν, αλλιώς, και αλλιώς αν
⚡ Έξυπνη Σύνοψη
Δηλώσεις υπό όρους σε JavaΤο σενάριο αποφασίζει ποιο μπλοκ κώδικα θα εκτελεστεί δοκιμάζοντας μια συνθήκη, και οι φόρμες if, if…else και if…else if…else καλύπτουν σχεδόν κάθε απόφαση διακλάδωσης που θα χρειαστεί ποτέ ένα σενάριο για αρχάριους.
JavaΔηλώσεις υπό όρους σεναρίου
Υπάρχουν κυρίως τρεις τύποι δηλώσεων υπό όρους JavaΓραφή.
- εάν Δήλωση: Μια δήλωση 'if' εκτελεί κώδικα με βάση μια συνθήκη.
- αν…αλλιώς Δήλωση: Η δήλωση if…else αποτελείται από δύο μπλοκ κώδικα. όταν μια συνθήκη είναι αληθής, εκτελεί το πρώτο μπλοκ κώδικα και όταν η συνθήκη είναι ψευδής, εκτελεί το δεύτερο μπλοκ κώδικα.
- αν...άλλο αν...άλλο Δήλωση: Όταν πρέπει να δοκιμαστούν πολλές συνθήκες και πρέπει να εκτελεστούν διαφορετικά μπλοκ κώδικα με βάση ποια συνθήκη είναι αληθής, χρησιμοποιείται η πρόταση if…else if…else.
Κάθε μία από τις τρεις μορφές εξετάζεται παρακάτω με τη σύνταξή της και ένα εκτελέσιμο παράδειγμα. Ισχύουν οι ίδιοι κανόνες ανεξάρτητα από το αν το σενάριο βρίσκεται μέσα στη σελίδα ή σε εξωτερικό αρχείο, και αν η συνθήκη είναι γραμμένη στο ανώτατο επίπεδο ή μέσα σε ένα λειτουργία.
Πώς να χρησιμοποιήσετε δηλώσεις υπό όρους
Οι δηλώσεις υπό όρους χρησιμοποιούνται για να αποφασιστεί η ροή της εκτέλεσης με βάση διαφορετικές συνθήκες. Εάν μια συνθήκη είναι αληθής, μπορείτε να εκτελέσετε μια ενέργεια και εάν η συνθήκη είναι ψευδής, μπορείτε να εκτελέσετε μια άλλη ενέργεια.
Το παρακάτω διάγραμμα δείχνει αυτήν την ιδέα ως μια διακλάδωση: μία μόνο συνθήκη αξιολογείται μία φορά και ο έλεγχος ταξιδεύει κατά μήκος του αληθούς ή του ψευδούς κλάδου, ποτέ και των δύο.
Εάν δήλωση
Σύνταξη:
if(condition) { lines of code to be executed if condition is true }
Μπορείς να χρησιμοποιήσεις if δήλωση αν θέλετε να ελέγξετε μόνο μια συγκεκριμένη συνθήκη. Όταν η έκφραση μέσα στις παρενθέσεις αποτιμάται σε true, το μπλοκ εκτελείται· όταν αξιολογείται σε false, ο διερμηνέας το προσπερνά κατευθείαν και το σενάριο συνεχίζει με την επόμενη δήλωση.
Δοκιμάστε αυτό μόνοι σας:
<html>
<head>
<title>IF Statments!!!</title>
<script type="text/javascript">
var age = prompt("Please enter your age");
if(age>=18)
document.write("You are an adult <br />");
if(age<18)
document.write("You are NOT an adult <br />");
</script>
</head>
<body>
</body>
</html>
Το παράδειγμα ζητά από τον επισκέπτη μια ηλικία και στη συνέχεια ελέγχει αυτήν την τιμή δύο φορές: μία φορά για 18 ετών και άνω, μία φορά για κάτω των 18 ετών. Επειδή δύο ξεχωριστά if χρησιμοποιούνται δηλώσεις αντί για ένα else, και οι δύο συνθήκες αξιολογούνται κάθε φορά που φορτώνει η σελίδα.
Σύγχρονο ισοδύναμο: ο παραπάνω κώδικας διατηρείται ακριβώς όπως δημοσιεύτηκε. Στην τρέχουσα JavaΣενάριο με την ίδια λογική γράφεται κανονικά let or const αντί του var, με console.log() or textContent αντί του document.write(), και χωρίς το type="text/javascript" χαρακτηριστικό, το οποίο η HTML5 καθιστά προαιρετικό.
Δήλωση If…Else
Σύνταξη:
if(condition) { lines of code to be executed if the condition is true } else { lines of code to be executed if the condition is false }
Μπορείτε να χρησιμοποιήσετε το if...else δήλωση εάν πρέπει να ελέγξετε μία συνθήκη και να εκτελέσετε ένα διαφορετικό μπλοκ κώδικα για κάθε αποτέλεσμα. Εκτελείται πάντα ακριβώς ένα από τα δύο μπλοκ, επομένως δεν απαιτείται ξεχωριστή δεύτερη δοκιμή.
Δοκιμάστε αυτό μόνοι σας:
<html>
<head>
<title>If...Else Statments!!!</title>
<script type="text/javascript">
// Get the current hours
var hours = new Date().getHours();
if(hours<12)
document.write("Good Morning!!!<br />");
else
document.write("Good Afternoon!!!<br />");
</script>
</head>
<body>
</body>
</html>
Εδώ new Date().getHours() επιστρέφει την τρέχουσα ώρα του ρολογιού του προγράμματος περιήγησης ως αριθμό από 0 έως 23. Οποιαδήποτε τιμή κάτω από 12 παράγει τον πρωινό χαιρετισμό και κάθε άλλη τιμή εμπίπτει στο else κλαδί.
Αν…Αλλιώς Δήλωση Αν…Αλλιώς
Σύνταξη:
if(condition1) { lines of code to be executed if condition1 is true } else if(condition2) { lines of code to be executed if condition2 is true } else { lines of code to be executed if condition1 is false and condition2 is false }
Μπορείτε να χρησιμοποιήσετε το if...else if...else δήλωση αν θέλετε να ελέγξετε περισσότερες από δύο συνθήκες. Οι συνθήκες αξιολογούνται από πάνω προς τα κάτω, η εκτέλεση σταματά στην πρώτη που είναι αληθής και η τελευταία else λειτουργεί ως ένα γενικό πλαίσιο όταν κανένα από αυτά δεν ταιριάζει.
Δοκιμάστε αυτό μόνοι σας:
<html>
<head>
<script type="text/javascript">
var one = prompt("Enter the first number");
var two = prompt("Enter the second number");
one = parseInt(one);
two = parseInt(two);
if (one == two)
document.write(one + " is equal to " + two + ".");
else if (one<two)
document.write(one + " is less than " + two + ".");
else
document.write(one + " is greater than " + two + ".");
</script>
</head>
<body>
</body>
</html>
Σημειώστε τις δύο κλήσεις προς parseInt()Τιμές που επιστρέφονται από prompt() είναι συμβολοσειρές, επομένως η σύγκρισή τους χωρίς μετατροπή θα συγκρίνει κείμενο αντί για αριθμούς και θα αναφέρει το "9" ως μεγαλύτερο από το "10".
Τριαδικός Operator: Μια συντομογραφία για το αν…αλλιώς
Όταν ένα if...else Το μπλοκ επιλέγει μόνο μεταξύ δύο τιμών, ο υπό όρους (τριαδικός) τελεστής εκφράζει την ίδια απόφαση με μια ενιαία έκφραση. Είναι η μία JavaΤελεστής σεναρίου που δέχεται τρεις τελεστές: μια συνθήκη, ένα ερωτηματικό, την τιμή που χρησιμοποιείται όταν η συνθήκη είναι αληθής, μια άνω και κάτω τελεία και την τιμή που χρησιμοποιείται όταν είναι ψευδής.
// if...else form let message; if (age >= 18) { message = "adult"; } else { message = "minor"; } // same decision as a ternary expression let label = age >= 18 ? "adult" : "minor";
Χρησιμοποιήστε τον τριαδικό τελεστή όταν βελτιώνει την αναγνωσιμότητα, όχι απλώς για να αποθηκεύσετε γραμμές:
- Καλή εφαρμογή: επιλογή μίας από τις δύο τιμές για αντιστοίχιση, επιστροφή ή απόθεση σε μια συμβολοσειρά προτύπου.
- Κακή εφαρμογή: κλαδιά που εκτελούν πολλές εντολές, καλούν συναρτήσεις για τις παρενέργειές τους ή χρειάζονται τις δικές τους τοπικές μεταβλητές.
- Αποφύγετε τη δημιουργία φωλιάς: ένα τριαδικό μέσα σε ένα τριαδικό είναι πολύ πιο δύσκολο να διαβαστεί από ένα
else ifαλυσίδα.
Δήλωση switch vs if…else if…else
Μια μακρά else if μια αλυσίδα που συνεχίζει να συγκρίνει την ίδια μεταβλητή με διαφορετικές σταθερές τιμές είναι συνήθως πιο ξεκάθαρη ως switch δήλωση. Ο διακόπτης αξιολογεί την έκφρασή του μία φορά και στη συνέχεια μεταβαίνει στην αντίστοιχη case; break εμποδίζει την εκτέλεση να καταλήξει στην επόμενη υπόθεση, και default παίζει τον ρόλο του τελικού else.
switch (day) { case "Sat": case "Sun": document.write("Weekend"); break; default: document.write("Weekday"); }
Οι δύο δομές δεν είναι εναλλάξιμες σε κάθε περίπτωση:
| Σημείο σύγκρισης | αν...άλλο αν...άλλο | αλλαγή |
|---|---|---|
| Είδος δοκιμής | Οποιαδήποτε λογική έκφραση, συμπεριλαμβανομένων εύρους όπως hours<12 |
Ισότητα μόνο έναντι σταθερών τιμών |
| Σύγκριση που χρησιμοποιήθηκε | Όποιον τελεστή κι αν γράψετε | Αυστηρή σύγκριση, άρα "5" δεν ταιριάζει 5 |
| ευανάγνωστο | καλυτερα για μερικές ασύνδετες καταστάσεις | καλυτερα για πολλες τιμες μιας μεταβλητης |
| Κοινό σφάλμα | Ξεχνώντας το ίχνος else |
Ξεχνώντας break, το οποίο αφήνει την εκτέλεση να μην ολοκληρωθεί |
Αληθινές και ψευδείς αξίες στο JavaΣυνθήκες Σεναρίου
Μια συνθήκη δεν χρειάζεται να είναι μια σύγκριση. JavaΤο σενάριο μετατρέπει ό,τι βρει μέσα στις παρενθέσεις σε boolean πρώτα, γι' αυτό και if (name) είναι έγκυρος κώδικας. Μόνο έξι τιμές μετατρέπονται σε ψευδή: false, 0, η κενή συμβολοσειρά, null, undefinedκαι NaNΌλα τα άλλα είναι αληθινά, συμπεριλαμβανομένης της συμβολοσειράς "0", έναν κενό πίνακα και ένα κενό αντικείμενο.
Τα περισσότερα σφάλματα υπό όρους σε σενάρια για αρχάριους προέρχονται από μια σύντομη λίστα λαθών:
- Ανάθεση αντί για σύγκριση:
if (x = 5)αναθέτει και είναι πάντα ειλικρινής·if (x === 5)συγκρίνει. - Χαλαρές εκπλήξεις ισότητας:
==μετατρέπει τύπους πριν από τη σύγκριση, επομένως"" == 0είναι αλήθεια. Προτιμώ===. - Λείπουν σιδεράκια: without
{}Μόνο η επόμενη μεμονωμένη πρόταση ανήκει στον κλάδο, ακριβώς όπως στα παραπάνω παραδείγματα. - Μη μετατρεπόμενη είσοδος: αξίες από
prompt()και τα πεδία φόρμας είναι συμβολοσειρές μέχριparseInt()orNumber()τους μετατρέπει. - Μη προσβάσιμα υποκαταστήματα: σε ένα
else ifαλυσίδα, τοποθετήστε πρώτα την πιο στενή συνθήκη, διαφορετικά μια ευρύτερη προηγούμενη δοκιμή θα κερδίσει πάντα.

