Δηλώσεις υπό όρους σε JavaΣενάριο: αν, αλλιώς, και αλλιώς αν

⚡ Έξυπνη Σύνοψη

Δηλώσεις υπό όρους σε JavaΤο σενάριο αποφασίζει ποιο μπλοκ κώδικα θα εκτελεστεί δοκιμάζοντας μια συνθήκη, και οι φόρμες if, if…else και if…else if…else καλύπτουν σχεδόν κάθε απόφαση διακλάδωσης που θα χρειαστεί ποτέ ένα σενάριο για αρχάριους.

  • 🔘 Σύνταξη: Μια εντολή if εκτελεί το μπλοκ της μόνο όταν η συνθήκη μέσα στις παρενθέσεις αξιολογηθεί ως true.
  • ☑️ Δύο κλάδοι: Η φόρμα if…else παρέχει ένα εφεδρικό μπλοκ που εκτελείται κάθε φορά που η συνθήκη είναι ψευδής.
  • ✅ Πολλά υποκαταστήματα: Η αλυσιδωτή σύνδεση αλλιώς εάν δοκιμαστούν αρκετές συνθήκες με τη σειρά και σταματούν στον πρώτο αγώνα.
  • 🧪 Στενογραφία: Ο τριαδικός τελεστής συμπυκνώνει ένα απλό if…else σε μία έκφραση που επιστρέφει μια τιμή.
  • ️ Εναλλακτική λύση: Μια πρόταση switch συγκρίνει μια τιμή με πολλές σταθερές επιλογές πιο καθαρά από μια μακρά αλυσίδα.
  • 📊 Παγίδες: Οι ψευδείς τιμές, ένας αδέσποτος τελεστής ανάθεσης και η έλλειψη αγκυλών προκαλούν τα περισσότερα σφάλματα υπό όρους.

Δηλώσεις υπό όρους σε JavaΓραφή

JavaΔηλώσεις υπό όρους σεναρίου

Υπάρχουν κυρίως τρεις τύποι δηλώσεων υπό όρους JavaΓραφή.

  1. εάν Δήλωση: Μια δήλωση 'if' εκτελεί κώδικα με βάση μια συνθήκη.
  2. αν…αλλιώς Δήλωση: Η δήλωση if…else αποτελείται από δύο μπλοκ κώδικα. όταν μια συνθήκη είναι αληθής, εκτελεί το πρώτο μπλοκ κώδικα και όταν η συνθήκη είναι ψευδής, εκτελεί το δεύτερο μπλοκ κώδικα.
  3. αν...άλλο αν...άλλο Δήλωση: Όταν πρέπει να δοκιμαστούν πολλές συνθήκες και πρέπει να εκτελεστούν διαφορετικά μπλοκ κώδικα με βάση ποια συνθήκη είναι αληθής, χρησιμοποιείται η πρόταση if…else if…else.

Κάθε μία από τις τρεις μορφές εξετάζεται παρακάτω με τη σύνταξή της και ένα εκτελέσιμο παράδειγμα. Ισχύουν οι ίδιοι κανόνες ανεξάρτητα από το αν το σενάριο βρίσκεται μέσα στη σελίδα ή σε εξωτερικό αρχείο, και αν η συνθήκη είναι γραμμένη στο ανώτατο επίπεδο ή μέσα σε ένα λειτουργία.

Πώς να χρησιμοποιήσετε δηλώσεις υπό όρους

Οι δηλώσεις υπό όρους χρησιμοποιούνται για να αποφασιστεί η ροή της εκτέλεσης με βάση διαφορετικές συνθήκες. Εάν μια συνθήκη είναι αληθής, μπορείτε να εκτελέσετε μια ενέργεια και εάν η συνθήκη είναι ψευδής, μπορείτε να εκτελέσετε μια άλλη ενέργεια.

