Strict Mode
Με το strict mode ο κώδικας γίνεται πιο αυστηρός, πιο γρήγορος και πιο ασφαλής.
Το strict mode εισάγεται στην πρώτη γραμμή του κώδικα και ισχύει για όλο το σκριπτ (global) ή επιλεκτικά σε μία ή περισσότερες συναρτήσεις.
Η εντολή για strict mode είναι:
'use strict';
Στα molules το strict mode είναι προκαθορισμένο και δεν χρειάζεται να δηλωθεί.
Οι περιορισμοί και αλλαγές που εισάγει είναι:
1. Αδήλωτες μεταβλητές
'use strict'; x = "hello world";
Στο παραπάνω παράδειγμα θα προκύψει το λάθος: x is not defined.
2. Καταχώρηση τιμής σε read-only μεταβλητές
'use strict'; undefined = 5;
Στο παραπάνω παράδειγμα θα προκύψει το λάθος: Cannot assign to read only property.
3. Διαγραφή μη διαγράψιμων μεταβλητών ή αντικειμένων
'use strict'; delete Object.prototype;
Στο παραπάνω παράδειγμα θα προκύψει το λάθος: Cannot delete property ....
4. Μοναδικά ονόματα παραμέτρων
'use strict';
function sum(a, a, c) {
return a + a + c;
}
Στο παραπάνω παράδειγμα θα προκύψει το λάθος: Duplicate parameter name not allowed in this context.
5. Οκταδικές τιμές
'use strict'; let a = 0o10; let b = 015;
Οι οκταδικές τιμές έχουν το πρόθεμα 0o. Στο παραπάνω παράδειγμα, στη γραμμή 2, θα προκύψει το λάθος: Octal literals are not allowed in strict mode.
6. Ορισμός ιδιοτήτων σε πρωταρχικές τιμές (primitive values)
'use strict'; false.true = ''; (100).go = 'home'; 'hello'.there = 'how are you';
Οι παραπάνω γραμμές είναι λάθος. Στο παραπάνω παράδειγμα θα προκύψει το λάθος: Cannot create property ....
7. Επιτρέπονται ονόματα ιδιοτήτων με ίδιο όνομα σε ένα αντικείμενο
'use strict';
let b = { p: 1, p: 2 };
Δεν θα προκύψει λάθος στο παραπάνω παράδειγμα.
8. Αλλαγή στην τιμή του this
'use strict';
function fun() {
return this;
}
console.log(fun());
Επιστρέφει undefined αντί του window χωρίς το use strict.
9. Δεσμευμένες λέξεις
Οι λέξεις - προσδιοριστές: implements, interface, let, package, private, protected, public, static, και yield, δεσμεύονται από την javascript.