Lỗi và sai sót là không thể tránh khỏi trong lập trình. Một người bạn của tôi gọi chúng là những tính năng không xác định :). Gọi cho họ bất cứ thứ gì bạn muốn, nhưng tôi thành thật tin rằng lỗi là một trong những thứ khiến công việc lập trình viên của chúng tôi trở nên thú vị. Ý tôi là cho dù bạn có thất vọng đến mức nào đi chăng nữa thì

Bạn đang xem: cách try catch hoạt động trong javascript

Lỗi và lỗi là không thể tránh khỏi trong lập trình. Một người bạn của tôi gọi chúng là các tính năng không xác định :).

Hãy gọi cho họ bất cứ thứ gì bạn muốn, nhưng tôi thành thật tin rằng lỗi là một trong những thứ khiến công việc lập trình viên của chúng tôi trở nên thú vị.

Ý tôi là cho dù bạn có thất vọng đến mức nào khi cố gắng gỡ lỗi một số mã qua đêm, tôi chắc chắn rằng bạn sẽ được cười sảng khoái khi phát hiện ra rằng vấn đề chỉ là một dấu phẩy đơn giản mà bạn đã bỏ qua hoặc một cái gì đó tương tự cái đó. Mặc dù, một lỗi do khách hàng báo cáo sẽ khiến bạn nhăn mặt nhiều hơn là mỉm cười.

Điều đó nói rằng, sai sót có thể gây khó chịu và là nỗi đau thực sự ở phía sau. Đó là lý do tại sao trong bài viết này, tôi muốn giải thích điều gì đó được gọi là try / catch trong JavaScript.

Khối try / catch trong JavaScript là gì?

Khối try / catch về cơ bản được sử dụng để xử lý các lỗi trong JavaScript. Bạn sử dụng điều này khi bạn không muốn có lỗi trong tập lệnh làm hỏng mã của mình.

Mặc dù điều này có thể giống như điều bạn có thể dễ dàng thực hiện với câu lệnh if , nhưng try / catch mang lại cho bạn rất nhiều lợi ích ngoài những gì câu lệnh if / else có thể làm, một số mà bạn sẽ thấy bên dưới.

  hãy thử {
// ...
} bắt (e) {
// ...
}  

Câu lệnh try cho phép bạn kiểm tra một khối mã để tìm lỗi.

Một câu lệnh catch cho phép bạn xử lý lỗi đó. Ví dụ:

  thử {
getData () // getData không được định nghĩa
} bắt (e) {
cảnh báo (e)
}  

Về cơ bản, đây là cách try / catch được xây dựng. Bạn đặt mã của mình vào khối thử và ngay lập tức nếu có lỗi, JavaScript cung cấp quyền kiểm soát câu lệnh catch và nó chỉ thực hiện bất cứ điều gì bạn nói. Trong trường hợp này, nó sẽ cảnh báo bạn về lỗi.

Tất cả các lỗi JavaScript thực sự là các đối tượng chứa hai thuộc tính: tên (ví dụ: Lỗi, Lỗi cú pháp, v.v.) và thông báo lỗi thực tế. Đó là lý do tại sao khi chúng tôi cảnh báo e , chúng tôi nhận được một cái gì đó như ReferenceError: getData không được xác định .

Giống như mọi đối tượng khác trong JavaScript, bạn có thể quyết định truy cập các giá trị theo cách khác nhau, chẳng hạn như e.name (ReferenceError) và e.message ( getData không được định nghĩa).

Nhưng thành thật mà nói thì điều này không thực sự khác với những gì JavaScript sẽ làm. Mặc dù JavaScript sẽ tôn trọng bạn đủ để ghi lỗi trong bảng điều khiển và không hiển thị cảnh báo cho cả thế giới xem :).

Vậy lợi ích của câu lệnh try / catch là gì?

Cách sử dụng câu lệnh try / catch < / h2>

Câu lệnh throw

Một trong những lợi ích của try / catch là khả năng hiển thị những quảng cáo do bạn tạo tùy chỉnh lỗi. Đây được gọi là (lỗi ném) .

Trong những tình huống bạn không muốn thứ xấu xí này mà JavaScript hiển thị, bạn có thể xử lý lỗi của mình (một ngoại lệ) bằng cách sử dụng câu lệnh ném . Lỗi này có thể là một chuỗi, boolean hoặc đối tượng. Và nếu có lỗi, câu lệnh catch sẽ hiển thị lỗi mà bạn ném ra.

  let num = prompt ("chèn một số lớn hơn 30 nhưng nhỏ hơn 40")
