2011-05-11 64 views
5

MDN states:Lỗi cú pháp có thể bị bắt trong JavaScript?

Một Lỗi Cú pháp được ném khi động cơ Javascript gặp tokens hoặc lệnh token không phù hợp với các cú pháp của ngôn ngữ khi phân tích mã.

Nhưng nếu có lỗi cú pháp, làm cách nào chương trình có thể chạy ngay từ đầu?

Làm thế nào để các lỗi cú pháp JavaScript có thể bị bắt?

+0

liên quan: http://stackoverflow.com/questions/12219154/ignore-javascript-errors-in-a-page-and-continue-executing-the-script –

Trả lời

5

Đó là lỗi thời gian chạy có thể bị phát hiện bằng try-catch, không phải lỗi cú pháp (nếu bạn eval mã của bạn bạn có thể xử lý lỗi cú pháp trong mã được đánh giá nhưng điều đó thật lạ).

tôi muốn khuyên bạn nên đọc những:

+1

Liên kết của bạn trỏ đến trang "di chuyển nội dung". .. –

+0

+1 trên mã đánh giá vào excistance và bắt ngoại lệ trên các lỗi cú pháp là có thể, nhưng wonky. – Martijn

+0

Đây là liên kết bị hỏng – Pacerier

0

Nếu bạn chỉ cố gắng để đảm bảo rằng bạn đã viết cú pháp hợp lệ JavaScript, Tôi không thể đề xuất JSLint hoặc JSHint đủ mạnh.

  1. Learn it. Use it.
  2. Trở thành một lập trình viên JavaScript tốt hơn.
  3. ???
  4. Lợi nhuận!
+1

9gagger, đúng không? – Santosh

4

Bạn có thể bắt lập trình viên tạo ra và thời gian chạy ngoại lệ nhưng bạn không thể bắt lỗi cú pháp JavaScript, dù bạn có thể xử lý chúng trong một số trình duyệt sử dụng window.onerror.

Điều này được lấy từ cuốn sách JavaScript- The Complete Reference by Thomas-Powell mà tôi thích rất nhiều. Bạn có thể tham khảo các ví dụ mã trong cuốn sách đó.

+0

Bạn có ví dụ về mã không? Bạn có ý nghĩa với các trình duyệt nào? – Pacerier

4

Bạn không thể sử dụng try-catch khối để xử lý lỗi cú pháp khi chúng được ném trong khi mã đang được phân tích cú pháp và không chạy trong khi mã đang chạy.

Tuy nhiên, bạn có thể sử dụng window.onerror và tìm ra rằng có lỗi. Bạn phải đảm bảo rằng hàm onerror được xác định trong một thẻ tập lệnh riêng biệt và không có trong thẻ mà trong đó lỗi có thể xuất hiện!

Ví dụ:

này sẽ không làm việc, bởi vì kịch bản vẫn chưa bắt đầu chạy khi lỗi được ném:

<script> 
    window.onerror = function (e) { 
    console.log('Error: ', e); 
    }; 
    console.log('a''); 
</script> 

này sẽ làm việc:

<script> 
    window.onerror = function (e) { 
    console.log('Error: ', e); 
    }; 
</script> 
<script> 
    console.log('a''); 
</script> 

jsfiddle demo

0

Trong thế giới JS, SyntaxError CÓ THỂ là một ngoại lệ thời gian chạy. Ví dụ: điều này có thể xảy ra khi cố gắng phân tích cú pháp phản hồi JSON không phải là định dạng JSON. Máy chủ có thể gửi lại rất nhiều loại phản hồi, vì vậy nếu bạn gửi phản hồi nội dung HTML cho yêu cầu của bạn đang mong đợi JSON trong cơ thể, bạn sẽ nhận được một cú pháp SyntaxError được ném trong JS. Trong trường hợp này, bạn sẽ nhận được thông báo lỗi giống như sau: SyntaxError: JSON Parse error: Unrecognized token '<'.

Nhưng cũng có các cú pháp thời gian chạy khác mà bạn có thể nhận được. Mozilla có danh sách một số ở đây: SyntaxErrors for JSON parsing

Bạn có thể muốn nắm bắt các mã này trong mã của mình. Bạn có thể làm như vậy với một khối try/catch chung như thế này:

try { 
    JSON.parse('<html></html>'); 
} catch (e) { 
    console.log("I catch & handle all errors the same way."); 
} 

HOẶC bạn có thể tìm kiếm các Lỗi Cú pháp cụ thể là:

try { 
    JSON.parse('<html></html>'); 
} catch (e) { 
    if (e instanceof SyntaxError) { 
    console.log("I caught a pesky SyntaxError! I'll handle it specifically here."); 
    } else { 
    console.log("I caught an error, but it wasn't a SyntaxError. I handle all non-SyntaxErrors here."); 
    } 
} 

Mozilla có nhiều hơn info on JS errors and handling them.