2012-05-14 10 views
5

sto cercando di elaborare una funzione completa in una chiamata AJAX. Se il valore non è definito, voglio cast una var come stringa vuota. Altrimenti, vorrei catturare il valore in un array di stringhe.Hai problemi con indefinito! == undefined

Il problema è sto entrando l'istruzione if, anche quando si accede il valore della variabile in questione restituisce come indefinito. Cosa mi manca qui?

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

Date un'occhiata a questa domanda precedente: http://stackoverflow.com/questions/776950/javascript -undefined-undefined –

+0

@web_bod che sembrava di essere più in termini di confronto tra == === a, che significa nulla == undefined = true, mentre === undefined nulli = false – Wesley

risposta

16

typeof restituisce un valore di stringa, quindi avrai bisogno di confrontare con "undefined" come una stringa. Ad esempio,

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

Edit - maggiori informazioni:

Se si estrae la MDN page for typeof, vedrete questo:

L'operatore typeof restituisce una stringa che indica il tipo di l'operando non valutato.

questo è molto diverso dalla restituzione del Type stesso (che in JavaScript probabilmente sarebbe qualcosa come tornare una funzione di costruzione come String, Array, etc.). Pertanto, quando si utilizza typeof, sarai sempre il confronto di stringhe come "object", "string", "undefined", ecc

+0

Ahh sì. Sono le piccole cose, a volte. – Wesley

+5

La semplicità della soluzione è generalmente inversamente proporzionale a quanto tempo avete speso a guardare il problema :) – jmar777

+0

+1, solo perché quel commento !!! – gdoron

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