我发现此代码有错误:
$('#foo').text(({rnd:((Math.random())>>0)}).rnd)
在 Safari 5.0 (5533.16)
中,这个非常具体的示例显示了一个 float 。我测试过的所有其他浏览器都显示零 (0
)。
我的两个问题是:
- 您能否在您拥有的任何版本的 safari 中测试它并告诉我它显示的是零还是随机数。
- 任何人都知道可能导致这种情况的原因是什么?
我的想法是 >>>
以某种方式被解释为 (>)>0
而不是右移。
最佳答案
My thoughts are that the >> is being somehow interpreted as (>)>0 instead of a right-shift.
不,如果它像那样对其进行标记化,它会看到语法错误并且您根本不会得到任何东西。 (还有许多其他东西会崩溃;分词器必须对运算符贪婪。)
更有可能是错误的优化(显然现在已修复)将 >> 0
视为空操作。我不得不去仔细检查the spec (第 5 版第 76 页第 11.7.2 节 [“带符号的右移运算符 ( >> )”])提醒自己为什么它会出现 0
作为与 Math.random()
的直接结果相反。当然,关键是:
The result is a signed 32-bit integer.
谈谈你的边缘案例......
关于javascript - Safari 中奇怪的 JavaScript 错误(?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4583568/