Để tắt phần nhận xét dài về "không sử dụng chức năng mới" và/hoặc "eval là điều xấu", câu hỏi này là về cách truy cập, nếu có thể, thông tin lỗi có liên quan đến một hàm tạo new Function()
không thành công. Đó chủ yếu là một câu hỏi để khám phá một giới hạn trong những gì trình duyệt sẽ cho phép tôi làm khi cố gắng khai thác JavaScript đến mức mà việc triển khai trình duyệt thông thường và đặc tả cho phép. Vì vậy, với tuyên bố miễn trừ đó tại chỗ:Tìm nơi xảy ra lỗi cú pháp khi hàm mới() không thành công
Khi đánh giá mã thông qua một cuộc gọi Function() mới, có cách nào để tìm ra lỗi hàm cú pháp trong nội dung của hàm không, nếu mã cú pháp bất hợp pháp đang được đánh giá? tức là:
try {
var generator = new Function(input);
try {
generator();
}
catch (runtimeError) {
console.error("legal code; unforeseen result: ", runtimeError);
}
}
catch (syntaxError) {
console.error("illegal code; syntax errors: ", syntaxError);
}
Khi xây dựng trình tạo không thành công, có cách nào để tìm ra (từ trình duyệt, không sử dụng jslint hoặc thư viện bên ngoài khác) lỗi đó xảy ra hay không?
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SyntaxError/prototype đề cập rằng một Lỗi Cú pháp có một tài sản filename
và linenumber
, nhưng đây là những không xác định cho mã động đánh giá thông qua một chức năng mới() constructor từ những gì tôi có thể nói, vì vậy dựa trên đối tượng lỗi chính nó có vẻ không phải là một lựa chọn . Có cách nào khác để giới thiệu mã cho trình duyệt để mã, khi chúng ta biết nó có lỗi cú pháp từ một cuộc gọi hàm mới không thành công, có thể được sử dụng để tìm ra vấn đề ở đâu theo công cụ JS được sử dụng?
(Tất nhiên, nếu mục tiêu chỉ đơn giản là tìm lỗi cú pháp, thì jslint làm bước tiền xử lý sẽ là giải pháp truy cập, nhưng tôi quan tâm hơn đến việc liệu trình duyệt có thể báo cáo theo cách nào đó hay không thông tin này, ngay cả khi ở dạng giới hạn như "có MỘT SỐ lỗi trên dòng/char ...")
Tôi đã tìm thấy giải pháp, nhưng không xem xét việc bắt lỗi khi chạy mã, đó là một bổ sung hữu ích. –
Ví dụ đó là một ngoại lệ thời gian chạy (cụ thể là một Tham chiếu), không phải là một Cú pháp Cú pháp! Btw, ví dụ của bạn thực sự ghi lại nơi xảy ra lỗi: 'Lỗi được ném ở dòng 1, cột 0 trong(): callundefinedFunction(); được gọi từ dòng 18, cột 4 trong () trong http://run.jsbin.com/runner: generator(); được gọi từ dòng 11, cột 7 trong http://run.jsbin.com/runner: (function() {' –
Bergi
nó đã làm gì? bạn đã sử dụng thuộc tính/phương pháp nào trên Lỗi? không thể tìm thấy thông tin nào trong docu hoặc trong ví dụ (chạy trong chrome) – floww