Chế độ chặt chẽ của JavaScript
- Trang trước JS Hoisting
- Trang tiếp theo Từ khóa JS this
"use strict";
Định nghĩa mã JavaScript nên được thực thi trong "chế độ chặt chẽ".
Lệnh "use strict"
"use strict"
Là lệnh mới trong JavaScript 1.8.5 (ECMAScript phiên bản 5).
Nó không phải là một câu lệnh mà là một biểu thức văn bản, các phiên bản JavaScript sớm hơn sẽ bỏ qua nó.
"use strict";
Chức năng của nó là chỉ thị mã JavaScript nên được thực thi trong "chế độ chặt chẽ".
Trong chế độ chặt chẽ, bạn không thể, ví dụ, sử dụng biến không được khai báo.
Dưới đây là các phiên bản trình duyệt hỗ trợ chế độ chặt chẽ:
- Phiên bản 10 trở lên của IE
- Phiên bản 4 trở lên của Firefox
- Phiên bản 13 trở lên của Chrome
- Phiên bản 5.1 trở lên của Safari
- Phiên bản 12 trở lên của Opera
Khai báo chế độ chặt chẽ
Bằng cách thêm ở đầu ván bản hoặc hàm: "use strict";
Để khai báo chế độ chặt chẽ.
Khai báo ở đầu ván bản, có phạm vi toàn cục (tất cả mã trong ván bản đều được thực thi bằng chế độ chặt chẽ):
Mô hình
"use strict"; x = 3.14; // Điều này sẽ gây ra lỗi vì x vẫn chưa được khai báo
Mô hình
"use strict"; myFunction(); function myFunction() { y = 3.14; // Điều này sẽ gây ra lỗi vì y vẫn chưa được khai báo }
Khai báo chế độ chặt chẽ trong hàm, có phạm vi cục bộ (chỉ mã trong hàm được thực thi bằng chế độ chặt chẽ):
x = 3.14; // Điều này sẽ không gây ra lỗi myFunction(); function myFunction() { "use strict"; y = 3.14; // Điều này sẽ gây ra lỗi }
"use strict"; cú pháp
Cú pháp của chế độ chặt chẽ được thiết kế để tương thích với các phiên bản JavaScript sớm hơn.
Chương trình văn bản số trong mã JavaScript (ví dụ 4+5) hoặc văn bản chuỗi ("Bill Gates") không có tác dụng tiêu cực. Nó chỉ được biên dịch thành biến không tồn tại sau đó biến mất.
Tất cả "use strict";
Chỉ ảnh hưởng đến các bộ biên dịch “hiểu” ý nghĩa của nó.
Tại sao lại sử dụng chế độ chặt chẽ?
Chế độ chặt chẽ giúp chúng ta dễ dàng viết JavaScript “an toàn” hơn.
Chế độ chặt chẽ biến những cú pháp được chấp nhận trước đây thành lỗi thực sự.
Ví dụ, trong JavaScript bình thường, việc đánh dấu tên biến sai sẽ tạo ra biến toàn cục mới. Trong chế độ chặt chẽ, điều này sẽ ném lỗi, vì vậy không thể tạo ra biến toàn cục một cách ngẫu nhiên.
Trong JavaScript bình thường, nếu gán giá trị cho thuộc tính không thể ghi, nhà phát triển sẽ không nhận được bất kỳ phản hồi lỗi nào.
Trong chế độ chặt chẽ, việc gán giá trị cho thuộc tính không thể ghi, chỉ có thể đọc, không tồn tại, hoặc gán giá trị cho biến hoặc đối tượng không tồn tại sẽ ném lỗi.
Những điều không được phép trong chế độ chặt chẽ
Việc sử dụng biến mà không khai báo biến là không được phép:
"use strict"; x = 3.14; // Điều này sẽ gây ra lỗi
Đối tượng cũng là biến
Việc sử dụng đối tượng mà không khai báo đối tượng cũng là không được phép:
"use strict"; x = {p1:10, p2:20}; // Điều này sẽ gây ra lỗi
Việc xóa biến (hoặc đối tượng) là không được phép:
"use strict"; var x = 3.14; delete x; // Điều này sẽ gây ra lỗi
Việc xóa hàm là không được phép:
"use strict"; function x(p1, p2) {}; delete x; // Điều này sẽ gây ra lỗi
Việc sử dụng tên tham số trùng lặp là không được phép:
"use strict"; function x(p1, p1) {}; // Điều này sẽ gây ra lỗi
Chuỗi số giá trị tám là không được phép:
"use strict"; var x = 010; // Điều này sẽ gây ra lỗi
Ký tự chuyển义 là không được phép:
"use strict"; var x = \010; // Điều này sẽ gây ra lỗi
Việc ghi vào thuộc tính chỉ đọc là không được phép:
"use strict"; var obj = {}; Object.defineProperty(obj, "x", {value:0, writable:false}); obj.x = 3.14; // Điều này sẽ gây ra lỗi
Việc ghi vào thuộc tính chỉ có thể đọc là không được phép:
"use strict"; var obj = {get x() {return 0} }; obj.x = 3.14; // Điều này sẽ gây ra lỗi
Việc xóa thuộc tính không thể xóa là không được phép:
"use strict"; delete Object.prototype; // Điều này sẽ gây ra lỗi
Chuỗi "eval" không thể sử dụng làm biến:
"use strict"; var eval = 3.14; // Điều này sẽ gây ra lỗi
Chuỗi "arguments" không thể sử dụng làm biến:
"use strict"; var arguments = 3.14; // Điều này sẽ gây ra lỗi
with
Câu lệnh không được phép:
"use strict"; with (Math){x = cos(2)}; // Điều này sẽ gây ra lỗi
Không được phép eval()
Tạo biến trong phạm vi mà nó được gọi:
"use strict"; eval ("var x = 2"); alert (x); // Điều này sẽ gây ra lỗi
Trong cuộc gọi hàm tương tự như f(), giá trị của this là đối tượng toàn cục. Trong chế độ chặt chẽ, bây giờ nó đã trở thành undefined
。
Bảo đảm cho tương lai
Không được phép sử dụng các từ khóa được để lại cho tương lai trong chế độ chặt chẽ. Chúng là:
- implements
- interface
- let
- package
- private
- protected
- public
- static
- yield
"use strict"; var public = 1500; // Điều này sẽ gây ra lỗi
Cảnh báo
"use strict"
Câu lệnh chỉ có thể trongBắt đầuĐã được nhận diện.
- Trang trước JS Hoisting
- Trang tiếp theo Từ khóa JS this