Не думаю, что кто-то будет считать их злыми как таковыми .Однако важная часть этой цитаты:
проще определить, как ведут себя виджеты
Очевидно, Math.random()
вводит индетерминизм, поэтому вы никогда не можете быть уверены, как будет вести себя кодпри каждом запуске.
Что не очевидно, так это то, что Date
приносит подобный индетерминизм.Если ваш код каким-то образом зависит от текущей даты, он (очевидно, снова) будет работать по-разному в некоторых условиях.
Полагаю, неудивительно, что эти два метода / объекта не работают, иными словами, каждый запуск может возвращатьсядругой результат независимо от аргументов.
В общем, есть несколько способов борьбы с этим индетерминизмом.Сохранение начального случайного начального числа для воспроизведения точно такой же серии случайных чисел (это невозможно в JavaScript) и предоставление клиентскому коду с абстракцией TimeProvider
вместо того, чтобы позволять ему создавать Date
s везде.