3

これは実際的な問題ではありません。説明が必要です。

次のコードがあります。

var src = container.find('img').attr('src');
if(src === 'undefined') {
    alert('No src');
}

コンソールを起動して src をログに記録すると、未定義であると表示されますが、アラートは発生しません。このコードをデバッグすると、以前の動作が正当化されます。if ステートメントの '' を削除し、型として未定義のままにすると、アラートがトリガーされます。

一方、コードのさらに下には、次の部分があります。

var pathname = (window.location.pathname).split('/');
if(pathname[5] === 'undefined') {
    alert('Something...');
}

そして、コンソールがパス名[5]が未定義であると言うたびに、アラートが適切にトリガーされます。

したがって、最初のケースでは未定義が型として返され、2番目のケースでは文字列として返されると考えました。これは正しいですか、なぜそのような動作をするのですか?

すべてのスマートな回答に感謝します!

4

3 に答える 3

1

演算子を知る必要が===あります。これは、値だけでなく、変数のデータ型もチェックします。

したがって、最初のケースでは、javascriptundefinedは文字列ではないため、true になりません。

だから試してください:

if(src === undefined) {
    alert('No src');
}

2 番目のケースでは、まだ false を返しています。JsFiddleデモはこちら

これを試して:

var loc="/~svemirko/dreamhouse/admin/homepage/";
var pathname = (loc).split('/');

if(pathname[7] === undefined) {
    alert('Something...');
}
于 2013-06-19T09:29:34.290 に答える
0

このようにしてみてください:

var src = container.find('img').attr('src');
if(typeof(src) === 'undefined') {
    alert('No src');
}
于 2013-06-19T09:30:24.923 に答える