DANH MỤC: JAVASCRIPT CƠ BẢN

Bài 30: Use strict mode trong javascript


Nếu như bạn là người hay làm việc trên các opensource javascript thì chắc chắn sẽ chẳng lạ gì với dòng này nữa, nhưng bạn đã hiểu về nó chưa? Nó có tác dụng gì? Hãy mình tìm hiểu nhé!

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 />');
    }

-Đ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 />');
}

-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);

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

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

-Để 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ế độ strict mode:

"use strict"
function getName (name)
{
    alert(name)
}
delete getName;
//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.

VD:

-Chế độ thường:

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

-Chế độ strict mode:

"use strict"
function getName (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ố 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ế độ strict mode:

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

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

VD:

-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");
alert(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

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ế độ 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

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.

Tham khảo: w3schools.com

Nguồn: Toidicode.com

Thông tin tác giả

Vũ Thanh Tài

Vũ Thanh Tài

Biển học vô biên, quay đầu là dại!

Hãy tham gia group facebook để cùng giao lưu chia sẻ kiến thức! Tham Gia