Tại sao điều này không sản xuất được gì?Tại sao bạn không thể xâu chuỗi một biểu thức hàm?
console.log(JSON.stringify(function(){console.log('foobar');}));
Tại sao điều này không sản xuất được gì?Tại sao bạn không thể xâu chuỗi một biểu thức hàm?
console.log(JSON.stringify(function(){console.log('foobar');}));
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');})
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? –
@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
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? –
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).
Bạn không thể làm điều đó, nhưng có một số thư viện của bên thứ ba có thể giúp bạn làm điều đó, như: https://www.npmjs.com/package/json-fn
http://stackoverflow.com/questions/3685703/javascript-stringify-object-including- member-of-type-function – dmp