6.7 Συγκριτικοί (comparison) και λογικοί (logical) τελεστές

Στην JavaScript, έχουμε τους συγκριτικούς (comparison) και τους λογικούς (logical) τελεστές που μας επιτρέπουν να συγκρίνουμε τιμές και να εκτελούμε λογικές πράξεις μεταξύ τους. Ας δούμε μερικούς από αυτούς:

Συγκριτικοί τελεστές:

  • Ίσο (==): Επιστρέφει true αν οι δύο τιμές είναι ίσες.
  • Διάφορο (!=): Επιστρέφει true αν οι δύο τιμές είναι διαφορετικές.
  • Ίσο και ίδιου τύπου (===): Επιστρέφει true αν οι δύο τιμές είναι ίσες και του ίδιου τύπου.
  • Διαφορετικός τύπος (!==): Επιστρέφει true αν οι δύο τιμές είναι διαφορετικού τύπου.
  • Μικρότερο (<), Μεγαλύτερο (>), Μικρότερο ή Ίσο (<=), Μεγαλύτερο ή Ίσο (>=): Χρησιμοποιούνται για να συγκρίνουν τις αριθμητικές τιμές.

Λογικοί τελεστές:

  • Και (&&): Επιστρέφει true αν και οι δύο συνθήκες είναι true.
  • Ή (||): Επιστρέφει true αν τουλάχιστον μία από τις δύο συνθήκες είναι true.
  • Όχι (!): Επιστρέφει το αντίθετο της τιμής. Δηλαδή, αν μια συνθήκη είναι true, θα επιστρέψει false και αν είναι false, θα επιστρέψει true.

Ας δούμε μερικά παραδείγματα:

const x = 5;
const y = 10;

console.log(x == y); // false
console.log(x != y); // true
console.log(x === '5'); // false
console.log(x !== '5'); // true
console.log(x < y); // true
console.log(x > y); // false
console.log(x <= y); // true
console.log(x >= y); // false

const a = true;
const b = false;

console.log(a && b); // false
console.log(a || b); // true
console.log(!a); // false
console.log(!b); // true

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

Στη JavaScript, ο τριαδικός τελεστής, γνωστός και ως “conditional operator” ή “ternary operator”, είναι ένας συγκριτικός τελεστής που επιτρέπει να εκτελούμε έναν απλό έλεγχο και να επιστρέφουμε διαφορετικές τιμές ανάλογα με το αποτέλεσμα του ελέγχου.

Ο τριαδικός τελεστής έχει τη μορφή:

condition ? expr1 : expr2

Εδώ, η συνθήκη (condition) είναι η συνθήκη που ελέγχεται, και ο τριαδικός τελεστής επιστρέφει την τιμή του expr1 αν η συνθήκη είναι αληθής (true), και την τιμή του expr2 αν η συνθήκη είναι ψευδής (false).

[adinserter block=”2″]

Ας δούμε ένα παράδειγμα:

const x = 10;
const y = 20;

const result = x > y ? 'x είναι μεγαλύτερο από y' : 'x δεν είναι μεγαλύτερο από y';

console.log(result); // θα εκτυπώσει "x δεν είναι μεγαλύτερο από y" στην κονσόλα

Στο παράδειγμα παραπάνω, η συνθήκη x > y ελέγχει αν η μεταβλητή x είναι μεγαλύτερη από τη μεταβλητή y. Αν αυτή η συνθήκη είναι αληθής, τότε ο τριαδικός τελεστής επιστρέφει την τιμή 'x είναι μεγαλύτερο από y', αλλιώς επιστρέφει την τιμή 'x δεν είναι μεγαλύτερο από y'.

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

Στη JavaScript, όταν γίνεται σύγκριση μεταξύ διαφορετικών τύπων δεδομένων, μπορεί να προκύψουν απρόσμενα αποτελέσματα. Εδώ είναι μερικά παραδείγματα για τις συγκρίσεις ανάμεσα σε αριθμούς και συμβολοσειρές:

