ぷっぽプログラミング備忘録

linux, javascript, php, C#, そのうちScalaとかアプリ開発とかやってみたいです。

javascript の && と || は論理値を返却するとは限らない

概要

  • テストプログラム
const returnEtc =
  (key: string) :string => key && (key + ' foobar!');

let returnValue = returnEtc('testdayo');

console.log(returnValue);
  • 結果 testdayo foobar!

phpだと、&& 演算子の返却値はあくまでbooleanな気がするが、javascriptでは違う。

論理積 (&&) - JavaScript | MDN

これけっこう他の言語からしたら特殊なんじゃないか? 論理積とか論理和風だけど、厳密には違う。 今回の例でうと、key と (key + 'foobar!')はどちらもtrueになるが、booleanの論理積(true)ではなく、返却されるのは後勝ちの(key + 'foobar!')という話。

(たしかに、意識せずにlet arg1 = name || 'default';みたいなソースよく見かけたよなと改めて)

参考

JavaScriptの「&&」「||」について盛大に勘違いをしていた件 - Qiita