JavaScript 严格模式
- Προηγούμενη σελίδα JS Hoisting
- Επόμενη σελίδα Το κλειδί JS this
"use strict";
定义 JavaScript 代码应该以“严格模式”执行。
"use strict" 指令
"use strict"
是 JavaScript 1.8.5 中的新指令(ECMAScript version 5)。
它不算一条语句,而是一段文字表达式,更早版本的 JavaScript 会忽略它。
"use strict";
的作用是指示 JavaScript 代码应该以“严格模式”执行。
在严格模式中,您无法,例如,使用未声明的变量。
以下版本的浏览器支持严格模式:
- 版本 10 以后的 IE
- 版本 4 以后的 Firefox
- 版本 13 以后的 Chrome
- 版本 5.1 以后的 Safari
- 版本 12 以后的 Opera
声明严格模式
通过在脚本或函数的开头添加 "use strict";
来声明严格模式。
在脚本开头进行声明,拥有全局作用域(脚本中的所有代码均以严格模式来执行):
实例
"use strict"; x = 3.14; // 这会引发错误,因为 x 尚未声明
实例
"use strict"; myFunction(); function myFunction() { y = 3.14; // 这会引发错误,因为 y 尚未声明 }
在函数中声明严格模式,拥有局部作用域(只有函数中的代码以严格模式执行):
x = 3.14; // 这不会引发错误 myFunction(); function myFunction() { "use strict"; y = 3.14; // 这会引发错误 }
"use strict"; 语法
声明严格模式的语法被设计为兼容更早版本的 JavaScript。
编译 JavaScript 程序中的数值文字(例如 4+5)或字符串文字("Bill Gates")不会有负面效果。它只会编译为不存在的变量然后消失。
Όλα "use strict";
Απέχουν μόνος του τον νέο μεταφραστή που κατανοεί τη σημασία του.
Γιατί να χρησιμοποιούμε το σκληρό μοντέλο;
Το σκληρό μοντέλο μας καθιστά πιο εύκολο να γράψουμε "安全的" JavaScript.
Το σκληρό μοντέλο μετατρέπει τις προηγούμενα αποδεκτές "κακές γραμματικές" σε πραγματικά σφάλματα.
Για παράδειγμα, στο συνηθισμένο JavaScript, η λάθος πληκτρολόγηση ονόματος μεταβλητών θα δημιουργήσει νέες παγκόσμιες μεταβλητές. Στο σκληρό μοντέλο, αυτό θα προκαλέσει σφάλμα, οπότε δεν είναι δυνατόν να δημιουργηθούν τυχαία παγκόσμιες μεταβλητές.
Στο συνηθισμένο JavaScript, αν εκτελέσουμε τιμή σε μη γράψιμο ιδιοτήτες, οι κατασκευαστές δεν θα λάβουν καμία ανατροφοδότηση σφάλματος.
Στο σκληρό μοντέλο, η εκτέλεση τιμής σε μη γράψιμο, μόνος αναγνωστικός, μη υπαρκτό ιδιοτήτες ή σε μη υπαρκτές μεταβλητές ή αντικείμενα θα προκαλέσει σφάλμα.
Απωστικά, πράγματα που δεν επιτρέπεται στο σκληρό μοντέλο
Η χρήση μεταβλητών χωρίς δήλωση, δεν επιτρέπεται:
"use strict"; x = 3.14; // Θα προκαλέσει σφάλμα
Τα αντικείμενα είναι μεταβλητές
Η χρήση αντικειμένων χωρίς δήλωση δεν επιτρέπεται:
"use strict"; x = {p1:10, p2:20}; // Θα προκαλέσει σφάλμα
Η διαγραφή μεταβλητών (ή αντικειμένων) δεν επιτρέπεται:
"use strict"; var x = 3.14; delete x; // Θα προκαλέσει σφάλμα
Η διαγραφή συνάρτησης δεν επιτρέπεται:
"use strict"; function x(p1, p2) {}; delete x; // Θα προκαλέσει σφάλμα
Η επανάληψη ονομάτων παραμέτρων δεν επιτρέπεται:
"use strict"; function x(p1, p1) {}; // Θα προκαλέσει σφάλμα
Οι τετραψήφιοι αριθμοί γραμμάτων δεν επιτρέπεται:
"use strict"; var x = 010; // Θα προκαλέσει σφάλμα
Οι χαρακτήρες αποκρυπτογράφησης δεν επιτρέπεται:
"use strict"; var x = \010; // Θα προκαλέσει σφάλμα
Η εγγραφή μόνος αναγνωστικής ιδιοτήτων δεν επιτρέπεται:
"use strict"; var obj = {}; Object.defineProperty(obj, "x", {value:0, writable:false}); obj.x = 3.14; // Θα προκαλέσει σφάλμα
Η εγγραφή μόνος διαβάσιμος ιδιοτήτων δεν επιτρέπεται:
"use strict"; var obj = {get x() {return 0} }; obj.x = 3.14; // Θα προκαλέσει σφάλμα
Η διαγραφή μη διαγράφεικων ιδιοτήτων δεν επιτρέπεται:
"use strict"; delete Object.prototype; // Θα προκαλέσει σφάλμα
Η συμβολη "eval" δεν μπορεί να χρησιμοποιηθεί ως μεταβλητή:
"use strict"; var eval = 3.14; // Θα προκαλέσει σφάλμα
Η συμβολη "arguments" δεν μπορεί να χρησιμοποιηθεί ως μεταβλητή:
"use strict"; var arguments = 3.14; // Αυτό θα προκαλέσει σφάλμα
with
Δεν επιτρέπεται η χρήση της πρότασης:
"use strict"; with (Math){x = cos(2)}; // Αυτό θα προκαλέσει σφάλμα
Δεν επιτρέπεται η χρήση του with για λόγους ασφαλείας eval()
Δημιουργία μεταβλητών στην περιοχή όπου καλούνται:
"use strict"; eval ("var x = 2"); alert (x); // Αυτό θα προκαλέσει σφάλμα
Σε μια κλήση λειτουργίας όπως f(), η τιμή του this είναι το αντικείμενο του παγκόσμιου αντικειμένου. Στο σφιχτό μοτίβο, τώρα είναι undefined
。
Προστασία για το μέλλον
Δεν επιτρέπεται η χρήση των λέξεων-κλειδιών που προορίζονται για το μέλλον σε σφιχτό μοτίβο. Είναι αυτές:
- implements
- interface
- let
- package
- private
- protected
- public
- static
- yield
"use strict"; var public = 1500; // Αυτό θα προκαλέσει σφάλμα
Προειδοποίηση
"use strict"
Οι οδηγίες μπορούν να χρησιμοποιηθούν μόνο σε σενάρια ή σε λειτουργίες.ΆρχισηΑναγνωρίζεται.
- Προηγούμενη σελίδα JS Hoisting
- Επόμενη σελίδα Το κλειδί JS this