Tôi đã thử mã này JavaScript đơn giản:Eval() = thẻ bất ngờ: Lỗi
eval('{"Topics":["toto","tata","titi"]}')
Trong giao diện điều khiển Chrome, ví dụ, đây trả
SyntaxError: Unexpected token :
Tôi đã thử các JSON trên JSONLint và nó có hiệu lực.
Bạn có thấy lỗi không?
tôi có thể hỏi bạn tại sao eval ('function() {}') ném một ngoại lệ không? – BiAiB
@BiAiB Vì lý do tương tự như trên :) Nội dung của 'eval' chạy trong ngữ cảnh * statement * và do đó nó được xem như là một cấu trúc ngữ pháp FunctionDeclaration. Lỗi được tạo ra bởi đó là "Cú pháp cú pháp: câu lệnh hàm cần một tên". Hoặc đặt tên cho nó ('eval ('function f() {}'); f()') hoặc ép nó vào một cấu trúc FunctionExpression ('f = eval ('(function() {alert (" hi ")}) '); f() '). Xem http://es5.github.com/x13.html –
cảm ơn! phần khó khăn đối với tôi là vì các chuỗi như '3' được đánh giá đúng và không phải là 'hàm() {}'. Thứ hai không thể được đánh giá như là một ExpressionStatement: 'một ExpressionStatement không thể bắt đầu với từ khóa chức năng vì điều đó có thể làm cho nó mơ hồ với một FunctionDeclaration' (http://es5.github.com/x12.html#x12.4) – BiAiB