Đôi khi các bạn sẽ thấy một số file JavaScript có từ khóa “use strict
” nhưng không biết nó là gì. Trong bài viết này hãy cùng mình tìm hiểu về use strict trong JavaScript nhé.
1. use strict trong JavaScript là gì?
Như bạn biết JavaScript là một ngôn ngữ lỏng lẻo, nhiều người than phiền rằng JavaScript quá lộn xộn. Nhưng kể từ phiên bản ECMAScript 5(ES5) đã giới thiệu chế độ use strict
.
use strict
dịch sang tiếng việt có nghĩa là chế độ nghiêm ngặt. Khi chế độ này được bật, JavaScript sẽ quản lý code của bạn nghiêm ngặt hơn về mặt cú pháp. Một ví dụ đơn giản khi bạn chưa khai báo một biến nhưng đã gán giá trị cho nó, Nếu thông thường thì code chúng ta vẫn chạy:
1 2 3 |
website = 'vi-magento.com'; console.log(website); // Kết quả: vi-magento.com |
Nhưng nếu chúng ta bật sang chế độ nghiêm ngặt thì đoạn code trên sẽ báo lỗi ngay:
1 2 3 4 |
'use strict'; website = 'vi-magento.com'; console.log(website); // Kết quả: Uncaught ReferenceError: website is not defined |
Sẽ có thông báo lỗi ở màn hình console:

