Làm cách nào để áp dụng chế độ nghiêm ngặt trong JavaScript?

Chế độ nghiêm ngặt đã được giới thiệu trong ECMAScript 5 (ES5). Đây là phiên bản ngôn ngữ JavaScript hạn chế hoặc chặt chẽ hơn về mặt ngữ nghĩa, tạo ra lỗi cho những lỗi đó được xử lý âm thầm theo cách khác. Ví dụ, ở chế độ không nghiêm ngặt nếu bạn khởi tạo một biến mà không khai báo nó bằng từ khóa

x = 5;
console.log(x); // 5

function sayHello() {
    "use strict";
    str = "Hello World!"; // ReferenceError: str is not defined
    console.log(str);
}
sayHello();
2 (e. g.
x = 5;
console.log(x); // 5

function sayHello() {
    "use strict";
    str = "Hello World!"; // ReferenceError: str is not defined
    console.log(str);
}
sayHello();
3), trình thông dịch JavaScript sẽ cho rằng bạn đang đề cập đến một biến toàn cục và nếu không có biến nào như vậy tồn tại, nó sẽ tự động tạo một biến

Ngoài ra, các tính năng không được dùng nữa cũng có thể tạo ra lỗi ở chế độ nghiêm ngặt. Do đó, chế độ nghiêm ngặt giúp giảm lỗi, cải thiện bảo mật và hiệu suất tổng thể của ứng dụng của bạn

Kích hoạt chế độ nghiêm ngặt

Để bật chế độ nghiêm ngặt, tất cả những gì bạn cần làm chỉ là thêm chuỗi

x = 5;
console.log(x); // 5

function sayHello() {
    "use strict";
    str = "Hello World!"; // ReferenceError: str is not defined
    console.log(str);
}
sayHello();
4 vào đầu tập lệnh của mình, như trong ví dụ sau

"use strict";

// All your code goes here
x = 5; // ReferenceError: x is not defined
console.log(x);

Nếu bạn thêm lệnh

x = 5;
console.log(x); // 5

function sayHello() {
    "use strict";
    str = "Hello World!"; // ReferenceError: str is not defined
    console.log(str);
}
sayHello();
4 làm dòng đầu tiên trong chương trình JavaScript của mình, thì chế độ nghiêm ngặt sẽ áp dụng cho toàn bộ tập lệnh. Tuy nhiên, bạn cũng có thể chỉ bật chế độ nghiêm ngặt trong một chức năng, như thế này

x = 5;
console.log(x); // 5

function sayHello() {
    "use strict";
    str = "Hello World!"; // ReferenceError: str is not defined
    console.log(str);
}
sayHello();

Ghi chú. Lệnh

x = 5;
console.log(x); // 5

function sayHello() {
    "use strict";
    str = "Hello World!"; // ReferenceError: str is not defined
    console.log(str);
}
sayHello();
4 chỉ được nhận dạng khi bắt đầu tập lệnh hoặc chức năng. Tất cả các trình duyệt hiện đại đều hỗ trợ chỉ thị
x = 5;
console.log(x); // 5

function sayHello() {
    "use strict";
    str = "Hello World!"; // ReferenceError: str is not defined
    console.log(str);
}
sayHello();
4 ngoại trừ Internet Explorer 9 và các phiên bản thấp hơn. Ngoài ra, các trình duyệt không hỗ trợ lệnh
x = 5;
console.log(x); // 5

function sayHello() {
    "use strict";
    str = "Hello World!"; // ReferenceError: str is not defined
    console.log(str);
}
sayHello();
4 sẽ âm thầm bỏ qua lệnh đó và phân tích cú pháp JavaScript ở chế độ không nghiêm ngặt


Hạn chế chung trong Chế độ nghiêm ngặt

Chế độ nghiêm ngặt thay đổi cả hành vi cú pháp và thời gian chạy. Trong các phần sau, chúng ta sẽ xem xét các hạn chế chung được thực thi ở chế độ nghiêm ngặt

Các biến không khai báo không được phép

Như bạn đã biết, trong chế độ nghiêm ngặt, tất cả các biến phải được khai báo. nếu bạn gán một giá trị cho một mã định danh không phải là một biến được khai báo, thì ReferenceError sẽ được đưa ra

"use strict";

function doSomething() {
    msg = "Hi, there!"; // ReferenceError: msg is not defined
    return msg;
}
console.log(doSomething());

Không được phép xóa một biến hoặc một hàm

Ở chế độ nghiêm ngặt, nếu bạn cố xóa một biến hoặc một hàm, lỗi cú pháp sẽ xuất hiện. Trong khi đó, ở chế độ không nghiêm ngặt, nỗ lực đó không thành công một cách âm thầm và biểu thức xóa có giá trị là

x = 5;
console.log(x); // 5

