2011-02-07 47 views
33

Tôi muốn biết nếu có thể tìm thấy thông qua javascript nếu một cuộc gọi đến eval() có lỗi cú pháp hoặc biến không xác định, v.v ... vì vậy hãy nói tôi sử dụng eval cho một số tùy ý javascript là có một cách để nắm bắt đầu ra lỗi của eval đó?eval javascript, kiểm tra lỗi cú pháp

Trả lời

49

Bạn có thể kiểm tra xem lỗi có thực sự là cú pháp SyntaxError hay không.

try { 
    eval(code); 
} catch (e) { 
    if (e instanceof SyntaxError) { 
     alert(e.message); 
    } 
} 
+0

Tôi tự hỏi tại sao tôi không tự mình thử. Cảm ơn rất nhiều! –

+3

@ Jesus - Thực tế là bạn đang tự hỏi là một điều tốt. Dù sao chúc may mắn. – ChaosPandion

0

Theo Mozilla documentation for eval:

eval trả về giá trị của biểu thức cuối cùng đánh giá.

Vì vậy, tôi nghĩ bạn có thể không may mắn. Cùng một tài liệu này cũng khuyên bạn không nên sử dụng eval:

eval() là một chức năng nguy hiểm, thực thi mã được truyền với đặc quyền của người gọi. Nếu bạn chạy eval() bằng một chuỗi có thể bị ảnh hưởng bởi một bên độc hại, bạn có thể sẽ chạy mã độc hại trên máy của người dùng với quyền của trang web/tiện ích của bạn. Quan trọng hơn, mã của bên thứ ba có thể thấy phạm vi trong đó eval() được gọi, điều này có thể dẫn đến các cuộc tấn công có thể xảy ra theo các cách mà Hàm tương tự không dễ bị tấn công.

Vì vậy, bất kể, hãy lưu ý những rủi ro trước khi sử dụng chức năng này.

+2

Giới thiệu về eval là điều ác, quy tắc vàng: Không đánh giá người dùng, chỉ eval chuỗi mà bạn tự xác định, ví dụ: từ máy chủ. Có, MiTM tấn công, nhưng nếu bạn không thể tin tưởng máy chủ của bạn, thì bạn có vấn đề lớn hơn. – CularBytes

1

Bạn có thể sử dụng http://www.jslint.com/ có chứa trình phân tích cú pháp javascript được viết ni javascript. Nó sẽ cung cấp cho bạn rất nhiều thông tin về mã của bạn, nó có thể được cấu hình để được thoải mái hơn hoặc không, vv ...

+0

+1 cho JSLint. :-) – Martijn

+0

http://www.jshint.com cũng tốt. – Andrew

11

Khi sử dụng thử bắt loại lỗi cụ thể, hãy đảm bảo rằng các loại ngoại lệ khác không bị áp đảo. Nếu không, nếu đánh giá mã sẽ ném một loại khác nhau của ngoại lệ nó có thể biến mất và gây ra hành vi bất ngờ của mã.

tôi sẽ đề nghị writting mã như thế này:

try { 
    eval(code); 
} catch (e) { 
    if (e instanceof SyntaxError) { 
     alert(e.message); 
    } else { 
     throw(e); 
    } 
} 

Xin lưu ý là "khác" phần.

+0

ném không phải là một chức năng – Dev

Các vấn đề liên quan