重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【解消】通知が届かない不具合について

下記コードはどういう意味でしょうか?
・piyo[b] と piyo[b][a] または 0を返す?
・条件分岐もないのに?
・もしかして条件式を返す?
・あるいは、piyo[b] と piyo[b][a] を返す。または 0?
・ビット演算子?

hoge = function(a, b) {
 return (piyo[b] && piyo[b][a]) || 0;
};

A 回答 (6件)

意味は「piyo[b][a]に入っている数値を安全に返したい」です



もしpiyo[b]が未定義ならpiyo[b][a]にアクセスしようとするとエラーになってしまいます
そのためまず、piyo[b] && piyo[b][a]で、piyo[b]が真、つまりオブジェクトならば、piyo[b][a]を評価します。
つまりpiyo[b] && piyo[b][a]はundefinedか、piyo[b][a]になることが期待できます

次に||0で、偽ならば0を返します
つまり、piyo[b]が未定義のときのundefinedや、piyo[b][a]が未定義のときのundefined、また、piyo[b][a]が0のときは偽と評価されるので0になります。

以上より、piyo[b] && piyo[b][a] || 0はpiyoの構造がある程度しっかりしてなくとも、安全に数値(初期値0)を返すことができます。
ただし、完璧に保証できるわけではありません。
例えば、piyo自体がnullやundefinedになる危険性がある場合はさらなるチェックが必要です。

よってこのコードからは、piyoは二次元数値配列であってほしいのだけど、添字が事前にわからないため、最初は一次元配列としてしか初期化していなくて、あとから追加していく形、でも取得するときは、まだ追加されていないときでも、安全に0を返したいのだと分かります。
    • good
    • 0
この回答へのお礼

詳細な解説ありがとうございました。
説明とても分かりやすかったです。
大変勉強になりましたー

お礼日時:2014/07/09 10:21

もう既に答えが出ているので、私はそもそも論を展開します。


なぜ、こういう質問が出るのかといえば、re97さんがデバッグ(確認)の方法を知らないからです。

hoge = function(a, b) {
 return (piyo[b] && piyo[b][a]) || 0;
};

ならば、

console.log(hoge(1,2));

たったこれだけの記述で、何が返されるか確認できるため、箇条書きにされた疑問はほぼ解決します。
参考までに。
    • good
    • 0
この回答へのお礼

参考情報ありがとうございましたー

お礼日時:2014/07/09 10:26

A && B


は、Aが真の時に B と、そうでないときには A と評価される式です。
例えば、Aが真なら return A && B; はBを返します。

A || B
は、Aが真の時に A と、そうでないときには B と評価される式です。
例えば、Aが真なら return A || B; はAを返します。

その式がやりたいことは、ANo.3の説明の通りでしょう。

> ANo.4
> それならば、個人的には以下をオススメします。
> !!(piyo[b] && piyo[b][a])
それだと piyo[b][a] に 1 とか 10 とかが入っていても
全部trueが返ってきてしまいます・・・。

return (piyo[b] && piyo[b][a]) || 0;
なら piyo[b][a] に 1 とか 10 が入っていれば
ちゃんと 1 とか 10 を返してくれます。
    • good
    • 0
この回答へのお礼

回答&補足ありがとうございました

>A && B
>A || B
・この部分をよく理解できていなかったことに気がつきました
・説明分かりやすかったです
・参考になりましたー

お礼日時:2014/07/09 10:26

簡単に言えば



piyo[b] が「存在」し true と評価できる値
piyo[b][a] が「存在」し true と評価できる値
ならば
→ piyo[b][a] の値 (true と評価できる)

でなければ
→ 0 (false と評価できる)

を「安全に」返す関数 hoge です


論理和 || を併用する意味ですが、
false と評価できる値を、
副作用なく簡単に作り出すためかと思いますが...

それならば、個人的には以下をオススメします。
!!(piyo[b] && piyo[b][a])
    • good
    • 0
この回答へのお礼

回答ありがとうございましたー

お礼日時:2014/07/09 10:22

う~~んと



 false || 0 は0を返すかと…
    • good
    • 0
この回答へのお礼

回答ありがとうございましたー

お礼日時:2014/07/09 10:16

(A):piyo[b] && piyo[b][a]の論理積の結果


(B):(A)と0の論理和

(B)の結果をreturnします。trueかfalseしかreturnしません。
    • good
    • 0
この回答へのお礼

回答ありがとうございました

>(B)の結果をreturnします。trueかfalseしかreturnしません
・参考になりましたー

お礼日時:2014/07/09 10:15

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!