3

我在黑莓 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 浏览器似乎不能正确支持这些极端值(位溢出?)我得到一个异常并且我的应用程序没有启动......

我正在尝试为此找到解决方案。我正在考虑为黑莓重写 GWT integer.parseInt 实现。你怎么看?还有其他想法吗?

4

1 回答 1

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

于 2012-06-28T08:12:37.707 回答