Το παρακάτω διάγραμμα δείχνει αυτήν την ιδέα ως μια διακλάδωση: μία μόνο συνθήκη αξιολογείται μία φορά και ο έλεγχος ταξιδεύει κατά μήκος του αληθούς ή του ψευδούς κλάδου, ποτέ και των δύο.

Διάγραμμα ροής που δείχνει ένα JavaΣυνθήκη σεναρίου που διακλαδώνεται σε μια αληθή και μια ψευδή διαδρομή

Εάν δήλωση

Σύνταξη:

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() or Number() τους μετατρέπει.
  • Μη προσβάσιμα υποκαταστήματα: σε ένα else if αλυσίδα, τοποθετήστε πρώτα την πιο στενή συνθήκη, διαφορετικά μια ευρύτερη προηγούμενη δοκιμή θα κερδίσει πάντα.

Συχνές Ερωτήσεις

Ενα μονό = εκχωρεί μια τιμή και καθιστά τη συνθήκη αληθή κατά λάθος. == συγκρίνει μετά τη μετατροπή τύπων, επομένως "" == 0 είναι αλήθεια. === συγκρίνει την τιμή και τον τύπο μαζί και είναι η ασφαλέστερη προεπιλογή.

Οι βοηθοί τεχνητής νοημοσύνης μπορούν να επαναδιατυπώσουν κάτι άγνωστο else if αλυσίδα σε απλά ελληνικά, προτείνετε τις τιμές εισόδου που φτάνουν σε κάθε κλάδο και επισημάνετε μια συνθήκη που δεν μπορεί ποτέ να είναι αληθής. Να εκτελείτε πάντα τον κώδικα μόνοι σας, επειδή η εξήγηση είναι μια πρόταση και όχι μια απόδειξη.

Συχνά ναι. GitHub Copilot ολοκληρώνει τον κώδικα διακλάδωσης από ένα σχόλιο ή μια μερική συνθήκη. Ελέγξτε τις οριακές τιμές που επιλέγει, καθώς ένα δημιουργημένο > όπου χρειαζόσασταν >= είναι εύκολο να το χάσει κανείς.

Δεν υπάρχει όριο γλώσσας. Οποιαδήποτε δήλωση μπορεί να εμφανιστεί μέσα σε ένα υποκατάστημα, συμπεριλαμβανομένης μιας περαιτέρω ifΠέρα από δύο επίπεδα, η λογική γίνεται δύσκολο να ακολουθηθεί, επομένως συνδυάστε τις δοκιμές με && ή επιστρέψτε νωρίτερα αντ' αυτού.

Όχι. Χωρίς αγκύλες, ο κλάδος κατέχει μόνο την επόμενη μοναδική πρόταση, γι' αυτό και τα παραπάνω παραδείγματα λειτουργούν. Η προσθήκη αγκύλων εξακολουθεί να συνιστάται, επειδή μια δεύτερη γραμμή που προστίθεται αργότερα σιωπηλά εμπίπτει εκτός του κλάδου.

&& ισχύει μόνο όταν και οι δύο πλευρές είναι ειλικρινείς, και || ισχύει όταν ισχύει και η μία ή η άλλη πλευρά. Και οι δύο βραχυκυκλώνουν: η δεξιά πλευρά δεν αξιολογείται ποτέ όταν το αποτέλεσμα έχει ήδη αποφασιστεί.

getHours() Επιστρέφει την τρέχουσα ώρα του ρολογιού του επισκέπτη ως αριθμό από το 0 έως το 23, επομένως η σύγκριση με το 12 χωρίζει την ημέρα σε πρωί και απόγευμα χωρίς επιπλέον ανάλυση.

Όχι. JavaΤο σενάριο χρησιμοποιεί δύο ξεχωριστές λέξεις-κλειδιά, else if, με ένα κενό μεταξύ τους. Η μία λέξη elseif Ανήκει στην PHP και σε ορισμένες γλώσσες προτύπων και εμφανίζει ένα συντακτικό σφάλμα σε ένα πρόγραμμα περιήγησης.

Συνοψίστε αυτήν την ανάρτηση με: