Μονομερείς Υπολογιστές ECMAScript

Ο μονοπαράμετρος μοναδικός παραμέτρος είναι το αντικείμενο ή η τιμή που πρέπει να επεξεργαστεί. Είναι οι πιο απλοί τύποι εκφράσεων στο ECMAScript.

delete

Ο διαγράψτε运算符 διαγράφει την αναφορά σε προηγούμενες ορισμένες ιδιότητες ή μεθόδους του αντικειμένου. Για παράδειγμα:

var o = new Object;
o.name = "David";
alert(o.name); // εκτυπώστε "David"
delete o.name;
alert(o.name);	// Εμφάνιση "undefined"

Σε αυτόν τον παράδειγμα, η αφαίρεση της ιδιότητας name σημαίνει την υποχρεωτική λήψη της αναφοράς από αυτήν, και τη ρύθμιση της σε undefined (δηλαδή την τιμή της μη�始化ομένης μεταβλητής).

Ο οπερατορς delete δεν μπορεί να αφαιρέσει ιδιότητες και μεθόδους που δεν ορίστηκαν από τον προγραμματιστή. Για παράδειγμα, ο παρακάτω κώδικας θα προκαλέσει σφάλμα:

delete o.toString;

Ακόμα και αν το όνομα toString είναι έγκυρο, αυτός ο κώδικας θα προκαλέσει σφάλμα, επειδή η μέθοδος toString() είναι η πρωτογενής μέθοδος ECMAScript και όχι η ορισμένη από τον προγραμματιστή.

void

Ο οπερατορς void επιστρέφει undefined για οποιαδήποτε τιμή. Ο οπερατορς αυτός χρησιμοποιείται συχνά για να αποφύγουμε την εμφάνιση τιμών που δεν πρέπει να εμφανίζονται, όπως όταν καλείται μια λειτουργία JavaScript από το στοιχείο <a> του HTML. Για να το κάνετε σωστά, η λειτουργία δεν πρέπει να επιστρέφει μια έγκυρη τιμή, αλλιώς ο περιηγητής θα καθαρίσει τη σελίδα και θα εμφανίσει μόνο το αποτέλεσμα της λειτουργίας.

<a href="javascript:window.open('about:blank')">Κάντε κλικ εδώ</a>

Αν τοποθετήσετε αυτόν τον κώδικα σε σελίδα HTML και κάνετε κλικ στο σύνδεσμο, θα δείτε την εμφάνιση "[object]" στην οθόνη.TIY

Αυτό οφείλεται στο ότι η μέθοδος window.open() επιστρέφει την αναφορά στο νέο ανοιχτό παράθυρο. Στη συνέχεια, το αντικείμενο θα μετατραπεί σε μια αλφαριθμητική απεικόνιση για προβολή.

Για να αποφύγετε αυτό το αποτέλεσμα, μπορείτε να καλέσετε τη λειτουργία window.open() με τον οπερατόρ της void:

<a href="javascript:void(window.open('about:blank'))">Κάντε κλικ εδώ</a>

Αυτό κάνει την κλήση window.open() να επιστρέφει undefined, το οποίο δεν είναι έγκυρη τιμή και δεν εμφανίζεται στο παράθυρο του προγράμματος περιήγησης.

Συμβουλή:Μην το ξεχάσετε, οι λειτουργίες χωρίς επιστροφή τιμής επιστρέφουν πάντα undefined.

Προθεσμικοί/Προθεσμικοί οπερατορς

Οι δύο οπερατορες που δανειζόμαστε απευθείας από το C (και το Java) είναι οι προθεσμικοί οπερατορς αύξησης και μείωσης.

Ο προθεσμικός οπερατορς αύξησης είναι η αύξηση της τιμής κατά 1, με τη μορφή δύο θετικών συμβόλων (++) μπροστά από τη μεταβλητή:

var iNum = 10;
++iNum;

Η δεύτερη γραμμή κώδικα αυξάνει την τιμή του iNum σε 11, και είναι ουσιαστικά ισοδύναμη με:

var iNum = 10;
iNum = iNum + 1;

Επίσης, ο προθεσμικός οπερατορς μείωσης αφαιρεί 1 από την τιμή, με τη μορφή δύο μειονεκτικών συμβόλων (--) μπροστά από τη μεταβλητή:

var iNum = 10;
--iNum;

Σε αυτόν τον παράδειγμα, η δεύτερη γραμμή κώδικα μειώνει την τιμή του iNum σε 9.

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

var iNum = 10;
--iNum;
alert(iNum);	// Έξοδος "9"
alert(--iNum);	// Έξοδος "8"
alert(iNum);	// Έξοδος "8"

Η δεύτερη γραμμή κώδικα εκτελεί μειωτική συναρτηση στο iNum, η τρίτη γραμμή κώδικα εμφανίζει το αποτέλεσμα ("9"). Η τέταρτη γραμμή κώδικα εκτελεί ξανά μειωτική συναρτηση στο iNum, αυτή τη φορά η πρόθεσμη μειωτική συναρτηση και η λειτουργία output βρίσκονται στην ίδια πρόταση, το αποτέλεσμα είναι "8". Για να αποδείξει ότι έχουν εκτελεστεί όλες οι μειωτικές συναρτήσεις, η πέμπτη γραμμή κώδικα εκτυπώνει ξανά "8".

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

