3

var foo;とをどのように区別できvar foo=undefined;ますか?

typeof foo両方の「未定義」foo in windowに対して返され、両方の真に対して返されます。

4

4 に答える 4

10

var foovar foo=undefinedもちろん、undefined以外に設定されていない限り、を意味しundefinedます。

これはブラウザコンソールで確認できます。変数を初期化するが値を指定しない場合、その変数には値undefined(およびタイプ"undefined")が含まれます。

于 2012-06-12T15:08:27.487 に答える
2

正しい例は不思議に働きます:

function winFoo() {
  console.log('foo' in window);
}

function startFoo() {
  window.foo = 'bar';
}

function ovrFoo() {
  window.foo = undefined;
}

function removeFoo() {
  delete window.foo;
}

//window.foo === undefined
//window.foo hasn't been defined yet
winFoo(); //false
//so it makes sense that 'foo' is not in window
startFoo(); //window.foo === 'bar'
//window.foo has now been set to 'bar'
winFoo(); //true
//so it makes sense that 'foo' is in window
ovrFoo(); //window.foo === undefined
//window.foo has been overridden with a value of undefined
winFoo(); //true
//but the key 'foo' still exists in window, it just has a value of undefined
removeFoo(); //window.foo === undefined
//the key 'foo' has been removed from window and its value is therefor forgotten
winFoo(); //false
//so it makes sense that 'foo' is not in window

これがフィドルです

var fooさらに、関数コンテキストの外部で宣言すると、 ifwindow.fooの値でインスタンス化されます(つまり、同じコードブロックで複数回呼び出すと、既存の値が存在する場合はそれが上書きされません)。さらに重要なことに、ステートメントは実際にはその範囲の一番上に引き上げられます。つまり、次のことを意味します。undefined!('foo' in window)var foovarfunction

console.log('foo' in window);
var foo;
console.log('foo' in window);

が続くtrue代わりに2回印刷されます。falsetrue

于 2012-06-12T15:19:06.857 に答える
2

var foo;とをどのように区別できvar foo=undefined;ますか?

この行がのすべての使用の前にある場合、それらの間に違いありません。(必ずしもそうする必要はありません。)JavaScriptエンジンは、次のような行を認識します。foovar foo=undefined;

// At top of scope
var foo; // `foo` will have the value `undefined`

// Where the var foo=undefined; line was
foo = undefined;

それらは、異なる時間に発生する完全に異なるものであることに注意してください。宣言と「初期化」(実際には割り当てです)は別々に行われます。宣言は、実行ユニットに入るときに行われます。初期化/割り当ては、段階的なコード実行の一部として、後で行われます。(詳細:誤解が少ないvar

これは、これがある場合、次のことを意味します。

foo = 5;
alert(typeof foo); // "number"
var foo = undefined;
alert(typeof foo); // "undefined"

...エンジンの処理方法は次のとおりであるため、エラーではありません。

var foo;
foo = 5;
alert(typeof foo); // "number"
foo = undefined;
alert(typeof foo); // "undefined"
于 2012-06-12T15:13:53.770 に答える
0

方法1:

if (null === var)


(古いブラウザへ):

if (void 0 != var)


もう1つ:

if(var) 


次のように使用します。

var un;
if (un==undefined)
{
alert('Yes');
} else {
alert('No');
}
于 2012-06-12T15:20:31.677 に答える