NỘI DUNG BÀI VIẾT
Giới thiệu
Trong con mắt của nhiều lập trình viên, JavaScript là một thứ vô cùng lộn xộn. Lập trình JavaScript chẳng khác nào cực hình.
JavaScript có cung cấp cho lập trình viên chế độ “use strict”. Bằng việc khai báo và sử dụng chế độ này, JavaScript sẽ trở nên chính xác và nghiêm ngặt hơn. Do đó, bạn sẽ không thể viết code bừa bãi trong chế độ này.
1. Use strict là gì?
Use strict dịch sang tiếng việt thì có nghĩa là sử dụng sự nghiêm ngặt. Khi một đoạn lệnh được khai báo use strict thì tất cả các dòng code ở phía dưới dòng khai báo use strict sẽ được quản lý một cách nghiêm ngặt hơn về cú pháp.
x = 10; console.log(window.x); // => 10
Ở chế độ strict mode, bạn sẽ bị lỗi x chưa được định nghĩa: Uncaught ReferenceError: x is not defined x = 10; console.log(window.x); // => Uncaught ReferenceError: x is not defined
2. Các nghiêm ngặt của strict mode
Khi sử dụng strict mode bạn sẽ không thể làm được những điều sau:
Gán giá trị cho biến chưa được khai báo
Trong chế độ thường bạn có thể làm như này để gán giá trị cho một biến chưa khai báo
variable = "hocjavascript"; console.log(variable);
Nhưng strict mode thì không thể:
"use strict" variable = "hocjavascript"; console.log(variable); Uncaught ReferenceError: variable is not defined
Để khắc phục được điều trên thì bạn cần phải khai báo biến với từ khóa var hoặc let.
"use strict" var variable = "hocjavascript"; // or let variable = "hocjavascript"; console.log(variable);
Báo lỗi khi sử dụng delete
Nếu như ở chế độ thường thì bạn có thể xóa bất kỳ một thứ gì bằng từ khóa delete, mặc dù xóa được hay không nó cũng không báo lỗi. Nhưng khi sử dụng chế độ strict mode thì những thứ không thể xóa được nó sẽ báo lỗi ngay.
function getMyName (name) { console.log(name) } delete getMyName; //không có gì xảy ra mặc dù delete không xóa được hàm
Chế độ strict mode:
"use strict" function getMyName (name) { console.log(name) } delete getMyName; //Uncaught SyntaxError: Delete of an unqualified identifier in strict mode.
Các tham số của hàm không được trùng nhau
Nếu như chế độ thường bạn có thể khai báo các tham số truyền vào hàm được phép trùng nhau thì giờ đây khi sử dụng chế độ strict mode thì nó sẽ báo lỗi ngay lập tức.
Chế độ thường:
function getProfile (name, name, age) { //code } //chạy bình thường.
Chế độ strict mode: “use strict”
function getProfile (name, name, age) { //code } //Uncaught SyntaxError: Duplicate parameter name not allowed in this context
Không cho phép khai báo biến dưới dạng hệ nhị phân
Các số khai báo dưới dạng nhị phân hoặc có tiền tố prefix 0 đằng trước thì sẽ không được chấp nhận
Chế độ thường:
var num = 010100101010101;
Chế độ strict mode:
var num = 01010; //Uncaught SyntaxError: Octal literals are not allowed in strict mode
Không được phép ghi đè lên thuộc tính chỉ được phép đọc.
Chế độ thường:
var obj = {}; Object.defineProperty(obj, 'ver', {value: 1, writable: false}); obj.ver = 10; //không có gì xảy ra
Chế độ strict mode:
"use strict" var obj = {}; Object.defineProperty(obj, 'ver', {value: 1, writable: false}); obj.ver = 10; --------- Uncaught TypeError: Cannot assign to read only property 'ver' of object '#<Object>' at data.php:14
Không sử dụng được with
Chế độ thường:
var bar = 1; var foo = 2; with (bar){ console.log(foo); } //2
Chế độ strict mode:
"use strict" var bar = 1; var foo = 2; with (bar){ console.log(foo); } //Uncaught SyntaxError: Strict mode code may not include a with statement
Không cho phép khai báo biến trong eval
Vì lý do bảo mật nên khi sử dụng strict mode thì bạn sẽ không thể nào có thể khai báo được biến bên trong nó nữa.
"use strict" eval ("var x = 4"); console.log(x); //Uncaught ReferenceError: x is not defined
Không chấp nhận khai báo các keyword
Ở chế độ strict mode thì các bạn sẽ không sử dụng được các từ khóa sau để khai báo làm tên biến, hằng,…
- implements
- interface
- let
- package
- private
- protected
- public
- static
- yield
- arguments
Kết luận
Trên đây là một số lỗi thường gặp phải khi bạn sử dụng JavaScript ở strict mode. Nói vậy, không có nghĩa là tôi khuyên bạn tránh sử dụng strict mode. Ngược lại, chế độ này giúp bạn dễ dàng phát hiện lỗi. Và đây là sự đảm bảo cho code bạn không bị xung đột với những phiên bản JavaScript mới hơn sau này.
Nguồn: https://viblo.asia/p/use-strict-la-gi-va-cach-su-dung-trong-javascript-3P0lPz2mKox
Các bạn có thể tham khảo các bài viết hay về JavaScript tại đây.
Hãy tham gia nhóm Học lập trình để thảo luận thêm về các vấn đề cùng quan tâm.