Quay lại
Featured image of post use strict hay strict mode trong Javascript là gì?

use strict hay strict mode trong Javascript là gì?

use strict; trong javascript là chuỗi để báo cho Javascript phải hoạt động theo strict mode, vậy strict mode là gì? nó khác gì với bình thường nhỉ?

Use strict là gì? Nó dùng để làm gì?

  • Use strict là khái niệm mới từ khi ES5 được phát hành, nó là 1 chuỗi bình thường, và được trình duyệt có version Javascript ES5 trở lên hiểu được, còn trình duyệt hỗ trợ Javascript version thấp hơn sẽ có vấn đề gì cả.

  • Bởi vì Javascript là ngôn ngữ lập trình khá dễ dãi, khai báo và dùng biến kiểu gì cũng được, hay nói 1 cách khác là vô tội vạ, khiến cho nhiều bugs phát sinh và khó kiểm soát việc khai báo và sử dụng biến.

  • use strict được sinh ra để báo với Javascript rằng nó phải tuân theo strict mode. Với chế độ này thì bạn không thể sử dụng biến trước khi khai báo (nếu không có use strict thì bạn sẽ có thể sử dụng biến trước khi khai báo chúng).

Cách khai báo

"use strict;";

Đơn giản vậy thôi, bạn để dòng trên ở trên cùng của file javascript của bạn là được nhé, tất cả code javascript của bạn ở phía dưới sẽ là strict mode.

Ví dụ:

"use strict;";
hello = "Xin chào"; // Lỗi, vì bạn chưa khai báo biến hello mà đã gán giá trị cho nó.

// ------------------------

sayHello();
function sayHello() {
  hello = "Xin chào bạn"; // vẫn lỗi, vì bạn chưa khai báo biến hello mà đã gán giá trị cho nó.
}

Ví dụ 2:

hello = "Xin chào bạn"; // Không bị lỗi nhé

sayHello();
function sayHello() {
  "use strict;";
  hello = "Xin chào bạn"; // lỗi, vì use strict được đặt trong function này.
}

Tại sao lại phải dùng strict mode?

Có vài lý do sau đây mà chúng ta nên sử dụng strict mode khi code:

  • Tránh việc lập trình viên vô tình tạo ra 1 biến global scope mà họ không hề biết.
    • Vì trong chế độ bình thường, thì lập trình viên quên mất, nên tạo ra 1 biến global scope bằng cách không để var/let/const cho nó.
    • Sau đó có logic phía dưới lại update giá trị cho biến global này, dẫn đến việc có thể vô tình tạo ra bug nào đó, khiến chúng ta mất khá nhiều thời gian để debug để tìm ra vấn đề.
  • Tạo cho chúng ta thói quen lập trình tốt hơn, tư duy cấu trúc và logic khi lập trình, phải khai báo biến trước khi sử dụng.
  • Strict mode giúp chúng ta tránh việc code logic vô tội vạ, như: gán giá trị cho biến không được gán, sử dụng biến hoặc object hoặc thuộc tính không tồn tại…

Các trường hợp Javascript báo lỗi khi sử dụng use strict:

  • Sử dụng biến chưa được khai báo

    "use strict;";
    hello = "Xin chào"; // Lỗi, vì bạn chưa khai báo biến hello mà đã gán giá trị cho nó.
    
  • Delete 1 biến hoặc 1 object hoặc 1 function

    "use strict";
    let hello = "Xin chào";
    delete hello; // Lỗi
    
    function sayHello() {
      console.log("Xin chào");
    };
    delete sayHello; // Lỗi
    
  • Sử dụng các keyword làm tên biến:

    "use strict";
    var eval = "Xin chào"; // Lỗi
    let arguments = "Xin chào"; // Lỗi
    

    Các tự khóa (keyword) không thể sử dụng làm tên biến:

    implements
    interface
    let
    package
    private
    protected
    public
    static
    yield
    eval
    arguments
    ...
    

Bình luận sử dụng Facebook hoặc Google bên dưới nhé :)