2012-09-29 14 views
10

यह कुछ भी क्यों उत्पन्न नहीं करता है?आप फ़ंक्शन अभिव्यक्ति को क्यों स्ट्रिंग नहीं कर सकते?

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

http://stackoverflow.com/questions/3685703/javascript-stringify-object-including- सदस्यों के प्रकार-फ़ंक्शन – dmp

उत्तर

21

JSON में सभी कार्यों stringify नहीं कर सकते हैं, यह उन्हें undefined या null जैसे मूल्यों को संभालती है। आप EcmaScript 5.1 §15.12.3 पर सटीक एल्गोरिदम देख सकते हैं, description at MDN भी देखें।

हालांकि आप बेशक उन्हें एक स्ट्रिंग के लिए कास्टिंग द्वारा समारोह अभिव्यक्ति stringify कर सकते हैं, कोशिश

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

हाय बर्गी, मैंने अपने वेब कार्यकर्ता को अपना जाया कार्य पारित किया, हालांकि मैं वापस जेएस में कैसे वापस आ सकता हूं? JSON.parse? –

+0

@TedFitzpatrick 'eval'। बेशक यह केवल मुफ्त चर के बिना कार्यों के लिए काम करता है। – Bergi

+0

धन्यवाद बर्गी। मैं एक कन्स्ट्रक्टर फ़ंक्शन एक्सप्रेशन पास कर रहा हूं जिसमें आंतरिक फ़ंक्शन स्टेटमेंट हैं। जब मैं eval() मुझे "अप्रत्याशित टोकन" मिल रहा है ("मैंने आसपास के" फ़ंक्शन() {} "ब्लॉक को हटाने की कोशिश की, हालांकि अभी भी त्रुटि हो रही है ... क्या तारों को eval'd कार्यों में कार्य हो सकता है? –

4

JSON एक समारोह का प्रतिनिधित्व करने के किसी भी तरह नहीं है। यह एक डेटा प्रारूप है जो भाषाओं में सादगी और संगतता के लिए डिज़ाइन किया गया है (और एक फ़ंक्शन आखिरी चीज है जो क्रॉस-भाषा संगत होगी)।

JSON.stringify के लिए

डॉक्स से:

अपरिभाषित हैं, तो कोई फ़ंक्शन, या एक एक्सएमएल मूल्य यह या तो छोड़ दिया जाता है रूपांतरण के दौरान सामना करना पड़ा है (जब यह एक वस्तु में पाया जाता है) या अशक्त करने के लिए सेंसर (जब यह एक सरणी में पाया जाता है)।

1

आप ऐसा नहीं कर सकते, लेकिन वहाँ किसी तीसरे पक्ष पुस्तकालयों मदद कर सकते हैं कर रहे हैं उस तरह,: https://www.npmjs.com/package/json-fn

संबंधित मुद्दे

 संबंधित मुद्दे