function sayHello() {
    "use strict";
    str = "Hello World!"; // ReferenceError: str is not defined
    console.log(str);
}
sayHello();
9

"use strict";

var person = {name: "Peter", age: 28};
delete person; // SyntaxError

Tương tự, khi bạn cố xóa một chức năng ở chế độ nghiêm ngặt, bạn sẽ gặp lỗi cú pháp

"use strict";

function sum(a, b) {
    return a + b;
}
delete sum; // SyntaxError

Sao chép tên tham số là không được phép

Ở chế độ nghiêm ngặt, một lỗi cú pháp sẽ được đưa ra, nếu khai báo hàm có hai hoặc nhiều tham số có cùng tên. Ở chế độ không nghiêm ngặt, không có lỗi xảy ra

"use strict";

function square(a, a) { // SyntaxError
    return a * a;
}
console.log(square(2, 2));

Phương pháp eval không thể thay đổi phạm vi

Ở chế độ nghiêm ngặt, vì lý do bảo mật, mã được chuyển đến

"use strict";

function doSomething() {
    msg = "Hi, there!"; // ReferenceError: msg is not defined
    return msg;
}
console.log(doSomething());
0 không thể khai báo/sửa đổi biến hoặc xác định hàm trong phạm vi xung quanh như ở chế độ không nghiêm ngặt

"use strict";

eval("var x = 5;");
console.log(x); // ReferenceError: x is not defined

Không thể sử dụng eval và đối số làm Định danh

Ở chế độ nghiêm ngặt, tên

"use strict";

function doSomething() {
    msg = "Hi, there!"; // ReferenceError: msg is not defined
    return msg;
}
console.log(doSomething());
1 và
"use strict";

function doSomething() {
    msg = "Hi, there!"; // ReferenceError: msg is not defined
    return msg;
}
console.log(doSomething());
2 được coi như từ khóa, vì vậy chúng không thể được sử dụng làm tên biến, tên hàm hoặc tên tham số hàm, v.v.

"use strict";

var eval = 10; // SyntaxError
console.log(eval);

Tuyên bố with không được phép

Ở chế độ nghiêm ngặt, câu lệnh

"use strict";

function doSomething() {
    msg = "Hi, there!"; // ReferenceError: msg is not defined
    return msg;
}
console.log(doSomething());
3 không được phép. Câu lệnh
"use strict";

function doSomething() {
    msg = "Hi, there!"; // ReferenceError: msg is not defined
    return msg;
}
console.log(doSomething());
3 thêm các thuộc tính và phương thức của đối tượng vào phạm vi hiện tại. Vì vậy, các câu lệnh được lồng bên trong câu lệnh
"use strict";

function doSomething() {
    msg = "Hi, there!"; // ReferenceError: msg is not defined
    return msg;
}
console.log(doSomething());
3 có thể gọi trực tiếp các thuộc tính và phương thức của đối tượng mà không cần tham chiếu đến nó

"use strict";

// Without with statement
var radius1 = 5;
var area1 = Math.PI * radius1 * radius1;

// Using with statement
var radius2 = 5;
with(Math) { // SyntaxError
    var area2 = PI * radius2 * radius2;
} 

Không được phép ghi vào thuộc tính chỉ đọc

Ở chế độ nghiêm ngặt, việc gán giá trị cho thuộc tính không thể ghi, thuộc tính chỉ nhận hoặc thuộc tính không tồn tại sẽ gây ra lỗi. Ở chế độ không nghiêm ngặt, những nỗ lực này không thành công

"use strict";

var person = {name: "Peter", age: 28};

Object.defineProperty(person, "gender", {value: "male", writable: false});
person.gender = "female"; // TypeError

Không được phép thêm Thuộc tính mới vào Đối tượng không thể mở rộng

Ở chế độ nghiêm ngặt, các nỗ lực tạo thuộc tính mới trên các đối tượng không thể mở rộng hoặc không tồn tại cũng sẽ gây ra lỗi. Nhưng ở chế độ không nghiêm ngặt, những nỗ lực này âm thầm thất bại

x = 5;
console.log(x); // 5

function sayHello() {
    "use strict";
    str = "Hello World!"; // ReferenceError: str is not defined
    console.log(str);
}
sayHello();
0

Số bát phân không được phép

Ở chế độ nghiêm ngặt, các số bát phân (các số có tiền tố là số 0. g. 010, 0377) không được phép. Mặc dù vậy, nó được hỗ trợ trong tất cả các trình duyệt ở chế độ không nghiêm ngặt. Tuy nhiên, trong ES6, các số bát phân được hỗ trợ bằng cách đặt trước một số với

"use strict";

function doSomething() {
    msg = "Hi, there!"; // ReferenceError: msg is not defined
    return msg;
}
console.log(doSomething());
6 i. e. 0o10, 0o377, v.v.