var iNum1 = 2;
var iNum2 = 20;
var iNum3 = --iNum1 + ++iNum2;	// ισούται με "22"
var iNum4 = iNum1 + iNum2;		// ιστιν "22"

Στο προηγούμενο κώδικα, το iNum3 ισούται με 22, επειδή η έκφραση που υπολογίζεται είναι 1 + 21. Η μεταβλητή iNum4 επίσης ισούται με 22, και είναι επίσης 1 + 21.

Συναρτήσεις αυξαντικού/μείωτικού μετά

Υπάρχουν επίσης δύο συναρτήσεις που δανειζόμαστε άμεσα από το C (και το Java), δηλαδή οι συναρτήσεις αυξαντικού και μειωτικού.

Η έκφραση αυξαντικού αυξαντικού είναι επίσης αυξάνωση του αριθμού κατά 1, και η μορφή είναι η προσθήκη δύο αυξαντικών (++) πίσω από τη μεταβλητή:

var iNum = 10;
iNum++;

Η έκφραση μειωτικού αυξαντικού είναι επίσης μειωση του αριθμού κατά 1, και η μορφή είναι η προσθήκη δύο μειωτικών (--) πίσω από τη μεταβλητή:

var iNum = 10;
iNum--;

Η δεύτερη γραμμή κώδικα μειώνει την τιμή του iNum σε 9.

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

var iNum = 10;
iNum--;
alert(iNum);	// Έξοδος "9"
alert(iNum--);	// Έξοδος "9"
alert(iNum);	// Έξοδος "8"

Παρόμοια με τα παραδείγματα των πρόθεσμων συναρτήσεων, η δεύτερη γραμμή κώδικα εκτελεί μειωτική συναρτηση στο iNum, η τρίτη γραμμή κώδικα εμφανίζει το αποτέλεσμα ("9"). Η τέταρτη γραμμή κώδικα συνεχίζει να εμφανίζει την τιμή του iNum, αλλά αυτή τη φορά εφαρμόζεται ο μειωτικός συναρτήτης στην ίδια πρόταση. Επειδή η μειωτική συναρτηση εκτελείται μετά τον υπολογισμό της έκφρασης, η τιμή που εμφανίζεται είναι "9". Μετά την εκτέλεση της πέμπτης γραμμής κώδικα, η συνάρτηση alert εμφανίζει "8", επειδή η μειωτική συναρτηση εκτελείται μεταξύ της εκτέλεσης της τέταρτης γραμμής κώδικα και της εκτέλεσης της πέμπτης γραμμής κώδικα.

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

var iNum1 = 2;
var iNum2 = 20;
var iNum3 = iNum1-- + iNum2++;	// ιστιν "22"
var iNum4 = iNum1 + iNum2;		// ιστιν "22"

Στο προηγούμενο κώδικα, το iNum3 είναι ίσο με 22, επειδή η έκφραση υπολογίζει το 2 + 20. Το iNum4 είναι επίσης ίσο με 22, αλλά υπολογίζει το 1 + 21, επειδή οι αύξηση και η μείωση συμβάλλουν στη μεταφορά του iNum3 μετά την εκτέλεση της ανάθεση.

Μοναδικός προσθετικός και μοναδικός μειωτικός τελεστές

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

Ο μοναδικός προσθετικός τελεστής δεν έχει καμία επίδραση στα αριθμητικά κατά βάση:

var iNum = 20;
iNum = +iNum;
alert(iNum);	//Έξοδος "20"

Αυτός ο κώδικας εφαρμόζει τον μοναδικό προσθετικό τελεστή στον αριθμό 20, επιστρέφοντας τον ίδιο αριθμό 20.

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

var sNum = "20";
alert(typeof sNum);	//Έξοδος "string"
var iNum = +sNum;
alert(typeof iNum);	//Έξοδος "number"

Αυτός ο κώδικας μετατρέπει τη συμβολοσειρά "20" σε πραγματικό αριθμό. Όταν ο μοναδικός προσθετικός τελεστής χειρίζεται τη συμβολοσειρά, υπολογίζει τη συμβολοσειρά με τον ίδιο τρόπο όπως το parseInt(), η κύρια διαφορά είναι ότι μόνο οι συμβολοσειρές που ξεκινούν με "0x" (προσδιορίζουν δεκαεξαδικούς αριθμούς) μπορούν να μετατραπούν σε δεκαδικές τιμές από τους μοναδικούς τελεστές. Επομένως, η μετατροπή του "010" θα είναι πάντα 10, ενώ το "0xB" θα μετατραπεί σε 11.

Από την άλλη πλευρά, ο μοναδικός μειωτικός τελεστής είναι η αρνητική τιμή ενός αριθμού (π.χ. μετατροπή του 20 σε -20):

var iNum = 20;
iNum = -iNum;
alert(iNum);	//Έξοδος "-20"

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

var sNum = "20";
alert(typeof sNum);	//Έξοδος "string"
var iNum = -sNum;
alert(iNum);		//Έξοδος "-20"
alert(typeof iNum);	//Έξοδος "number"

Στο παραπάνω κώδικα, ο μοναδικός μειωτικός τελεστής θα μετατρέψει τη συμβολοσειρά "-20" σε -20 (ο μοναδικός μειωτικός τελεστής χειρίζεται τα δεκαεξαδικά και δεκαδικά με τον ίδιο τρόπο όπως ο μοναδικός προσθετικός τελεστής, αλλά θα υπολογίσει και το αρνητικό της τιμής).