Bài 31: Use strict mode trong javascript

Ngày đăng: 1/5/2023 4:38:22 PM

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.

- Khi sử dụng use strict mode thì những dòng code trước đây bạn có thể chạy bình thường có thể sẽ không chạy được nữa.

VD:

-Không khai báo sử dụng chế độ strict mode.

for (i = 0; i <= 10; i++) {
        document.write(i  + '<br />');
    }

Chạy Code

-Đoạn code trên sẽ vẫn chạy và hoạt động bình thường. Nhưng, bây giờ mình sẽ khai báo sử dụng strict mode xem có chạy được không nhé!

"use strict"
for (i = 0; i <= 10; i++) {
    document.write(i  + '<br />');
}

Chạy Code

-Ngay lập tức các bạn sẽ nhận được dòng log báo lỗi như sau:

index.html:12 Uncaught ReferenceError: i is not defined at index.html:12

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 nữa:

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:

i = 'học lập trình online toidicode.com';
alert(i);

Chạy Code

-Nhưng strict mode thì không thể:

"use strict"
i = 'học lập trình online toidicode.com';
alert(i);

Chạy Code

-Để 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 i = 'học lập trình online toidicode.com';
// or
let i = 'học lập trình online toidicode.com';
alert(i);

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.

VD:

-Chế độ thường:

function getName (name)
{
    alert(name)
}
delete getName;
//không có gì xảy ra mặc dù delete không xóa
//được hàm

Chạy Code

-Chế độ strict mode:

"use strict"
function getName (name)
{
    alert(name)
}
delete getName;
//Uncaught SyntaxError: Delete of an unqualified 
//identifier in strict mode.

Chạy Code

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.

VD:

-Chế độ thường:

function getName (name, name, age)
{
    //code
}
//chạy bình thường.

Chạy Code

-Chế độ strict mode:

"use strict"
function getName (name, name, age)
{
    //code
}
//Uncaught SyntaxError: Duplicate parameter name not allowed in this context

Chạy Code

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 dưới dạng như phân hay nói cách khác thì có tiền tố (prefix) 0 đằng trước thì sẽ không được chấp nhận

VD:

-Chế độ thường:

var num = 01010;

-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.

VD:

-Chế độ thường:

var obj = {};
Object.defineProperty(obj, 'ver', {value: 1, writable: false});
obj.ver = 10;
//không có gì xảy ra

Chạy Code

-Chế độ strict mode:

"use strict"
var obj = {};
Object.defineProperty(obj, 'ver', {value: 1, writable: false});
obj.ver = 10;

Chạy Code

Không sử dụng được with

VD:

-Chế độ thường:

var bar = 1;
var foo = 2;
with (bar){
    console.log(foo);
}
//2

Chạy Code

-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

Chạy Code

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");
alert(x);
//Uncaught ReferenceError: x is not defined

Chạy Code

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

VD:

-Chế độ thường:

var implements = 'Học Lập Trình Online tại Toidicode.com';
alert(implements);
//chạy bình thường.

Chạy Code

-Chế độ strict mode:

"use strict"
var implements = 'Học Lập Trình Online tại Toidicode.com';
alert(implements);
//Uncaught SyntaxError: Unexpected strict mode reserved word

Chạy Code

3, Lời kết.

-Đọc xong phần này mình hy vọng mọi người cũng có thể hiểu hơn về strict mode trong javascript và với quan điểm của cá nhân mình thì mình khuyên mọi người lên sử dụng strict mode trong khi code.

Nguồn tin: toidicode.com