2011-09-27 2 views
1

저는 Rhino -> Java 상호 운용성을 실험 해본 결과 내가 설명 할 수없는 부분을 뛰어 넘었습니다.Rhino JS NativeArray 유형

Java에서 스크립트를 호출하여 결과를 Java 객체로 강제 변환 한 다음 결과를 검색합니다. 내 JS에서

:

this.objectmap.put("list", [1,1,2,3,5]); 

NativeArray 생성자에 중단 점을 설정, 나는 외모에 전달되는 객체 배열이 다음과 같이 볼 : 1.0 더블 타입 인

[1.0,1.0,2,3,5] 

및 2,3,5는 Integer 유형입니다.

왜 이런 일이 발생하는지 알고 싶습니다. 근본 원인을 추적 할 수없는 것 같습니다.

답변

1

JavaScript (또는 오히려 ECMA 스크립트)에는 정수 개념이 없습니다. 이것은 단지 "숫자"개념을 가지고 있으며, 이는 정수 값 또는 실수 값 (부동 소수점)을 포함 할 수 있습니다. 둘 다 변수에 실제 값으로 저장되므로 메모리에 저장됩니다.

그래서 Java 코드로 변환하기 위해 "double"유형을 사용하여 표현할 수있는 표현 중 가장 가까운 표현으로 표현합니다. 아마

http://www.ecma-international.org/publications/standards/Ecma-262.htm

http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf (사양 및 섹션 8.5 번호 유형, 9.3 toNumber)이 사양합니다 (ECMA 표준) 버전 5 관련

참고하지 무엇 코뿔소 구현, 당신 때문에 ECMA 구현 버전과 일치하는 사양을 웹 사이트에서보고 싶을 수도 있지만이 문제는 언어가 발명 된 이후로 동일합니다.

그래서 JavaScript/ECMA 엔진과 상호 운용 할 때 정수 값을 "double"유형으로 승격 할 수 있습니다.

+0

정보 주셔서 감사합니다. 당신은 절대적으로 옳습니다. * 자바에서 JS 값을 처리 할 때 JS 숫자 값의 대부분은 double 유형입니다. 혼합형 배열을 배열을 사용하여 시작하는 경우에만 해당합니다. – eff