2010-10-24 35 views
10

Tôi có một phần của khung gỡ lỗi cần để có thể chạy các đối tượng eval thời gian.javascript eval và đánh giá đối tượng

Cụ thể, nếu tôi có một chuỗi như thế này "{a: 1, b:2}", cần đánh giá nó thành đối tượng có các thành viên ab với các giá trị đó. Tuy nhiên, nếu tôi làm eval("{a: 1, b:2}"), có vẻ như đánh giá đó là một tuyên bố và nói điều gì đó về một nhãn bất hợp pháp.

tôi đã bị hack nó để nó đánh giá như thế này:

eval("var x=" + str + "; x;"); 

mà dường như để làm việc, nhưng có vẻ như một hack kinh khủng. Bất kỳ đề xuất về cách làm điều này tốt hơn?

(BTW, tôi nhận thức được sự nguy hiểm của eval, nhưng là một phần của một khung gỡ lỗi đó sẽ không được nhìn thấy bởi người dùng thực tế.)

+3

Xem: http://stackoverflow.com/questions/3360356/why-the-open-quote-and-bracket-for-eval-jsonstring-when-parsing-json – CMS

Trả lời

20

Bạn thể làm điều đó bằng () có nó phân tích nó như một đối tượng, chứ không phải là tuyên bố, như sau:

eval("(" + str + ")"); 

Trước tiên, bạn nên sử dụng JSON.parse() nếu trình duyệt hỗ trợ.

+1

JSON.parse() sẽ không hoạt động với các ví dụ được mô tả bởi vì chúng không phải là JSON hợp lệ. Ví dụ, JSON hợp lệ bao quanh tất cả các tên thuộc tính trong dấu ngoặc kép. – PleaseStand

+1

@idealmachine - vâng bạn đúng ... đồng thời, tôi sẽ tranh luận nếu bạn dự định sử dụng nó như vậy, tại sao * không * sử dụng JSON hợp lệ ngay từ đầu? Trong ví dụ này, có người dùng sẽ cần phải điều chỉnh đánh dấu đối tượng của họ. –

+0

Hoặc viết một hàm để chuyển đổi từ ký pháp đối tượng JavaScript sang JSON (ví dụ: thêm dấu ngoặc kép). Đó là dễ dàng engough để làm. – cdiggins

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