• 作成:

JavaScript標準関数Math.maxで配列の最大値を取得する方法とその罠

JavaScript標準関数にはC++の max_element のような「配列の最大値を返す」関数は存在しません(しないよね?).

よってMath.max()を使います.

Math.maxは与えられた引数から最大の数を返すので, 配列を引数に分解してやれば良いわけです.

つまり

> Math.max(...[])
-Infinity
> Math.max(...[], -1)
-1
> Math.max(...[1, 2, 3])
3

みたいにやるわけですね.

空配列を適用したら-Infinityになるので最低値を次の引数に指定しましょう.

ただ, この方法には罠があって, 配列にスプレッド演算子を付けるのを忘れた時に値が0NaNになります.

> Math.max([])
0
> Math.max([], -1)
0
> Math.max([1, 2, 3])
NaN

これはMath.maxは引数を全て数値に変換してから比較を行い, Number([]) === 0であることに由来します.

これはエラーログなどを吐かないので数十分溶かしました.