Странная ошибка JavaScript (?) В Safari - PullRequest
1 голос
/ 03 января 2011

Я вижу ошибку с этим кодом:

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

(Live copy)

В Safari 5.0 (5533.16), этот очень специфический пример показывает плавающееномер точки.Любой другой браузер, который я тестировал, показывает ноль (0).

Мои два вопроса:

  1. Можете ли вы проверить это в любой версии сафари и сообщить мнеесли он показывает ноль или случайное число.
  2. Кто-нибудь знает, что может быть причиной этого?

Я думаю, что >> интерпретируется как (>)>0 вместо сдвига вправо.

1 Ответ

2 голосов
/ 03 января 2011

Я думаю, что >> как-то интерпретируется как (>)> 0 вместо сдвига вправо.

Нет, если бы он так размечал его, он увидел бы синтаксическую ошибку, и вы бы ничего не получили вообще. (И десятки других вещей сломаются; токенизатор имеет , чтобы быть жадным к операторам.)

Скорее всего, это ошибочная оптимизация (теперь, по-видимому, исправленная), рассматривающая >> 0 как неработающую. Мне пришлось дважды проверить спецификацию (Раздел 11.7.2 [" Оператор сдвига вправо со знаком (>>) "], стр. 76 5-го издания), чтобы напомнить себе, почему это выходило 0, в отличие от прямого результата Math.random(). Ключевой бит, разумеется,

Результатом является 32-разрядное целое число со знаком.

Поговорим о ваших крайних случаях ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...