2012-05-14 27 views
5

私はajax呼び出しで完全な関数を処理しようとしています。値が未定義の場合は、varを空の文字列としてキャストします。さもなければ、私は文字列配列に値をキャプチャしたいと思います。未定義の問題があります!==未定義

問題は、問題の変数の値を記録しても定義されていない場合でも、if文を入力することです。私はここで何が欠けていますか?

completefunc: function (xData, Status) { 
     $(xData.responseXML).SPFilterNode("z:row").each(function() { 
     if(typeof $(this).attr("ows_Products") !== undefined) { 
      console.log($(this).attr("ows_Products")); 
      arr = $(this).attr("ows_Products").split(','); 
     } 
     else { 
      arr = ""; 
     } 
     }); 
    } 
+1

この前の質問を見ている:http://stackoverflow.com/questions/776950/javascriptを-undefined-undefined –

+0

@web_bodは、== to ===を比較する点でより多く見られました。null == undefined = true、null === undefined = false – Wesley

答えて

16

typeof文字列値を返しますので、あなたは、文字列として"undefined"と比較する必要があります。例えば、

if(typeof $(this).attr("ows_Products") !== "undefined") { ... } 

編集 - 詳細:

あなたがMDN page for typeofをチェックアウトする場合は、この表示されます:

をtypeof演算子はのタイプを示す文字列を返します。未評価のオペランド

は、これは(JavaScriptでおそらくStringArray、などのようなコンストラクタ関数を返すようなものになるだろう)Type自体を返すとは非常に異なっています。 typeofを使用した場合には、必ずなど、"object""string""undefined"のような文字列と比較されます

+0

Ahhはい。時には小さなものです。 – Wesley

+5

解決策の単純さは、一般的に、あなたが問題を見つめていた時間に反比例します。 – jmar777

+0

+1、ちょうどそのコメント!!! – gdoron

0
if($(this).attr("own_Products")){ 
     arr = $(this).attr("ows_Products").split(','); 
}else{ 
     arr="" 
}