Chế độ chặt chẽ của JavaScript

"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

Thử trực tiếp

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
}

Thử trực tiếp

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
}

Thử trực tiếp

"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

Thử trực tiếp

Đố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

Thử trực tiếp

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

Thử trực tiếp

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

Thử trực tiếp

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

Thử trực tiếp

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

Thử trực tiếp

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

Thử trực tiếp

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

Thử trực tiếp

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

Thử trực tiếp

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

Thử trực tiếp

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

Thử trực tiếp

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

Thử trực tiếp

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

Thử trực tiếp

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

Thử trực tiếp

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

Thử trực tiếp

Cảnh báo

"use strict" Câu lệnh chỉ có thể trongBắt đầuĐã được nhận diện.