Я столкнулся с странной "ошибкой" сегодня, когда я запускал некоторые модульные тесты в разных браузерах. Я провел тесты в 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
.