a = b || 'blah'
isまたは_ 'blah'
_ a
_ b
_ _ しかし、それを Firebug に入力したり、コードで使用したりすると、FF3/win のリストで定義されていないと文句を言います。ヒントはありますか?undefined
null
b
b
編集:まったく存在しない可能性があるケースを探しています。たとえば、 のない DOM ノードid
。
a = b || 'blah'
isまたは_ 'blah'
_ a
_ b
_ _ しかし、それを Firebug に入力したり、コードで使用したりすると、FF3/win のリストで定義されていないと文句を言います。ヒントはありますか?undefined
null
b
b
編集:まったく存在しない可能性があるケースを探しています。たとえば、 のない DOM ノードid
。
bが存在し、false、nullなどの場合、期待どおりに機能します。あなたがする必要があるのはその上の行にある、置くvar b = null
;
あなたがそれについて考えるならば、これは理にかなっています。それは基本的にこのようなことをします...
a = function(){ if(b){return b;} else{ return 'blah' } }();
bの値が真であるかどうかをチェックしていることに注意してください...bが存在しない場合は、例外が発生します。
javascriptの「未定義」は、「変数が存在しない」という意味ではありません。これは、「変数の値が「の特別な値」であることを意味しますundefined
。例:
alert(nosuchvariable);
=> throws exception
var somevariable; // note it's never assigned
alert(somevariable);
=> This alerts with 'undefined'
したがって、読み込もうb
としてbなどの変数がない場合は、例外が発生します。bが定義されているかどうかを調べようとしている場合、これは役に立ちません。
トップレベルのwindow
オブジェクトをチェックすることで、グローバル変数が存在するかどうかを確認できます。すべてのグローバル変数は、実際にはwindow
オブジェクト内の単なるフィールドです。例:
foo = 'Hello';
alert( window.foo );
=> alerts 'Hello'
ウィンドウオブジェクトがすでに存在していることがわかっているので、そのフィールドを確認できます。
javascriptに存在しないフィールドをチェックするundefined
と、クラッシュすることはないので、合体したりundefined
、変数などに入れたりすることができます。
ローカル変数(で宣言されたものvar
)の場合、それらの存在を確認することはできません。それらは、グローバル変数がウィンドウオブジェクト内で「ライブ」するようにどこにも「ライブ」しません。また、グローバル変数を参照しようとすると、例外が発生します。例:
alert(a);
=> exception because a is meaningless
alert(d45pwiu4309m9rv43);
=> exception because that is equally meaningless
ただし、1つの例外(コメントのJ cに感謝します)、typeof
演算子があります。存在しないタイプを取得しようとしても、クラッシュせず、文字列を返します "undefined"
。
これにより、存在しないローカル変数をチェックする方法が提供されます。例えば:
if( typeof(djfsd) === "undefined" )
alert('no such variable');
IDなどのないDOM要素について言及しているコメントがいくつかあります...
それがDOM要素であるという事実は、実際には関係ありません。DOMをデータベースまたはファイルと考え、要素をそのデータベースの行またはそのファイルの単語と考えてください。それを使って何かをするためには、データベースを検索し、正しい行を見つけて、そのデータを引き出す必要があります。データはjavascriptオブジェクトに入れられます。次に、そのオブジェクトを操作し、必要に応じてオブジェクトを変数に入れることでアクセスします。例:
document.getElementById('foo');
これはDOMに入り、IDが「foo」の要素を探します。見つかった場合は、その要素に関する情報をjavascriptオブジェクトに入れてから、そのオブジェクトを返します。要素が見つからない場合は返されますが、通常のルールはすべて適用されます(変数などにnull
貼り付けることができます)。null
合体にはまったく影響しません。
私はあなたがこれを探していると思います:
var a = typeof b == 'undefined' ? 'blah' : b;
||
は、C、C ++、Java、C#、Perl、PHPなどの場合と同様に、JavaScriptの短絡論理OR演算子です。
ウィキペディアによると、かっこをb
付ければ期待通りに動作します。
var a = (b) || 'blah';
しかし、それをFirebugに入力したり、コードで使用したりすると、FF3/winのリストでbが定義されていないと不平を言います
「定義されていない」とはどういう意味ですか? Javascript が変数を認識していないということですか? 次にwindow.b
、「ウィンドウ」が最上位オブジェクトであるため、使用するか、最初にvar b;
;で b を宣言します。ただし、変数の場合のみ。
それが DOM 要素である場合は、最初に次のようにして探し出さなければならない場合があります document.getElementById
。
a = document.getElementById('b') || 'blah'
私のために働きます。