thử {
if (isNaN (num)) ném "Không phải là số (☉。☉)!"
else if (num & gt; 40) ném "Bạn thậm chí đã đọc hướng dẫn chưa ಠ︵ಠ, ít hơn 40"
else if (num & lt; = 30) ném "Lớn hơn 30 (ب_ب)"
} bắt (e) {
cảnh báo (e)
}  

Điều này thật hay, phải không? Nhưng chúng ta có thể tiến thêm một bước nữa bằng cách thực sự tạo ra một lỗi với các lỗi khởi tạo JavaScript.

Về cơ bản, JavaScript phân loại lỗi thành sáu nhóm:

  • EvalError – Đã xảy ra lỗi trong hàm eval.
  • RangeError – Đã xảy ra một số nằm ngoài phạm vi, ví dụ: 1.toPre precision (500) . toPre precision về cơ bản cung cấp cho các số một giá trị thập phân, chẳng hạn như 1.000 và một số không thể có 500 giá trị đó.
  • ReferenceError – Sử dụng một biến không có đã được khai báo
  • Lỗi cú pháp – Khi đánh giá mã có lỗi cú pháp
  • Lỗi Loại – Nếu bạn sử dụng một giá trị nằm ngoài phạm vi các loại dự kiến: ví dụ: 1.toUpperCase ()
  • Lỗi URI (Định danh tài nguyên đồng nhất) – URIError sẽ xuất hiện nếu bạn sử dụng các ký tự không hợp lệ trong một hàm URI.

Vì vậy, với tất cả những điều này, chúng tôi có thể dễ dàng tạo ra một lỗi như throw new Error (" Xin chào ") . Trong trường hợp này, tên của lỗi sẽ là Lỗi và thông báo Xin chào . Bạn thậm chí có thể tiếp tục và tạo phương thức tạo lỗi tùy chỉnh của riêng mình, ví dụ:

  function CustomError (message) {
this.value = "customError";
this.message = tin nhắn;
}  

Và bạn có thể dễ dàng sử dụng tính năng này ở bất kỳ đâu với ném CustomError mới ("dữ liệu chưa được xác định") .

Cho đến nay, chúng tôi đã đã tìm hiểu về thử / bắt và cách nó ngăn tập lệnh của chúng ta chết, nhưng điều đó thực sự phụ thuộc. Hãy xem xét ví dụ này:

  thử {
console.log ({{}})
} bắt (e) {
cảnh báo (e.message)
}
console.log ("Điều này sẽ chạy sau các chi tiết đã ghi")  

Nhưng khi bạn dùng thử, ngay cả với câu lệnh try, nó vẫn không hoạt động. Điều này là do có hai loại lỗi chính trong JavaScript (những gì tôi đã mô tả ở trên –syntaxError, v.v. – không thực sự là loại lỗi. Bạn có thể gọi chúng là ví dụ về lỗi): lỗi phân tích cú pháp lỗi hoặc ngoại lệ thời gian chạy .

Lỗi thời gian phân tích cú pháp là lỗi xảy ra bên trong mã, về cơ bản là do công cụ không hiểu mã.

Ví dụ: từ trên xuống, JavaScript không hiểu ý của bạn là {{}} và do đó, việc thử / bắt của bạn không có tác dụng gì ở đây (nó đã thành công ” t làm việc).

Mặt khác, lỗi thời gian chạy là lỗi xảy ra trong mã hợp lệ và đây là những lỗi mà thử / bắt chắc chắn sẽ tìm thấy.

  thử {
y = x + 7
} bắt (e) {
alert ("x không được xác định")
}
alert ("Không cần lo lắng, try catch sẽ xử lý điều này để ngăn mã của bạn bị hỏng")  

Bạn có tin hay không, ở trên là mã hợp lệ và try / catch sẽ xử lý lỗi một cách thích hợp.

Câu lệnh Cuối cùng

Câu lệnh cuối cùng hoạt động giống như câu lệnh trung lập , điểm cơ sở hoặc điểm cuối cùng cho khối thử / bắt của bạn. Cuối cùng, về cơ bản bạn đang nói không có vấn đề gì xảy ra trong thử / bắt (lỗi hoặc không có lỗi), mã này trong câu lệnh cuối cùng sẽ chạy . Ví dụ:

  let data = prompt ("name")
thử{
if (data === "") ném ra Lỗi mới ("dữ liệu trống")
cảnh báo khác (`Xin chào $ {data} hôm nay bạn làm thế nào`)
} bắt (e) {
cảnh báo (e)
} cuối cùng {
alert ("chào mừng bạn đến với bài viết thử nắm bắt")
}  

Lồng các khối try

Bạn cũng có thể lồng các khối try, nhưng giống như mọi lồng ghép khác trong JavaScript (ví dụ: cho, và v.v.), nó có xu hướng trở nên vụng về và không thể đọc được, vì vậy tôi khuyên bạn không nên sử dụng nó. Nhưng đó chỉ là tôi.