x = 5;
console.log(x); // 5

function sayHello() {
    "use strict";
    str = "Hello World!"; // ReferenceError: str is not defined
    console.log(str);
}
sayHello();
1

Bạn có thể thấy rõ trong các ví dụ trên cách chế độ nghiêm ngặt có thể giúp bạn tránh mắc phải các lỗi phổ biến thường không được chú ý khi viết chương trình JavaScript

Từ khóa dành riêng cho tương lai không được phép

Như bạn đã biết từ các chương trước, các từ dành riêng không thể được sử dụng làm định danh (tên biến, tên hàm và nhãn vòng lặp) trong chương trình JavaScript. Ngoài ra, chế độ nghiêm ngặt cũng áp đặt các hạn chế đối với việc sử dụng các từ khóa được dành riêng cho tương lai.

Theo tiêu chuẩn ECMAScript 6 (hoặc ES6) mới nhất, những từ khóa này là từ khóa dành riêng khi chúng được tìm thấy trong mã chế độ nghiêm ngặt.

"use strict";

function doSomething() {
    msg = "Hi, there!"; // ReferenceError: msg is not defined
    return msg;
}
console.log(doSomething());
7,
"use strict";

function doSomething() {
    msg = "Hi, there!"; // ReferenceError: msg is not defined
    return msg;
}
console.log(doSomething());
8,
"use strict";

function doSomething() {
    msg = "Hi, there!"; // ReferenceError: msg is not defined
    return msg;
}
console.log(doSomething());
9,
"use strict";

var person = {name: "Peter", age: 28};
delete person; // SyntaxError
0,
"use strict";

var person = {name: "Peter", age: 28};
delete person; // SyntaxError
1,
"use strict";

var person = {name: "Peter", age: 28};
delete person; // SyntaxError
2,
"use strict";

var person = {name: "Peter", age: 28};
delete person; // SyntaxError
3 và
"use strict";

var person = {name: "Peter", age: 28};
delete person; // SyntaxError
4. Tuy nhiên, để tương thích tối ưu, bạn nên tránh sử dụng các từ khóa dành riêng làm tên biến hoặc tên hàm trong chương trình của mình

Mẹo. Các từ dành riêng, còn được gọi là từ khóa, là những từ đặc biệt là một phần của cú pháp ngôn ngữ JavaScript, ví dụ:

x = 5;
console.log(x); // 5

function sayHello() {
    "use strict";
    str = "Hello World!"; // ReferenceError: str is not defined
    console.log(str);
}
sayHello();
2,
"use strict";

var person = {name: "Peter", age: 28};
delete person; // SyntaxError
6,
"use strict";

var person = {name: "Peter", age: 28};
delete person; // SyntaxError
7,
"use strict";

var person = {name: "Peter", age: 28};
delete person; // SyntaxError
8, v.v. Xem tham chiếu từ khóa dành riêng cho JS để biết danh sách đầy đủ tất cả các từ dành riêng trong JavaScript

Làm cách nào để kích hoạt chế độ nghiêm ngặt trong JavaScript?

Chế độ nghiêm ngặt cho chức năng . Chỉ thị "sử dụng nghiêm ngặt" chỉ có thể được áp dụng cho phần thân của các hàm có tham số đơn giản. put the exact statement "use strict"; (or 'use strict'; ) in the function's body before any other statements. The "use strict" directive can only be applied to the body of functions with simple parameters.

Sử dụng nghiêm ngặt trong JavaScript là gì?

Trong hướng dẫn này, bạn sẽ tìm hiểu về cú pháp 'sử dụng nghiêm ngặt' của JavaScript với sự trợ giúp của các ví dụ. Trong JavaScript, 'sử dụng nghiêm ngặt'; . Điều này giúp viết mã JS tốt và an toàn dễ dàng hơn

Tôi có nên sử dụng JavaScript ở chế độ nghiêm ngặt không?

Đầu tiên, tất cả mã của bạn phải được chạy ở chế độ nghiêm ngặt. Chức năng javascript hiện đại cốt lõi được thay đổi (xem. gọi () và áp dụng ()) hoặc bị biến dạng (Lỗi im lặng) bằng cách thực thi mã bên ngoài chế độ nghiêm ngặt

Làm thế nào chế độ nghiêm ngặt được kích hoạt?

Chế độ nghiêm ngặt có thể được bật bằng cách chỉ cần nêu rõ chế độ này ở đầu tập lệnh của bạn hoặc trong hàm được yêu cầu . Khi một công cụ JavaScript gặp lệnh này, nó sẽ bắt đầu phân tích cú pháp mã ở một chế độ cụ thể, nơi việc bắt lỗi trở nên dễ dàng hơn.