Сегодня я столкнулся со странной "ошибкой", когда запускал модульные тесты в разных браузерах. До сегодняшнего дня я много раз запускал тесты в Firefox и даже в IE, но, видимо, еще не в Chrome (v19-dev). Когда я запускал их в Chrome, он постоянно терпел неудачу в одном тесте, потому что два значения, которые я вычислял, не совпадали.
Когда я действительно углубился в происходящее, я понял, что проблема заключалась в том, что я предполагал, что если бы я заполнил массив 100 000 Math.random()
значениями, все они были бы уникальными (не было бы не должно быть столкновений). Оказалось, что в Chrome это не так.
В Chrome я постоянно получал как минимум две пары значений, которые совпадали из 100 000. Firefox и IE9 никогда не сталкиваются. Вот jsfiddle, который я написал только для тестирования, который создает 1M Math.random()
записей в массиве: http://jsfiddle.net/pseudosavant/bcduj/
Кто-нибудь знает почему генератор псевдослучайных чисел Chrome, который используется для Math.random
, на самом деле не та случайный? Похоже, это может иметь последствия для любых процедур шифрования js на стороне клиента, которые когда-либо использовали Math.random
.