JavaScriptのMath.abs()で絶対値を取得しないほうが良い理由

JavaScriptのMath.abs()で絶対値を取得しないほうが良い理由

Math.abs()はNaNを返すことがある

JavaScriptで絶対値を取得したいときにMath.abs()が使用されることがあるがMath.abs()は数値でない場合NaNなどを返すことがある。

以下は各値にMath.abs()を使用した際の結果を一覧にしたものだ。

value result
undefined NaN
false 0
true 1
null 0
{} NaN
[] 0
0 0
1 1
-1 1
empty 0
'foo' NaN
-Infinity Infinity
NaN NaN
/reg/ NaN

このように数値以外だとほとんどがNaNを返し、booleanは0や1を返しているため使い方によってはバグの原因になることがある。

絶対値を返す関数を作成

対策として絶対値を返す関数を作成して使用する方法がある。

この場合、数値の-2および文字列の'-2'などは2を返し、それ以外はNaNを返さなくなる。

文字列の'-2'を絶対値にしたくない場合はtypeof==='number'を追加しておく。

function abs(val) {
  return val < 0 ? -val : val;
};
console.log(abs(-2));
// 2
console.log(abs('-2'));
// 2
console.log(abs('foo'));
// 'foo'
value result
undefined undefined
false false
true true
null null
0 0
1 1
-1 1
'-2' 2
foo foo
-Infinity Infinity
NaN NaN
/reg/ /reg/