Use Strict là gì? Strict Mode trong JavaScript - Fedu

CHÀO MỪNG BẠN ĐẾN VỚI THƯ VIỆN HỌC TẬP & ĐÀO TẠO CƠ BẢN

Use Strict là gì? Strict Mode trong JavaScript

JavaScript

Hướng dẫn JavaScript

Biểu mẫu JavaScript

Đối tượng JavaScript

Hàm JavaScript

DOM JavaScript

Trình duyệt BOM

JavaScript Ajax

JavaScript Json

Use Strict xác định rằng mã JavaScript nên được thực hiện trong Strict Mode.

Lệnh hướng dẫn Use Strict

Lệnh hướng dẫn “use strict” mới trong JavaScript 1.8.5 (ECMAScript version 5). Đây không hẳn là một câu lệnh, nhưng là một literal expression, bị bỏ qua bởi các phiên bản trước của JavaScript.

Mục đích của “sử dụng nghiêm ngặt” là để chỉ ra rằng mã nên được thực hiện trong “chế độ nghiêm ngặt”. Với Strict Mode, bạn không thể sử dụng các biến không được khai báo.

Strict Mode được hỗ trợ trong: IE từ phiên bản 10, Firefox từ phiên bản 4, Chrome từ phiên bản 13, Safari từ phiên bản 5.1, Opera từ phiên bản 12.

Khai báo Strict Mode

Strict Mode được khai báo bằng cách thêm Use Strict để bắt đầu một script hoặc một hàm. Được khai báo vào đầu script, nó có phạm vi toàn cục (tất cả các mã trong kịch bản sẽ thực thi ở strict mode):

“use strict”;
x = 3.14;       // Điều này sẽ gây ra lỗi vì x không được khai báo

hay

“use strict”;
myFunction();

function myFunction() {
y = 3.14;   // Điều này cũng sẽ gây ra lỗi vì y không được khai báo
}

Được khai báo bên trong một hàm, nó có phạm vi cục bộ (chỉ có mã bên trong hàm là ở strict mode):

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ẽ không gây ra lỗi.
}

Cú pháp “use strict”;

Cú pháp để khai báo strict mode, được thiết kế để tương thích với các phiên bản cũ hơn của JavaScript. Biên soạn một chữ số (4 + 5;) hoặc một chuỗi ký tự (“John Doe”;) trong một chương trình JavaScript không có tác dụng phụ. Nó chỉ đơn giản biên dịch cho một biến không tồn tại.

Vì vậy, “use strict” chỉ có vấn đề với trình biên dịch mới “hiểu” ý nghĩa của nó.

Chế độ Strict Mode

Strict Mode giúp bạn viết mã JavaScript dễ dàng “an toàn” hơn, thay đổi “bad syntax” đã được chấp nhận trước đó thành một lỗi thực sự.

Ví dụ, trong JavaScript thông thường, nhập sai một tên biến tạo ra một biến toàn cục mới. Trong Strict Mode, điều này sẽ tạo ra một lỗi, làm cho nó không thể vô tình tạo ra 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ỳ thông báo lỗi nào khi gán giá trị cho thuộc tính non-writable. Trong Strict Mode, bất kỳ phép gán nào đối với thuộc tính non-writable, thuộc tính chỉ dùng getter, thuộc tính không tồn tại, biến không tồn tại hoặc một đối tượng không tồn tại, sẽ tạo ra một lỗi.

Not Allowed trong Strict Mode

Không cho phép sử dụng một biến mà không khai báo nó:

“use strict”;
x = 3.14;                // Điều này tạo ra lỗi.

Đối tượng cũng là các biến.

Không cho phép sử dụng một đối tượng mà không khai báo nó:

“use strict”;
x = {p1:10, p2:20};      // Điều này tạo ra lỗi.

Xóa một biến (hoặc đối tượng) không được phép:

“use strict”;
var x = 3.14;
delete x;                // Điều này tạo ra lỗi.

Xóa một hàm không được phép:

“use strict”;
function x(p1, p2) {};
delete x;                // Điều này tạo ra lỗi.

Nhân đôi tên tham số là không được phép:

“use strict”;
function x(p1, p1) {};   // Điều này tạo ra lỗi.

Không cho phép chữ số thập phân:

“use strict”;
var x = 010;             // Điều này tạo ra lỗi.

Các ký tự thoát không được phép:

“use strict”;
var x = \010;            // Điều này tạo ra lỗi.

Không được phép viết cho thuộc tính read-only:

“use strict”;
var obj = {};
Object.defineProperty(obj, “x”, {value:0, writable:false});

obj.x = 3.14;            // Điều này tạo ra lỗi.

Không được phép viết cho thuộc tính chỉ get-only:

“use strict”;
var obj = {get x() {return 0} };

obj.x = 3.14;            // Điều này tạo ra lỗi.

Không được phép xóa thuộc tính undeletable:

“use strict”;
delete Object.prototype; // Điều này tạo ra lỗi.

Chuỗi “eval” không thể được sử dụng như là một biến:

“use strict”;
var eval = 3.14;         // Điều này tạo ra lỗi.

Chuỗi “đối số” không thể được sử dụng như là một biến:

“use strict”;
var arguments = 3.14;    // Điều này tạo ra lỗi.

Không cho phép câu lệnh with:

“use strict”;
with (Math){x = cos(2)}; // Điều này tạo ra lỗi.

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:

“use strict”;
eval (“var x = 2”);
alert (x);               // Điều này tạo ra lỗi.

Trong các hàm gọi như f(), giá trị này là đối tượng toàn cục. Trong strict mode, hiện giờ nó chưa được xác định.

Các từ khoá dự phòng trong tương lai không được phép ở strict mode bao gồm:

  • implements
  • interface
  • let
  • package
  • private
  • protected
  • public
  • static
  • yield

“use strict”;
var public = 1500;      // Đây là một lỗi