Việc lồng các khối try mang lại cho bạn lợi thế khi chỉ sử dụng một câu lệnh catch cho nhiều câu lệnh try. Mặc dù bạn cũng có thể quyết định viết câu lệnh bắt cho mỗi khối thử, như sau:

  thử {
thử {
ném lỗi mới ('oops');
} bắt (e) {
console.log (e)
} cuối cùng {
console.log ('cuối cùng');
}
} bắt (ví dụ) {
console.log ('ngoài' + ex);
}  

Trong trường hợp này, sẽ không có bất kỳ lỗi nào từ khối thử bên ngoài vì không có vấn đề gì với nó. Lỗi đến từ khối try bên trong và nó đã tự xử lý (nó có câu lệnh bắt riêng). Hãy xem xét điều này bên dưới:

  thử {
thử {
ném Lỗi mới ('lỗi bắt bên trong');
} cuối cùng {
console.log ('cuối cùng');
}
} bắt (ví dụ) {
console.log (ví dụ);
}  

Đoạn mã trên hoạt động hơi khác một chút: lỗi xảy ra trong khối try bên trong không có câu lệnh catch mà thay vào đó là câu lệnh cuối cùng.

Lưu ý rằng < strong> try / catch có thể được viết theo ba cách khác nhau: try ... catch , try ... last , try ... bắt ... cuối cùng ), nhưng lỗi xảy ra từ lần thử bên trong này.

Câu lệnh cuối cùng cho việc thử nội tâm này chắc chắn sẽ hiệu quả, vì giống như chúng ta đã nói trước đó, nó hoạt động bất kể điều gì xảy ra trong thử / bắt. Nhưng ngay cả khi thử bên ngoài không có lỗi, quyền kiểm soát vẫn được trao cho khả năng ghi lại lỗi của nó. Và tốt hơn nữa, nó sử dụng lỗi mà chúng tôi đã tạo trong câu lệnh try bên trong vì lỗi đến từ đó.

Nếu chúng tôi tạo lỗi cho lần thử bên ngoài, nó sẽ vẫn hiển thị lỗi bên trong đã tạo, ngoại trừ lỗi bên trong tự bắt lỗi.

Bạn có thể tìm hiểu đoạn mã dưới đây bằng cách bình luận về điểm bên trong.

  hãy thử {
thử {
ném Lỗi mới ('lỗi bắt bên trong');
} catch (e) {// nhận xét điều này bắt kịp
console.log (e)
} cuối cùng {
console.log ('cuối cùng');
}
ném lỗi mới ("lỗi bắt bên ngoài")
} bắt (ví dụ) {
console.log (ví dụ);
}  

Lỗi Rethrow

Câu lệnh catch thực sự bắt được tất cả các lỗi xảy ra và đôi khi chúng tôi có thể không muốn điều đó . Ví dụ:

 "sử dụng nghiêm ngặt"
let x = parseInt (prompt ("nhập một số nhỏ hơn 5"))
thử{
y = x-10
if (y & gt; = 5) ném ra Lỗi mới ("y không nhỏ hơn 5")
cảnh báo khác (y)
} bắt (e) {
cảnh báo (e)
}  

Hãy giả sử trong một giây rằng số được nhập vào sẽ nhỏ hơn 5 (mục đích của “sử dụng nghiêm ngặt” là để chỉ ra rằng mã phải được thực thi ở “chế độ nghiêm ngặt”). Ví dụ: với chế độ nghiêm ngặt , bạn không thể sử dụng các biến chưa được khai báo ( nguồn ).

Tôi muốn câu lệnh try thông báo lỗi y is not … khi giá trị của y lớn hơn 5, gần như không thể xảy ra. Lỗi ở trên phải dành cho y không phải là ít hơn … và không phải là y là không xác định .

Trong những tình huống như thế này, bạn có thể kiểm tra tên của lỗi và nếu lỗi không phải như bạn muốn, hãy đánh lại lỗi :

  "sử dụng nghiêm ngặt"
let x = parseInt (prompt ("nhập một số nhỏ hơn 5"))
thử{
y = x-10
if (y & gt; = 5) ném ra Lỗi mới ("y không nhỏ hơn 5")
cảnh báo khác (y)
} bắt (e) {
if (e instanceof ReferenceError) {
ném e
} else alert (e)
}
 

Điều này sẽ chỉ sửa lỗi cho một câu lệnh thử khác để bắt hoặc phá vỡ tập lệnh tại đây. Điều này hữu ích khi bạn chỉ muốn theo dõi một loại lỗi cụ thể và các lỗi khác có thể xảy ra do sơ suất có thể làm hỏng mã.

