java与javascript的数据类型转换计算机等级考试
文章作者 100test 发表时间 2010:02:02 15:57:04
来源 100Test.Com百考试题网
无论何时,从一种语言中调用另一种语言的时候,都必须考虑的问题是一种语言的类型如何映射到另一种语言的类型。假设把一个java.lang.String和一个java.lang.Integer变量绑定到一个Bindings对象中,当JavaScript脚本使用这些变量的时候,它所见到的值是什么类型的呢?如果脚本的计算结果是JavaScript布尔类型的值,eval()方法所返回的对象是什么类型的呢?
当把一个Java对象存储到一个Bindings对象时,它会根据以下方式转换为JavaScript:
1、Boolean对象转换为JavaScript布尔值。
2、所有java.lang.Number包装对象转换为javaScript数字。包括java的Byte\Short\Integer \Long\Float\Double,还有java.math.BigInteger和java.math.BigDouble。
注意:javascript的数值类型是基于64位的浮点数,和Java的双精度类型类似。并不是所有的long值都可以在一个double中精确地表示。因此,如果把一个Java中long型数据传递给JavaScript,可能会丢失数据。当使用BigInteger和BigDecimal 的时候,同样要注意这个问题。即:如果Java值比JavaScript所能表示的值有更高的精度的话,后面的数字可能会丢失。或者,如果Java的值比 Double.MAX_VALUE大,它将会转换为一个JavaScript的Infinity值。
3、java的Character和String对象转换为JavaScript字符串。
4、java空值转换为JavaScript的空值。
5、任何其它的Java对象都只是被包装到一个JavaScript的JavaObject对象中。有关JavaObject的介绍在JavaScript如何脚本化java中介绍。
当JavaScript类型转换为java数据类型时,转换如下:
1、JavaScript布尔值转换为java的Boolean对象。
2、JavaScript字符串转换为java的String对象。
3、JavaScript数字转换为java的Double对象。Infinity和NaN值也会适当适当的转换为java中的Infinity和NaN
4、JavaScript空值和未定义的值转换为Java空值。
5、JavaScript对象和数组转换为类型不明确的Java对象。这些值可以传递回给JavaScript,但却有一个专门供Java程序使用的未发布的API。
注意:String、Boolean和Number的JavaScript外包对象被转换为不明确的Java对象,而不是它们所对应的Java类型。
想把js的array转成java类型,报了 java.lang.ClassCastException: sun.plugin.javascript.ocx.JSObject cannot be cast to [Ljava.lang.String. 是类的转换问题!
目前想到的解决方案是:
1。用JSON,采用JSON把JS对象转成JSON字符串,然后JAVA在把JSON字符串转成JAVA类型,不过这样太麻烦
2。直接采用传 “字符串”
编辑特别推荐:
Java线程的概念与原理
Java中的TCP/UDP网络通信编程