# JavaScript code for this example?

**Hello to all! **I completed several short courses on JavaScript and now I moved on to Heads Up: JavaScript which was very fun and helps to solidify my learning, However, I ran into something that I didn't understand. In the following code snippet, I understand what the program usually executes when it is executed, but trying to trace each step of execution, I realized that I was confused about "What / Why / How" for a particular segment. Here's the code for a sample program I'm looking at:

```
function makePhrases() {
var words1 = ["24/7", "multi-tier", "30,000 foot", "B-to-B", "win-win"];
var words2 = ["empowered", "value-added", "oriented", "focused", "aligned"];
var words3 = ["process", "solution", "tipping-point", "strategy", "vision"];
var rand1 = Math.floor(Math.random() * words1.length);
var rand2 = Math.floor(Math.random() * words2.length);
var rand3 = Math.floor(Math.random() * words3.length);
var phrase = words1[rand1] + " " + words2[rand2] + " " + words3[rand3];
alert(phrase);
}
makePhrases();
```

This is the segment that is confusing me:

```
var rand1 = Math.floor(Math.random() * words1.length);
var rand2 = Math.floor(Math.random() * words2.length);
var rand3 = Math.floor(Math.random() * words3.length);
```

I get that this is a piece of code that randomizes which element from each array is fetched to form a new "random phrase", but I don't understand how this is done. I also didn't know before that Math.random or Math.floor can be applied to strings (must it be because they are in an array that is essentially a number?), Or how / why to use Math.random or Math.floor with strings.

Also, why do we need to use .length with this incarnation? What does it do? I appreciate your wisdom here and take the time to help someone new to coding and still have so much to learn!

source to share

Look at the code:

```
var rand1 = Math.floor(Math.random() * words1.length);
```

`Math.random()`

returns a number between `0`

and `0.999999..`

.

`words1`

- a list of words to choose from.

`words1.length`

is the size of the list, the number of elements, `5`

in this case.

`Math.random() * words1.length`

returns a number between `0`

and `4.99999..`

.

Finally, use `Math.floor()`

to get an integer between `0`

and `4`

.

This number is then used as an index in `words1`

, therefore `words1[rand1]`

.

So, operations are `Math`

never used in a row, fetching a row only in the last step.

source to share

You want to select a random item from an array. So you need an index, in other words, a random number from `0`

to `4`

(because your length is `5`

). `Math.random`

will give you a random number between `0`

and `1`

(excluding 1). Therefore, in order to turn this into a random number between 0 and 4, you need several in length `5`

.

Then, since we want an integer, not a floating point number, we use it `Math.floor`

to truncate it to an integer.

source to share

```
Math.random() //Return a random number between 0-1
words1.length() //Return the length of the array
Math.floor() //Return the closest integer less than or equal to a given number.
```

** Now the expressions:**

```
(Math.random() * words1.length)
```

Returns a random number between 0 and the length of the array. There could be a float like 3,4:

```
Math.floor(Math.random() * words1.length)
```

Will return a number **an integer** between 0 and the length of the string, so you can use it as an indexer (behaving like an array).

**Note:** Note that the random number is between 0 (inclusive) and 1 (exclusive), so it is safe to use `Math.floor()`

to avoid an exception and why it is not used `Math.ceiling`

.

source to share