2012-09-29 15 views

Trả lời

21

JSON không thể stringify chức năng ở tất cả, nó xử lý chúng giống như undefined hoặc null giá trị. Bạn có thể kiểm tra thuật toán chính xác tại EcmaScript 5.1 §15.12.3, xem thêm description at MDN.

Tuy nhiên bạn tất nhiên có thể stringify biểu hiện chức năng bằng cách đúc chúng thành một chuỗi, hãy thử

console.log("" + function(){console.log('foobar');}) 
+0

Xin chào Bergi, tôi đã chuyển chức năng được truyền cho nhân viên web của mình, tuy nhiên làm cách nào để tôi chuyển ngược lại thành js? JSON.parse? –

+0

@TedFitzpatrick 'eval'. Tất nhiên nó chỉ hoạt động cho các chức năng không có biến miễn phí. – Bergi

+0

Cảm ơn Bergi. Tôi đang đi qua một biểu thức hàm hàm xây dựng mà chính nó có các câu lệnh hàm nội bộ. Khi tôi eval() tôi đang nhận được "token bất ngờ (" .Tôi đã cố gắng loại bỏ xung quanh "chức năng() {}" khối tuy nhiên vẫn nhận được lỗi ... có thể eval'd chuỗi có chức năng? –

4

JSON không có phương tiện để đại diện cho một hàm. Nó là một định dạng dữ liệu được thiết kế để đơn giản và tương thích giữa các ngôn ngữ (và một chức năng là điều cuối cùng sẽ tương thích với ngôn ngữ chéo).

Từ các tài liệu cho JSON.stringify:

Nếu không xác định, một chức năng, hoặc một giá trị XML là gặp phải trong chuyển đổi nó hoặc là bỏ qua (khi nó được tìm thấy trong một đối tượng) hoặc bị kiểm duyệt để null (khi nó được tìm thấy trong một mảng).

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