Kết luận

Trong bài viết này, tôi đã cố gắng giải thích các khái niệm sau liên quan đến try / catch:

  • Câu lệnh try / catch là gì và khi nào chúng hoạt động
  • Cách loại bỏ lỗi tùy chỉnh
  • Câu lệnh cuối cùng là gì và nó hoạt động như thế nào
  • Cách hoạt động của các câu lệnh try / catch lồng nhau
  • Cách sửa lại lỗi

Cảm ơn bạn đã đọc. Theo dõi tôi trên twitter @fakoredeDami .


Xem thêm những thông tin liên quan đến chủ đề thử bắt hoạt động như thế nào trong javascript

ASYNC JavaScript trong 30 phút (CALLBACK, PROMISES, ASYNC AWAIT)

  • Tác giả: HoleTex
  • Ngày đăng: 2021-11-28
  • Đánh giá: 4 ⭐ ( 7196 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Học ASYNC JavaScript trong 30 phút (CALLBACK, PROMISES, ASYNC AWAIT)

    Xử lý bất đồng bộ trong JS là một công việc chúng ta sẽ phải đối mặt rất thường xuyên. Và hôm nay chúng ta sẽ cùng nhau tìm hiểu về các cách khác nhau để xử lý bất đồng bộ trong JS, cũng như là tìm hiểu về các vấn đề khi xử lý bất đồng bộ với Callback như là Callback Hell
    – Callback
    – Promises
    – Async/Await

    📢 Liên hệ với mình tại:
    Facebook: https://www.facebook.com/holetex/​
    Instagram: https://www.instagram.com/holetex/
    Github: https://github.com/holetexvn
    Facebook cá nhân: https://www.facebook.com/minhtung09/
    Email: holetex@outlook.com

    async js holetex callback asyncawait promises

Làm thế nào để thử bắt công việc JavaScript?

  • Tác giả: presbyteryofstockton.org
  • Đánh giá: 4 ⭐ ( 1717 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Câu lệnh try cho phép bạn xác định một khối mã để kiểm tra lỗi trong khi nó đang được thực thi. Câu lệnh catch cho phép bạn xác định một khối mã sẽ được thực thi, nếu có lỗi xảy ra trong khối try. Câu lệnh cuối cùng cho phép bạn thực thi mã, sau khi thử và bắt, bất kể kết quả như thế nào.

JavaScript là gì? JavaScript hoạt động như thế nào?

  • Tác giả: aptechbmt.edu.vn
  • Đánh giá: 3 ⭐ ( 1952 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: JavaScript trở thành một yếu tố chính trong phát triển web hiện đại. Ngôn ngữ mạnh mẽ này phát triển thành công bất kỳ nhà phát triển web nào hiểu được.

Ngôn ngữ lập trình web JavaScript hoạt động như thế nào?

  • Tác giả: stanford.com.vn
  • Đánh giá: 3 ⭐ ( 3470 lượt đánh giá )
  • Khớp với kết quả tìm kiếm:

Toán tử trong JavaScript

  • Tác giả: hanoiict.edu.vn
  • Đánh giá: 4 ⭐ ( 2840 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Trong bài hướng dẫn tự học về Javascript này, bạn sẽ tìm hiểu làm thế nào để điều khiển hoặc thực hiện các hoạt động trên biến và giá trị bằng cách sử dụng Toán tử.   Toán tử trong Javascript là gì?   Toán tử là các ký hiệu hoặc từ khóa báo cho JavaScript Engine thực hiện một số loại hành động cụ thể.   Ví dụ: Ký

Cách thức hoạt động của Javascript: Tổng quan về engine, runtime & call stack

  • Tác giả: topdev.vn
  • Đánh giá: 5 ⭐ ( 3727 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Các Tech teams hiện nay đang khai thác tối đa mọi sự hỗ trợ của Javascript ở nhiều cấp độ trong stack của team như Frontend, Backend, Hybrid apps, các

THỬ BẮT TRONG JAVASCRIPT LÀ GÌ? XỬ LÝ LỖI VÀ NGOẠI LỆ

  • Tác giả: vi.ichlese.at
  • Đánh giá: 5 ⭐ ( 1741 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: thử bắt trong các cấu trúc javascript cũng như toán tử ném để xử lý các ngoại lệ. Bạn có thể bắt các ngoại lệ do lập trình viên tạo và thời gian chạy.

Xem thêm các bài viết khác thuộc chuyên mục: Kiến thức lập trình

Xem Thêm  Lớp phủ hình ảnh có màu trong CSS - lớp phủ màu css trên hình nền

By ads_php