• 締切済み

falsyな値そのものに意味がある場合とは?

>>> var msg = ''; msg = msg || 'こんにちは、世界!'; console.log(msg); // 結果:こんにちは、世界! falsyな値に意味がある場合に注意 ただし、空文字やゼロなど、falsyな値そのものに意味がある場合には、本文のようなイディオムは利用できません。 空文字やゼロなどの値がデフォルト値(ここでは「こんにちは、世界!」)によって上書きされてしまうからです。 そのような場合には、以下のように条件演算子を利用してください。 msg = (msg === undefined ? 'こんにちは、世界!' : msg); これによって、変数msgがundefined(未定義)の場合にだけ、デフォルト値が適用されます。 0に意味があるというのは、0が計算式の一部だった場合などのことですか? 0に意味がないときはただの文字列などですか? なぜ0がこんにちは、世界!に上書きされるのでしょうか? 補足>>> ただし、空文字やゼロなど、falsyな値そのものに意味がある場合には、本文のようなイディオムは利用できません。 とは var msg = '';のから文字に特別な意味がある場合は下記の式は成立しないということでしょうか? msg = msg || 'こんにちは、世界!'; console.log(msg); // 結果:こんにちは、世界! また、下記はからもしくはこんにちは世界だったらという意味ですが、なんか意味がよく分かりません。 msg = msg || 'こんにちは、世界!'; JS本格入門より 返り値が0でエラーだった場合に0が帰ってくる場合は0にエラーという意味があるということでしょうか?

みんなの回答

  • b0a0a
  • ベストアンサー率49% (156/313)
回答No.1

a = a || b というイディオムは、 aが真に評価されるならaにaを代入、つまりaをそのままにし、一方aが偽に評価されるならbを代入するというもので、 つまりは、aに真と評価されるような『有効な』値が設定されていなければ、bに初期化することを狙ったものです 特に引数において使われます。 a引数が与えられなかった場合、undefinedが与えられますから、 aの真偽値評価は偽となり、bで初期化することができ、一方もし与えられていればそのままとできるのです。 しかしこれは、偽評価の値は『有効な』値ではないという仮定に基づくものですから、そうでない場合、 例えば偽評価とされる0や空文字やfalseやnullなどに、意味があるような場合には使えません。 ただし、bにあたる初期化値をこれら自身にする場合であれば、その一つだけこの制限を緩和できます。 まあ引数であればES2015からデフォルト引数構文がありますから、このイディオムを使うような機会はかなり減りました。 古いソースを読むため以外では、もう覚えなくて良いようなことでもあります。

noname#226032
質問者

お礼

難しいですが、この質問のないようなES6があれば不要なのですね。 下記のことですか? デフォルト引数 function multiply(a, b = 1) { return a*b; } multiply(5); // 5 のように引数の()括弧内で代入を行うことで、デフォルト値を設定できる これは変数?bに1を代入することをはじめに行わなくてもいきなり引数の中で行えるようになったという事でしょうか? ただなんでaがいくつか記載していないのに5なのかは謎ですが

関連するQ&A