console.log(2 < 12);       // true
console.log(2 < "12");     // true (η συμβολοσειρά "12" μετατρέπεται σε αριθμό 12 και η σύγκριση γίνεται μεταξύ αριθμών)
console.log(2 < "John");   // false (η συμβολοσειρά "John" δεν μπορεί να μετατραπεί σε αριθμό, οπότε η σύγκριση γίνεται με NaN)
console.log(2 > "John");   // false (η σύγκριση με NaN είναι πάντα false)
console.log(2 == "John");  // false (η σύγκριση με NaN είναι πάντα false)
console.log("2" < "12");   // false (στην συγκεκριμένη σύγκριση γίνεται χαρακτηριστική προς χαρακτηριστική σύγκριση, όχι αριθμός με αριθμό)
console.log("2" > "12");   // true (το πρώτο ψηφίο του "2" είναι μεγαλύτερο από το πρώτο ψηφίο του "12")
console.log("2" == "12");  // false (το πρώτο ψηφίο του "2" είναι διαφορετικό από το πρώτο ψηφίο του "12")

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

const x = 2;
const y = "12";

console.log(x < Number(y)); // true

Με τον τρόπο αυτό, μπορούμε να διασφαλίσουμε ότι κάνουμε τις συγκρίσεις μεταξύ τιμών του ίδιου τύπου, και να αποφύγουμε απρόσμενα αποτελέσματα.

Ο Nullish Coalescing Operator (??) είναι ένας τελεστής που εισήχθηκε στην ECMAScript 2020 και χρησιμοποιείται για να επιλέξει μια προκαθορισμένη τιμή όταν μια μεταβλητή είναι null ή undefined. Ο τελεστής αυτός παρέχει μια συντομότερη και πιο καθαρή σύνταξη από τον παλαιότερο τελεστή OR (||) για να επιλέξει προκαθορισμένες τιμές.

Η σύνταξη του Nullish Coalescing Operator είναι η εξής:

variableName ?? defaultValue

Αν η variableName δεν είναι null ή undefined, τότε η τιμή της εκφράσεως είναι η ίδια με την variableName. Αν η variableName είναι null ή undefined, τότε η τιμή της εκφράσεως είναι η defaultValue.

Ας δούμε μερικά παραδείγματα:

// Αρχικοποίηση μεταβλητών
let x = 10;
let y = null;
let z;

// Χρήση του Nullish Coalescing Operator
console.log(x ?? 0); // 10 (x δεν είναι null ή undefined, οπότε επιλέγεται η τιμή του x)
console.log(y ?? 0); // 0 (y είναι null, οπότε επιλέγεται η προκαθορισμένη τιμή 0)
console.log(z ?? 0); // 0 (z είναι undefined, οπότε επιλέγεται η προκαθορισμένη τιμή 0)

Ο Nullish Coalescing Operator μας βοηθά να γράψουμε πιο καθαρό και ευανάγνωστο κώδικα όταν θέλουμε να προσδιορίσουμε προκαθορισμένες τιμές για μεταβλητές που μπορεί να είναι null ή undefined.

Ο Optional Chaining Operator (?.) είναι ένας νέος τελεστής που εισήχθηκε στην ECMAScript 2020 και χρησιμοποιείται για να αντιμετωπίσει το πρόβλημα των περιττών σφαλμάτων κατά την πρόσβαση σε ιδιότητες ή μεθόδους ενός ανεπιτυχούς αντικειμένου (null ή undefined).

[adinserter block=”3″]

Με τον Optional Chaining Operator, μπορούμε να προσπελάσουμε τις ιδιότητες ή μεθόδους ενός αντικειμένου χωρίς να χρειάζεται να ελέγξουμε πρώτα αν το αντικείμενο είναι null ή undefined. Αν το αντικείμενο είναι null ή undefined, τότε η εκφραση με τον Optional Chaining Operator επιστρέφει undefined, αντί για ένα σφάλμα.

Η σύνταξη του Optional Chaining Operator είναι η εξής:

object?.property
object?.method()

Ας δούμε μερικά παραδείγματα:

// Ένα αντικείμενο με ιδιότητες
const person = {
  name: "John",
  age: 30,
  address: {
    city: "New York",
    zip: "10001"
  }
};

// Χρήση του Optional Chaining Operator
console.log(person.name); // "John"
console.log(person.address?.city); // "New York" (η πρόσβαση στην πόλη είναι επιτυχής)
console.log(person.address?.country); // undefined (η πρόσβαση στη χώρα δεν υπάρχει)

// Ένα αντικείμενο που είναι null
const car = null;

// Χρήση του Optional Chaining Operator με null αντικείμενο
console.log(car?.model); // undefined (η πρόσβαση στο μοντέλο δεν υπάρχει)

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

21 Αυγούστου, 2023
top
error: Content is protected !!
Μετάβαση σε γραμμή εργαλείων