2011-09-13 16 views
26

मुझे एक स्ट्रिंग के रूप में सर्वर से पारित एक कस्टम फ़ंक्शन का मूल्यांकन करने की आवश्यकता है। यह एक जटिल json मैं का हिस्सा है, लेकिन वैसे भी, मैं पंक्तियों के साथ कुछ की आवश्यकता होगी, हो रहे हैं:मैं मूल्य वापस करने के लिए जेएस eval का उपयोग कैसे कर सकता हूं?

var customJSfromServer = "return 2+2+2;" 
var evalValue = eval(customJSfromServer); 
alert(evalValue) ;// should be "6"; 

जाहिर है इस काम नहीं कर रहा जैसा कि मैंने उम्मीद की थी। किसी भी तरह से मैं इसे प्राप्त कर सकते हैं?

उत्तर

55

पहली विधि है हटाएं कीवर्ड और अर्धविराम:

var expression = '2+2+2'; 
var result = eval('(' + expression + ')') 
alert(result); 

'(' और ') एक जरूरी है।

या आप इसे एक समारोह बना सकते हैं: प्राप्त करने के लिए "2 + 2 + 2" (हटाने "वापसी

var expression = 'return 2+2+2;'; 
var result = new Function(expression)(); 
alert(result); 
+0

इसके लिए धन्यवाद। आपके दूसरे उदाहरण में, 'eval (' (function() {'+ अभिव्यक्ति +'}()) ');' अभिव्यक्ति की अंतिम पंक्ति पर कोई टिप्पणी होने पर विफल रहता है, जैसे कि ** अप्रत्याशित त्रुटि इनपुट का अंत **। इसे ठीक करने के लिए, अंत में एक नई लाइन जोड़ें: '' \ n}()) ''। – gregn3

+0

समाधान के लिए धन्यवाद, मैंने अंत में एक नई पंक्ति '\ n}()) के साथ दूसरा उदाहरण इस्तेमाल किया और यह ठीक काम किया। –

2

वापसी विवरण नहीं होना चाहिए, क्योंकि eval इसे स्टेटमेंट के रूप में पढ़ेगा और मूल्य वापस नहीं करेगा।

var customJSfromServer = "2+2+2;" 
var evalValue = eval(customJSfromServer); 
alert(evalValue) ;// should be "6"; 

http://www.w3schools.com/jsref/jsref_eval.asp

+0

शायद यह भी काम करता है यदि आप स्ट्रिंग के बाहर' evalValue' घोषित करते हैं। – Thilo

3
var customJSfromServer = "2+2+2;" 
var evalValue = eval(customJSfromServer); 
alert(evalValue) ;// should be "6"; 
2

देखना यह काम करता है:

function answer() { 
    return 42; 
} 

var a = eval('answer()'); 
console.log(a); 

आप एक समारोह के अंदर वापसी रैप करने के लिए की जरूरत है और यह eval से पर मूल्य पास करना चाहिए।

6

आप return बयान गारंटी ले सकते हैं, तो हमेशा उपलब्ध नहीं होगा, आप देख सकते और अधिक उपयुक्त है:

var customJSfromServer = "return 2+2+2;" 
var asFunc = new Function(customJSfromServer); 
alert(asFunc()) ;// should be "6"; 
बेशक

, आप भी कर सकता है:

var customJSfromServer = "return 2+2+2;" 
var evalValue = (new Function(customJSfromServer)()); 
alert(evalValue) ;// should be "6"; 
1

संशोधित सर्वर जवाब:

var expression = 'return 2+2+2;' 
var result = eval('(function() {' + expression + '}())'); 
alert(result); 

भी सरल, eval का उपयोग नहीं करते ") और इसे आजमाएं:

var myvar = eval(response); 
alert(myvar); 
संबंधित मुद्दे

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