2011-07-28 5 views

答えて

17

あなたは(少なくとも)4つのオプションている:多くの場合

  1. 、あなたがthe curiously-powerful || operator使用することができます。

    x = obj.key || "default"; 
    

    手段は:falsyあるobj.keyobj.keyない限りにxを設定し、その場合は代わりに"default"を使用してください。偽の値は、undefined,null,0,NaN,""、もちろんfalseです。したがって、obj.keyが有効に0またはそのいずれかの値である場合は、使用したくないでしょう。

    x = "key" in obj ? obj.key : "default"; 
    

    inは、オブジェクトが、指定されたキーを持つプロパティを持っているかどうかを教えてくれる:||が適用されていません状況で

  2. は、inオペレータがあります。キーが文字列であることに注意してください(プロパティ名は文字列またはシンボルです;シンボルを使用していれば知っているでしょう)。したがって、obj.keyが有効に0の場合は、上記の#1ではなく、これを使用したいと考えています。それは、オブジェクトにまたはオブジェクトのプロトタイプチェーンだ場合

  3. inがキーを見つけます(例えば、場所のすべては、あなたがそれはあなたがプロパティを取得する場合から取得したいです)。あなただけのオブジェクト自体ではなく、そのプロトタイプチェーンをチェックしたい場合は、hasOwnPropertyを使用することができます。

    x = obj.hasOwnProperty("key") ? obj.key : "default"; 
    
  4. 具体的にundefinedをチェック:

    objがない場合は、デフォルトを使用します
    x = typeof obj.key !== "undefined" ? obj.key : "default"; 
    

    プロパティがある場合はまたはですが、プロパティの値はundefinedです。

+0

うわーを、このことを知っていたことはありません。これは他の言語(特にPHP)でも動作しますか?それは本当に素晴らしいです。 – elslooo

+1

@ティム:私はそれに答えるのに十分なPHPを知らない。ほとんどの言語(C、C++、C#、Java)では、 '||'は単に 'true'または' false'を返します。 JavaScriptのバージョンは、プログラミングの "機能的な"スタイルでもっと面白くて、より多くです。 (BTW、 '&&'は似たようなことをします:左のものが真実ならば、それはあなたの右のものを与え、そうでなければ 'false'を返します) –

+0

@TJCrowder、私はそれをテストしました。 PHPで動作しません:(...ありがとうとにかく=)! – elslooo

0

何について:

var d = {'hello':'abc'}; 
var helloVar = d.hello ? d.hello : 'default_val'; 
+0

FWIWは、 'helloVar = d.hello ||とまったく同じように動作します。 'default_val'; ' –

+0

ねえ、' ... || ...ははるかに短くて読みやすい。それが他の言語ではうまくいかないことは間違いありません。それは間違いなく私の一日を作りました:p! – elslooo

関連する問題