2013-01-14 4 views
0

JavaScript를 실행하는 다음 Java 코드가 "Smith"를 여기 왜 반환하는지 설명 할 수 있습니까? 내가 평가가 악을 알고 있지만, 내가 자바 스크립트를 사용해야 할 상황 중 하나입니다 자바 코드 위와 동일한 출력을 제공문자열 분석을 수행하는 JavaScript eval의 출력을 이해하려고 시도합니다

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)); 

유사 자바 스크립트 코드 (jsFiddle는)

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

PS입니다 평가.

+0

정확히 무엇이 문제입니까? 'Smith '의 반환 값은 여러분이 가진 JS에서 기대할 수있는 것입니다. – broofa

+0

질문이 명확하지 않습니다. 동일한 JS의 스 니펫을 2 개 가지고 있으며 둘 다 동일한 값을 반환한다고합니다. 뭐가 문제 야? –

+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 –