Để chúng hoạt động đúng cách ở chế độ này các bạn cần khai báo biến trươc khi gán giá trị cho chúng bằng var, let hoặc const.
1 2 3 4 |
'use strict'; var website = 'vi-magento.com'; console.log(website); // Kết quả: vi-magento.com |
2. Cách sử dụng use strict trong JavaScript và phạm vi của use strict
Để bật chế độ nghiêm ngặt trong JavaScript bạn chỉ cần thêm từ khóa “use strict
“; vào đầu tập lệnh. Những đoạn code bên dưới use strict
sẽ được áp dụng chế độ nghiêm ngặt về cú pháp.
Trong trường hợp này strict mode sẽ có tác dụng cho toàn bộ file(toàn cục).
1 2 3 |
'use strict'; var website = 'vi-magento'; // code |
Hoặc bạn cũng có thể sử dụng cho một phạm vi cụ thể như một hàm. Trong trường hợp này bạn có thể đặt use strict
ở đầu hàm. Khi đó use strict
chỉ có tác dụng cho hàm này thôi (phạm vi cục bộ).
1 2 3 4 5 6 7 8 |
function getWebsite() { 'use strict'; // use strict chỉ có tác dụng trong hàm getWebsite var website = 'vi-magento'; console.log(website); } getWebsite(); outsite = 'Ngoài phạm vi của use strict'; console.log(outsite); |
3. Một số trường hợp không sử dụng được nếu bật strict mode
JavaScript là một ngôn ngữ lỏng lẻo nên nếu trong một dự án lớn đòi hỏi code phải được quản lý nghiêm ngặt hơn để tránh các lỗi tiềm tàng về sau. Và sau đây là một số trường hợp sẽ xảy ra lỗi nếu bạn sử dụng use strict trong JavaScript:
3.1. Gán giá trị cho biến chưa được khai báo
Nếu không sử dụng strict mode thì bạn có thể vô tư với điều này, nhưng khi bật chế độ combat à không chế độ strict mode lên thì bạn không được gán giá trị cho một biến chưa khai báo:
Ví dụ:
Trong chế độ mặc định, làm thế này thì vô tư:
1 2 |
message = "Học lập trình JavaScript cơ bản"; document.write(message); |
Nhưng khi bật strict mode thì lại không được:
1 2 3 4 |
// Không được làm thế này "use strict"; message = "Học lập trình JavaScript cơ bản"; document.write(message); |
Đoạn code trên sẽ báo lỗi và không thực thi tiếp.
Để không bị lỗi, bạn phải khai báo biến rõ ràng với từ khóa let
, var
, const
1 2 3 |
"use strict"; // Khai báo biến rõ ràng với từ khóa let message = "Học lập trình JavaScript cơ bản!"; |
Và cả đối với đối tượng.
1 2 3 4 5 6 7 |
"use strict"; // Chưa khai báo đối tượng. Chưa được phép sử dụng // như thế này x = { tenThuongHieu: "vi-magento", namThanhLap: 2020 }; |
Bạn chưa khai báo thì chưa được phép gán giá trị cho chúng.
3.2. Báo lỗi khi sử dụng delete
Khi bật chế độ strict mode lên thì bạn không thể sử dụng từ khóa delete
để xóa các hàm hay biến.
1 2 3 4 5 |
"use strict"; // Khai báo biến rõ ràng với từ khóa let message = "Học lập trình JavaScript cơ bản!"; // Sai vì không được delete delete message; |
3.3. Các tham số của hàm không được trùng nhau
Ở chế độ strict mode bạn sẽ không đươc khai báo các tham số trùng với nhau. Nó chửi đấy!
1 2 3 4 5 |
"use strict"; // Sai vì tham số message bị trùng function print_message(message, message) { document.write("Lập trình JavaScript căn bản"); } |
3.4. Không cho phép khai báo biến dưới dạng hệ nhị phân
Các số khi khai báo biến dưới dạng nhị phân hay nói cách khác là có tiền tố 0 phía trước sẽ không được chấp nhận trong chế độ này.
1 2 3 |
"use strict"; let number = 01010; // Uncaught SyntaxError: Octal literals are not allowed in strict mode. |
3.5. Không đươc phép ghi đè lên thuộc tính chỉ đươc phép đọc
Khi đã nói thuộc tính chỉ đọc thì chỉ được đọc, không được ghi đè.
1 2 3 4 5 6 7 8 9 |
"use strict"; let obj_demo = {}; Object.defineProperty(obj_demo, "ver", { value: 1, writable: false, }); // Cố ghi đè lên thuộc tính chỉ đọc obj_demo.ver = 10; // Uncaught TypeError: Cannot assign to read only property 'ver' of object '#<Object>' |
3.6. Không được sử dụng with
Từ khóa with
cũng không được sử dụng trong chế độ strict mode.
1 2 3 4 5 6 7 |
"use strict"; let one = 1; let two = 2; with(one) { document.write(one); } // Uncaught SyntaxError: Strict mode code may not include a with statement |
3.7. Không cho phép khai báo biến bên trong eval()
Trong chế độ nghiêm ngặt này không cho phép khai báo biến bên trong eval()
vì lý do bảo mật.
1 2 3 4 |
"use strict"; eval("let x = 17"); document.write(x); // Uncaught ReferenceError: x is not defined |
3.8. Không chấp nhận khai báo biến bằng tên keyword ở phiên bản cao hơn
Ở chế độ strict mode sẽ không cho phép bạn sử dụng các từ khóa sau để khai báo biến, hằng hay đặt tên cho hàm được sử dụng ở các phiên bản cao hơn (trong tương lai) như: implements
, interface
, let
, package
, private
, protected
, public
, static
và yield
.
3.9. Hành vi khác của từ khóa this
Từ khóa this
là một trường hợp có hành vi khá là khó nắm bắt trong JavaScript (nếu bạn là người mới học hay kể cả những người có kinh nghiệm)
Chính vì thế, với mục tiêu làm cho code nghiêm ngặt hơn.
Hành vi của từ khóa this
cũng là một thứ được trọng tâm điều chỉnh trong strict mode.
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
1 2 3 4 5 |
"use strict"; function myFunction() { console.log(this); // Kêt quả: undefined } myFunction(); |
Và các hàm ở chế độ bình thường sẽ trả về đối tượng toàn cục (Window
)
1 2 3 4 |
function myFunction() { console.log(this); // Kêt quả: Window } myFunction(); |
Kết luận
Tổng hợp lại một số điểm chính đáng chú ý về cách sử dụng use strict trong JavaScript vừa tìm hiểu trong bài viết này nhé:
- Bật chế độ nghiêm ngặt bằng cách thêm từ khóa “
use strict
” ở đầu file(toàn cục) hoặc ở đầu hàm(cục bộ). - Khi thêm
use strict
trong một tập lệnh thì các đoạn code bên dướiuse strict
sẽ được JavaScript quản lý chặt chẽ hơn về mặt cú pháp.