javascript - Safari 中奇怪的 JavaScript 错误(?)

标签 javascript safari

我发现此代码有错误:

$('#foo').text(({rnd:((Math.random())>>0)}).rnd)

(Live copy)

Safari 5.0 (5533.16) 中,这个非常具体的示例显示了一个 float 。我测试过的所有其他浏览器都显示零 (0)。

我的两个问题是:

  1. 您能否在您拥有的任何版本的 safari 中测试它并告诉我它显示的是零还是随机数。
  2. 任何人都知道可能导致这种情况的原因是什么?

我的想法是 >>> 以某种方式被解释为 (>)>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/

相关文章:

javascript - Angular js - 使用正确的空格在模态中格式化字符串

javascript - jQuery.html() - JavaScript 代码被执行但消失

javascript - 从 jQuery for ASP.NET 设置禁用输入的值

html - 使用 CSS 变换(缩放)时 Webkit 文本闪烁

javascript - Highcharts 对象在循环中填充时将不起作用

javascript - 如何将 jQuery 事件处理程序应用于多个缓存选择器?

css - 为什么在 Safari 上转换翻译不能正常工作?

php - 除了发送参数之外,是否有传递给浏览器的信息可以告诉网站是什么应用程序访问了它?

javascript - 在 Safari Web Inspector 中调试 Web Worker

html - Safari - <a> 子元素的跨浏览器问题