I am trying to get the highest number from a simple array:

```
data = [4, 2, 6, 1, 3, 7, 5, 3];
alert(Math.max(data));
```

I have read that if even one of the values in the array can't be converted to number, it will return `NaN`

, but in my case, I have double-checked with `typeof`

to make sure they are all numbers, so what can be my problem?

The reason why your code doesn't work is because `Math.max`

is expecting each parameter to be a valid number. This is indicated in the documentation as follows:

If at least one of arguments cannot be converted to a number, the result is NaN.

In your instance you are only providing 1 argument, and that 1 value is an array not a number (it doesn't go as far as checking what is in an array, it just stops at knowing it isn't a valid number).

One possible solution is to explicitly call the function by passing an array of arguments. Like so:

```
Math.max.apply(Math, data);
```

What this effectively does is the same as if you manually specified each argument without an array:

```
Math.max(4, 2, 6, 1, 3, 7, 5, 3);
```

And as you can see, each argument is now a valid number, so it will work as expected.

if you see doc for Math.max you can see next description

Because max() is a static method of Math, you always use it as Math.max(), rather than as a method of a Math object you created (Math is not a constructor).

If no arguments are given, the result is -Infinity.

If at least one of arguments cannot be converted to a number, the result is NaN.

When you call `Math.max`

with array parameter like

```
Math.max([1,2,3])
```

you call this function with **one** parameter - `[1,2,3]`

and javascript try convert it to number and get ("1,2,3" -> *NaN*) fail.

So result as expected - *NaN*

**NOTE:** if array with just *one* number - all work correctly

```
Math.max([23]) // return 23
```

because `[23] -> "23" -> 23`

and covert to Number is done.

If you want get max element from array you should use *apply* function, like

```
Math.max.apply(Math,[1,2,3])
```

or you can use the new spread operator

```
Math.max(...[1,2,3])
```

It's not working because you are passing an array as the parameter instead of comma separated numbers. Try spreading the array like this:

```
data = [4, 2, 6, 1, 3, 7, 5, 3];
alert(Math.max(...data));
```

If you have to use the Math.max function and one number of the array might be undefined, you could use:

```
x = Math.max(undefined || 0, 5)
console.log(x) // prints 5
```

©2020 All rights reserved.