1

a = b || 'blah'isまたは_ 'blah'_ a_ b_ _ しかし、それを Firebug に入力したり、コードで使用したりすると、FF3/win のリストで定義されていないと文句を言います。ヒントはありますか?undefinednullb

b編集:まったく存在しない可能性があるケースを探しています。たとえば、 のない DOM ノードid

4

4 に答える 4

8

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');

存在しないDOM要素について

IDなどのないDOM要素について言及しているコメントがいくつかあります...

それがDOM要素であるという事実は、実際には関係ありません。DOMをデータベースまたはファイルと考え、要素をそのデータベースの行またはそのファイルの単語と考えてください。それを使って何かをするためには、データベースを検索し、正しい行を見つけて、そのデータを引き出す必要があります。データはjavascriptオブジェクトに入れられます。次に、そのオブジェクトを操作し、必要に応じてオブジェクトを変数に入れることでアクセスします。例:

document.getElementById('foo');

これはDOMに入り、IDが「foo」の要素を探します。見つかった場合は、その要素に関する情報をjavascriptオブジェクトに入れてから、そのオブジェクトを返します。要素が見つからない場合は返されますが、通常のルールはすべて適用されます(変数などにnull貼り付けることができます)。null

合体にはまったく影響しません。

于 2008-11-19T19:13:28.353 に答える
3

私はあなたがこれを探していると思います:

var a = typeof b == 'undefined' ? 'blah' : b;
于 2008-11-19T22:01:45.003 に答える
0

||は、C、C ++、Java、C#、Perl、PHPなどの場合と同様に、JavaScriptの短絡論理OR演算子です。

ウィキペディアによると、かっこをb付ければ期待通りに動作します。

var a = (b) || 'blah';
于 2008-11-19T19:13:33.487 に答える
0

しかし、それをFirebugに入力したり、コードで使用したりすると、FF3/winのリストでbが定義されていないと不平を言います

「定義されていない」とはどういう意味ですか? Javascript が変数を認識していないということですか? 次にwindow.b、「ウィンドウ」が最上位オブジェクトであるため、使用するか、最初にvar b;;で b を宣言します。ただし、変数の場合のみ

それが DOM 要素である場合は、最初に次のようにして探し出さなければならない場合があります document.getElementById

a = document.getElementById('b') || 'blah'

私のために働きます。

于 2008-11-19T19:56:57.173 に答える