我在blackberry os7浏览器上尝试了以下代码:
<html>
<body>
test page
<script>
i = 0;
if(i < -2147483647) {
alert("very low")
}
if(i < -2147483648) {
alert("very very low")
}
if(i < -2147483649) {
alert("very very very low")
}
</script></body></html>
令人惊讶的是它出现的非常低!!
我认为javascript中的整数应该支持更多。当然,这段代码在其他浏览器上运行良好......
棘手的是,我发现尝试在黑莓上运行gwt应用程序。它在OS6上运行良好但在OS7上运行不正常。我调试了由GWT编译的代码,并且发生了Integer.parseInt的javascript实现使用int的极高和极低的测试。由于OS7浏览器似乎没有正确支持这些极端值(位溢出?),我得到一个异常,我的应用程序无法启动......
我正在努力寻找解决方案。我正在考虑为blackberry重写GWT integer.parseInt实现。你怎么看?还有其他想法吗?
答案 0 :(得分:1)
如果有人偶然发现这个旧线程寻找答案:
在我看来,这个错误存在于JS引擎的编译器部分。
摘录1:
var i = 0;
if (i < -2147483648) {
console.log("less");
} else {
console.log("greater");
}
摘录2:
var i = 0;
var j = i < -2147483648;
if (j) {
console.log("less");
} else {
console.log("greater");
}
虽然代码段1通过记录“less”来显示错误,但代码段2却没有。
因此,为了解决这个问题,我们检查了GWT源并编译了我们自己的SDK并应用了这个补丁。从那以后,我们没有遇到Integer.parseInt的问题。
diff --git a/gwt240/source/user/super/com/google/gwt/emul/java/lang/Number.java b/gwt240/source/user/super/com/google/gwt/emul/java/lang/Number.java
index 04a85e1..abb3e5c 100644
--- a/gwt240/source/user/super/com/google/gwt/emul/java/lang/Number.java
+++ b/gwt240/source/user/super/com/google/gwt/emul/java/lang/Number.java
@@ -221,9 +221,10 @@ public abstract class Number implements Serializable {
}
int toReturn = __parseInt(s, radix);
+ boolean isTooLow = toReturn < lowerBound;
if (__isNaN(toReturn)) {
throw NumberFormatException.forInputString(s);
- } else if (toReturn < lowerBound || toReturn > upperBound) {
+ } else if (isTooLow || toReturn > upperBound) {
throw NumberFormatException.forInputString(s);
}
链接到GWT错误报告:http://code.google.com/p/google-web-toolkit/issues/detail?id=7291