2012-03-27 11 views
4

JavaScriptプロジェクトを読み始めました。で開始する.jsファイルの大半は、以下のようなオブジェクトを宣言している:JavaScriptオブジェクト宣言のためのシンボルまたは

window.Example || { 
bleh: "123"; 
blah: "ref" 
} 

||記号はここで何をしますか?

+3

これは有効なJavaScriptではありません。しかし、これは何千も前にSOに尋ねられています。 –

+0

あなたの 'window.Example'プロパティが0、空の文字列、偽などである可能性がある場合、この手法を使用するときは注意してください。 – jbabey

答えて

6

JavaScriptのオブジェクトは真実であるため、表現はwindow.Exampleまたはwindow.Exampleが偽(または未定義)の場合はデフォルトオブジェクトと評価されます。例:/ truthy falsyと短絡評価の良い説明のため

var x = window.Example || {foo: 'bar'}; 
// x = {foo: 'bar'}, since window.Example is undefined 

window.Example = {test: 1}; 

var y = window.Example || {foo: 'bar'}; 
// y = {test: 1}, since window.Example is truthy (all objects are truthy) 

読む​​。

+0

リンクが壊れていると思います。 – user1240679

+0

@ user1240679私に知らせてくれてありがとう!それは後続のスラッシュハハを必要とした。それを私が直した。 – Paulpro

2

そのコードから抜けている重要なビットあります - 変数宣言:

var something = window.Example || { 
    bleh: "123", 
    blah: "ref" 
} 

これは大体「が存在しない場合を除き、この新しいオブジェクトに設定し、window.Examplesomethingを設定する」に変換は。

3

||演算子は、のように、のように、他のC言語の「or」演算子ですが、それははっきりと異なります。それは実際には以下を意味します。

  1. 左のサブエクスプレッションを評価します。
  2. 、boolean型に強制変換、その値は、true、その部分式の値(ブールへ前に強制は)||表現エルス
  3. 右側の部分式を評価し、としての価値を生み出すの値がある場合||式の値。したがって、すでに初期化されるかもしれない何かを初期化するために慣用的に使われています

var something = window.something || defaultValue; 

はちょうど意味、何かが 『truthy値を持つwindowオブジェクトのプロパティである「かどうかを確認する』、およびそうでない場合は、defaultValueに設定してください。

+0

@MikeSamuel私の誤植を修正してくれてありがとう:-) – Pointy

関連する問題