JavaScriptの掛け算は数値とnull,false,空文字を掛けると0になる

null,false,空文字を掛けると0になる

見出しの通りJavaScriptの掛け算は数値とnull,false,空文字を掛けると0になります。

実際に実行した結果は以下の通り。

function multiply(a, b) {
  return a * b
}

console.log(multiply(3, 4))         // 12
console.log(multiply(3))            // NaN
console.log(multiply(3, undefined)) // NaN
console.log(multiply(3, null))      // 0
console.log(multiply(3, false))     // 0
console.log(multiply(3, ''))        // 0
console.log(multiply(3, 0))         // 0

TypeScriptを使用していないと割とよくある間違いなので注意が必要です。

数値以外の引数なら0を返さない処理

null,false,空文字の場合は0ではなくNaNを返したい場合はtypeofでnumberの型かチェックしてnumberでなければNaNを返します。

function multiply(a, b) {
  const result = typeof b === 'number' ?
    b :
    NaN
  return a * result
}

console.log(multiply(3, 4))         // 12
console.log(multiply(3))            // NaN
console.log(multiply(3, undefined)) // NaN
console.log(multiply(3, null))      // NaN
console.log(multiply(3, false))     // NaN
console.log(multiply(3, ''))        // NaN
console.log(multiply(3, 0))         // 0

引数がなければ0を返す場合

逆に第2引数がない、あるいはundefined, null, falseなどは0を返したい場合はデフォルト引数で0を設定します。

function multiply(a, b = 0) {
  return a * b
}

console.log(multiply(3, 4))         // 12
console.log(multiply(3))            // 0
console.log(multiply(3, undefined)) // 0
console.log(multiply(3, null))      // 0
console.log(multiply(3, false))     // 0
console.log(multiply(3, ''))        // 0
console.log(multiply(3, 0))         // 0