2013-01-14 40 views
0

任何人都可以解釋一下爲什麼執行JavaScript的Java代碼爲什麼會在這裏返回「Smith」?試圖瞭解JavaScript eval的輸出嗎?String解析

ScriptEngineManager manager = new ScriptEngineManager(); 
    ScriptEngine engine = manager.getEngineByName("js"); 
    String jsSnippet = "var fullName = 'Joe Smith'; fullName.substring(fullName.indexOf(' ') + 1);"; 
    System.out.println(engine.eval(jsSnippet)); 

可以得到相同的輸出上面的Java代碼類似的JavaScript代碼(jsFiddle)是

var jsSnippet = "var fullName = 'Joe Smith'; fullName.substring(fullName.indexOf(' ') + 1);"; 
document.write(eval(jsSnippet)); 

PS:我知道的eval是邪惡的,但這是我必須使用JavaScript情形之一EVAL。

+0

究竟是什麼問題? 「Smith」的返回值是我期望從JS獲得的。 – broofa

+0

這個問題還不清楚。你有2個相同的JS片段,你說他們都返回相同的值。有什麼問題? –

+0

@broofa&Alex - 在JS代碼中沒有問題,但我沒有在eval中添加任何return語句,那麼爲什麼eval會返回「Smith」。如果我在eval中添加return語句,爲什麼它不起作用? http://jsfiddle.net/hs2501/xaJg4/2/ – Hemant

回答

2

eval函數計算傳遞給它的最後一個表達式,並返回它的值。請參閱Mozilla開發者網絡上的the relevant section on eval

+0

我沒有在eval中添加任何return語句,那麼爲什麼eval會返回「Smith」。如果我在eval中添加return語句,爲什麼它不起作用? jsfiddle.net/hs2501/xaJg4/2 – Hemant

+0

哦,最後一個表達式被隱式返回。無法解決你所問的問題,但你的答案是。 –

+0

@Hemant,這裏是來自Mozilla開發者網絡的eval的相關解釋:https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/eval#Return_value –