Я случайно столкнулся с тем, что кажется очень странной ошибкой в JavaScript-движке Safari на iPad.
Беззнаковый оператор сдвига → > предполагается побитовым сдвигом справа. Я испытал некоторые ошибки в script, которые отлично работали на других платформах, разделили его и закончили с этим:
<html><head><script type='text/javascript'>
var one = 1;
function Zero()
{
return one*0;
}
function Strange()
{
return one = (Zero()+1) >>> 0;
}
var s = 'A bunch of ones: '; // except on iPad :(
for (var i=0; i<200; i++)
{
s += Strange()+' ';
}
document.write(s);
</script></head><body></body></html>
Как ни странно, он правильно генерирует группу из них, но в какой-то момент что-то ломается, и оно только выводит нули с этого момента.
Очевидно, что → > 0 здесь бессмысленно (сдвиг по нулевым местам обычно ничего не делает, хотя он мог бы заставить целое число стать без знака, если javascript сделал это различие). Это просто для демонстрации проблемы, если вы опустите → > 0, она не появляется. В моей реальной ситуации были разные числа и более сложные выражения, но одно и то же: все работает до нескольких итераций, затем что-то "ломается", а переменные внезапно становятся и остаются нулевыми даже после последующих вычислений, которые действительно должны сделать они отличны от нуля.
Прекрасно работает в браузерах для Android и ПК. Странный ха?