Sử dụng JavaScript nghiêm ngặt
"use strict";
Xác định rằng mã JavaScript phải được thực thi ở "chế độ nghiêm ngặt".
Chỉ thị “sử dụng nghiêm ngặt”
Lệnh "use strict"
là lệnh mới trong 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 theo nghĩa đen, bị các phiên bản JavaScript trước đó bỏ qua.
Mục đích của "use strict"
là để chỉ ra rằng mã phải được thực thi ở "chế độ nghiêm ngặt".
Ví dụ, với chế độ nghiêm ngặt, bạn không thể sử dụng các biến không được khai báo.
Tất cả các trình duyệt hiện đại đều hỗ trợ "use strict" ngoại trừ Internet Explorer 9 trở xuống:
Directive | |||||
---|---|---|---|---|---|
"use strict" | 13.0 | 10.0 | 4.0 | 6.0 | 12.1 |
Các số trong bảng chỉ định phiên bản trình duyệt đầu tiên hỗ trợ đầy đủ lệnh này.
Bạn có thể sử dụng chế độ nghiêm ngặt trong tất cả các chương trình của mình. Nó giúp bạn viết mã sạch hơn, như ngăn bạn sử dụng các biến không được khai báo.
"use strict"
chỉ là một chuỗi, vì vậy IE 9 sẽ không đưa ra lỗi ngay cả khi nó không hiểu nó.
Khai báo chế độ nghiêm ngặt
Chế độ nghiêm ngặt được khai báo bằng cách thêm "use strict"; vào đầu tập lệnh hoặc hàm.
Được khai báo ở đầu tập lệnh, nó có phạm vi toàn cục (tất cả mã trong tập lệnh sẽ thực thi ở chế độ nghiêm ngặt):
Ví dụ
"use strict";
x = 3.14; // This will cause an error
because x is not declared
Hãy tự mình thử »Ví dụ
"use strict";
myFunction();
function myFunction() {
y = 3.14; // This will also cause an error
because y is not declared
}
Hãy tự mình thử »Được khai báo bên trong một hàm, nó có phạm vi cục bộ (chỉ mã bên trong hàm ở chế độ nghiêm ngặt):
x = 3.14; // This will not cause an error.
myFunction();
function
myFunction() {
"use strict";
y = 3.14; // This will cause an error
}
Hãy tự mình thử » Việc "sử dụng nghiêm ngặt"; Cú pháp
Cú pháp khai báo chế độ nghiêm ngặt được thiết kế để tương thích với các phiên bản JavaScript cũ hơn.
Việc biên dịch một ký tự số (4 + 5;) hoặc một chuỗi ký tự ("John Doe";) trong chương trình JavaScript không có tác dụng phụ. Nó chỉ đơn giản biên dịch thành một biến không tồn tại và chết.
Vì vậy hãy "use strict";
chỉ quan trọng đối với các trình biên dịch mới "hiểu" ý nghĩa của nó.
Tại sao lại có Chế độ nghiêm ngặt?
Chế độ nghiêm ngặt giúp viết JavaScript "bảo mật" dễ dàng hơn.
Chế độ nghiêm ngặt thay đổi "cú pháp xấu" được chấp nhận trước đây thành lỗi thực sự.
Ví dụ, trong JavaScript thông thường, việc gõ nhầm tên biến sẽ tạo ra một biến toàn cục mới. Trong chế độ nghiêm ngặt, điều này sẽ gây ra lỗi, khiến không thể vô tình tạo một biến toàn cục.
Trong JavaScript thông thường, nhà phát triển sẽ không nhận được bất kỳ phản hồi lỗi nào khi gán giá trị cho các thuộc tính không thể ghi.
Trong chế độ nghiêm ngặt, bất kỳ phép gán nào cho thuộc tính không thể ghi, thuộc tính chỉ getter, thuộc tính không tồn tại, biến không tồn tại hoặc đối tượng không tồn tại sẽ gây ra lỗi.
Không được phép ở Chế độ nghiêm ngặt
Không được phép sử dụng một biến mà không khai báo nó:
"use strict";
x = 3.14; // This will cause an error
Các đối tượng cũng là các biến.
Không được phép sử dụng một đối tượng mà không khai báo nó:
"use strict";
x = {p1:10, p2:20}; // This will cause an error
Không được phép xóa một biến (hoặc đối tượng).
"use strict";
let x = 3.14;
delete x; // This
will cause an error
Xóa một chức năng là không được phép.
"use strict";
function x(p1, p2) {};
delete x;
// This will cause an error
Không được phép sao chép tên tham số:
"use strict";
function x(p1, p1) {}; // This will cause an error
Chữ số bát phân không được phép:
"use strict";
let x = 010; // This
will cause an error
Ký tự thoát bát phân không được phép:
"use strict";
let x = "\010"; // This will cause an error
Không được phép ghi vào thuộc tính chỉ đọc:
"use strict";
const obj = {};
Object.defineProperty(obj, "x", {value:0, writable:false});
obj.x = 3.14; // This
will cause an error
Không được phép ghi vào thuộc tính chỉ nhận:
"use strict";
const obj = {get x()
{return 0} };
obj.x = 3.14; // This
will cause an error
Không được phép xóa một thuộc tính không thể xóa được:
"use strict";
delete Object.prototype; // This will cause an error
Từ eval
không thể được sử dụng như một biến:
"use strict";
let eval = 3.14; // This will cause an error
Các arguments
từ không thể được sử dụng như một biến:
"use strict";
let arguments = 3.14; // This will cause an error
Câu lệnh with
không được phép:
"use strict";
with (Math){x = cos(2)}; // This will cause an error
Vì lý do bảo mật, eval()
không được phép tạo các biến trong phạm vi mà nó được gọi.
Trong chế độ nghiêm ngặt, một biến không thể được sử dụng trước khi nó được khai báo:
"use strict";
eval ("x = 2");
alert (x); // This
will cause an error
Trong chế độ nghiêm ngặt, eval() không thể khai báo biến bằng từ khóa var:
"use strict";
eval ("var x = 2");
alert (x); // This
will cause an error
eval() không thể khai báo một biến bằng từ khóa let:
eval ("let x = 2");
alert (x); // This
will cause an error
Từ khóa this
trong hàm hoạt động khác ở chế độ nghiêm ngặt.
Từ khóa this
đề cập đến đối tượng được gọi là hàm.
Nếu đối tượng không được chỉ định, các hàm ở chế độ nghiêm ngặt sẽ trả về undefined
và các hàm ở chế độ bình thường sẽ trả về đối tượng chung (cửa sổ):
"use strict";
function myFunction() {
alert(this); // will alert "undefined"
}
myFunction();
Bằng chứng tương lai!
KHÔNG thể sử dụng từ khóa dành riêng cho các phiên bản JavaScript trong tương lai làm tên biến ở chế độ nghiêm ngặt.
Đó là:
- dụng cụ
- giao diện
- cho phép
- bưu kiện
- riêng tư
- được bảo vệ
- công cộng
- tĩnh
- năng suất
"use strict";
let public = 1500; // This will cause an error
Coi chừng!
Lệnh "use strict" chỉ được nhận dạng ở đầu tập lệnh hoặc hàm.