It's complicated.
Because you are using a random number generator, it is possible that the first line will be the same, while the second or third line is different. This means that you are creating more unique strings than you could get with just one call to Math.random() . More unique strings mean fewer collisions, which you were aiming for.
To confirm this, just upload a lot of these lines to a file, and then sort them and see if the second and third values change with the first value or if they can change independently (you will need to add delimiters to the output to see this).
This is an artifact that hides the state of PRNG; and after a few additions it will stop working. It should (without guarantees!) Be after so many iterations that you cannot easily test it, so do not try to do it empirically.
If you had a really primitive generator algorithm, you might find that whenever random1 was equal to X, then random2 always be equal to Y, and random3 always be equal to Z; therefore, if you had a collision in X, then implicitly Y and Z would also collide, and therefore they would not help.
But most PRNGs (as well as the structure of your code when you take only 10,000 different values from each call) have a state much larger than what they show in one call. This means that even if random1 is X, random2 and random3 are still completely unpredictable, and collisions become less likely due to their presence.
However, by the time you get to random100 , you should start to understand that you can guess that it will be based on the values of all other randomX , and it will no longer create a unique string.
Then the whole problem runs down the rabbit hole of seed quality and staff size. Basically, it is believable so that the random number generator is so weak that it can produce only four billion unique lines and probably much less in realistic situations. The random() function was not intended to solve the GUID problem, so there is a risk that it will not succeed effectively.