2016-07-28 4 views
-2

私は変数を持っています。その変数がオブジェクトであれば、そのオブジェクトに対してメソッドを呼びたいと思います。Javascriptオブジェクトが存在する場合にメソッドを呼び出すためのショートカット

私はこのようにしてはならない理由があるのだろうかと思います。

var foo = null; 

    //////////////////////////////////////////////// 
    // some code that could change foo to a object 
    //////////////////////////////////////////////// 

foo && foo.bar(); 
+0

あなたがしていることを知っているなら、それをしてはいけない方法はありません... – Rayon

+0

そのように定義されますか? – epascarello

+0

Fooはnullを開始しますが、後でクリックイベントから変更される可能性があります。次に、他のクリックイベントで、それがまだnullかどうかを確認します。そうでない場合は何もしません。nullでない場合、オブジェクトが割り当てられ、そのオブジェクトのメソッドを呼び出します。 – cmac

答えて

1

迅速な答えはイエスである、foonullで、fooが非nullの場合、bar()が評価されるかどうfoo && foo.bar()は例外をスローしないであろう、そしてそれの値になります式の値。

長い答えは、すべての値が真偽または偽であるという意味でブール値として解釈でき、ブール演算子は短絡評価を行うことです。false &&またはtrue ||の場合、評価を続ける理由はありません。

ブール式の値は、短絡が発生した式の値です。

0
((typeof foo === 'object') && foo.bar()) 

又は

(!(typeof foo == 'object') || foo.bar()) 

fooが型オブジェクトである場合、実行します。

私の答えはこちらjavascript using or operator to iterate over list of stringsもご覧ください。いくつかは、このようなシーケンス内の割り当てを使用し、評価が最初の真後||順番に停止することを忘れ、または&&の最初の偽の後に停止した場合

これは、予期しない動作のための「共通」の問題です。

0

fooにオブジェクトを割り当て、機能を持つプレプロパティーを割り当てる必要があります。

var foo; 
 

 
foo = {}; 
 
foo.bar = function() { 
 
    console.log('inside bar'); 
 
}; 
 

 
foo && foo.bar && foo.bar();

関連する問題