ここから本文です

JavaScriptの論理和演算子の使い方 とある書籍を見てみると例えば X || Y || Z...

tra********さん

2017/9/2316:41:30

JavaScriptの論理和演算子の使い方

とある書籍を見てみると例えば X || Y || Zのように使用する場合、
XやYがnullまたはundefinedの場合、Zとするような使い方の記載がありました。

具体

的には
// max_widthはすべてundefined
var max = max_width || preferences.max_width || 500

の場合、ケースに分けて値を使用するような方法です。
書籍通りに行けば、max_widthはすべてundefined野場合には500を返してくるものかと
思っていました。
しかしながら実際には、最終的な評価結果としてundefinedが帰ってきます。


使用方法や解釈が誤っているのでしょうか?

閲覧数:
55
回答数:
2

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

glo********さん

2017/9/2317:34:15

予想通りちゃんと 500 が返りますよ。


↓HTML全文例↓


<html>
<head>
<title>Test</title>
<script type="text/javascript">
var max_width;
var preferences = {max_width:undefined};
var max = max_width || preferences.max_width || 500;
alert(max); //--> 500
</script>
</head>
<body>
</body>
</html>

  • 質問者

    tra********さん

    2017/9/2317:39:58

    コメントありがとうございます。
    確かに、実行することができました。
    ちなみにですが、
    var max_width;
    var preferences = {max_width:undefined};
    を定義しなかった場合、
    Uncaught ReferenceError: max_width is not defined
    at <anonymous>:1:11
    となり、エラーが出力されてしまうのですが、論理和演算子では
    undefinedはfalse値として、評価が右に移らずに、エラーにthrowされてしまうということなのでしょうか?

  • その他の返信(2件)を表示

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

この回答は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜1件/1件中

プロフィール画像

カテゴリマスター

nan********さん

2017/9/2316:49:58

考え方が間違っています。
最大値を計算するなら、Math.max です。
var max = Math.max(max_width, preferences.max_width, 500);

|| && 等の論理演算は、「数値」でなく、真偽を計算します。
ですから、
max_with == 500 || false
とかだったら、計算できます。
でも、数値を || 演算すると、?になるので、undefined になります。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる