Come controllare il valore "non definito" in jQuery


Risposte:


379

La libreria JQuery è stata sviluppata appositamente per semplificare e unificare determinate funzionalità JavaScript.

Tuttavia, se è necessario verificare una variabile rispetto al undefinedvalore, non è necessario inventare alcun metodo speciale, poiché JavaScript ha un typeofoperatore, che è semplice, veloce e multipiattaforma:

if (typeof value === "undefined") {
    // ...
}

Restituisce una stringa che indica il tipo di variabile o altro operando non valutato. Il vantaggio principale di questo metodo, rispetto a if (value === undefined) { ... }, è che typeofnon genererà mai un'eccezione nel caso in cui la variabile valuenon esista.


12
@nahum jQuery è una libreria JavaScript. Questo non è un linguaggio di programmazione diverso.
— VisioN,

10
lol omg stai davvero commentando questo ?? So che è lo stesso uomo. Ma immagino che voglia sapere se esiste un qualche tipo di metodo in jQuery come $ .isUndefined (Object); e restituisce il valore vero o falso. typeof è solo javascript senza alcun framework.
— ncubica,

Uno dei miei problemi era: se stai facendo qualcosa del genere ("#myId"), assicurati di cosa hai davvero bisogno: a. typeof ("#myId")=== "undefined" b. Oppure:typeof ("#myId").val() === "undefined"
— Alberici,

3
@Alberici ("#myId")non è altro che una costante di stringa . Sarà sempre definito e avrà un tipo di "string". Se intendi un vero oggetto jQuery creato con $("#myId"), verrà sempre definito come "object"(se hai jQuery collegato correttamente). L'esistenza di un elemento DOM con ID myIdpuò essere valutata con if ($("#myId").length > 0) { ... }, mentre è possibile verificare se il suo valore non è vuoto if ($("#myId").val()) { ... }. Nessuna di queste clausole in realtà riguarda l'argomento di questa domanda.
— VisioN,

1
@ user3284463 Come menzionato nella risposta, simple value === undefinedgenererà un'eccezione se la valuevariabile non esiste. Quindi dipende completamente da te cosa usare nella vita reale.
— VisioN,

26

In questo caso è possibile utilizzare un === undefinedconfronto:if(val === undefined)

Funziona perché esisteval sempre (è un argomento di funzione).

Se si desidera testare una variabile arbitraria che non è un argomento, ovvero potrebbe non essere definita affatto, è necessario utilizzare if(typeof val === 'undefined')per evitare un'eccezione nel caso in cuival non esistesse.


16

Si noti che typeof restituisce sempre una stringa e non genera un errore se la variabile non esiste affatto.

function A(val){
  if(typeof(val)  === "undefined") 
    //do this
  else
   //do this
}

1
Per il confronto delle stringhe, penso che dobbiamo usare ===invece di==
— Sreeram,

@Sreeram fanno entrambi un confronto, solo in modi diversi ... questo funzionerà benissimo
— RGB,

10

So che sono in ritardo per rispondere alla funzione ma jquery ha una funzione incorporata per farlo

if(jQuery.type(val) === "undefined"){
    //Some code goes here
}

Fare riferimento al documento API jquery di jquery.type https://api.jquery.com/jQuery.type/ per lo stesso.


3

È possibile utilizzare la tecnica abbreviata per verificare se è indefinito o nullo

 function A(val)
 {
   if(val || "") 
   //do this
 else
 //do this
 }

spero che questo ti possa aiutare



1

quando sto testando " typeof obj === undefined", il alert(typeof obj)ritorno object, anche se obj non è definito. Poiché obj è il tipo del Objectsuo ritorno Object, non undefined.

Quindi dopo ore di test ho optato per la tecnica di seguito.

if(document.getElementById(obj) !== null){
//do...
}else{
//do...
}

Non sono sicuro del motivo per cui la prima tecnica non ha funzionato, ma ho fatto il mio lavoro usando questo.


0

Se hai nomi dell'elemento e non id possiamo ottenere il controllo indefinito su tutti gli elementi di testo (ad esempio) come sotto e riempirli con un valore predefinito diciamo 0.0:

var aFieldsCannotBeNull=['ast_chkacc_bwr','ast_savacc_bwr'];
 jQuery.each(aFieldsCannotBeNull,function(nShowIndex,sShowKey) {
   var $_oField = jQuery("input[name='"+sShowKey+"']");
   if($_oField.val().trim().length === 0){
       $_oField.val('0.0')
    }
  })

0

Non sono sicuro che sia la soluzione migliore, ma funziona benissimo:

if($someObject['length']!=0){
    //do someting
}

0
function isValue(value, def, is_return) {
    if ( $.type(value) == 'null'
        || $.type(value) == 'undefined'
        || $.trim(value) == ''
        || ($.type(value) == 'number' && !$.isNumeric(value))
        || ($.type(value) == 'array' && value.length == 0)
        || ($.type(value) == 'object' && $.isEmptyObject(value)) ) {
        return ($.type(def) != 'undefined') ? def : false;
    } else {
        return ($.type(is_return) == 'boolean' && is_return === true ? value : true);
    }
}

prova questo ~ tutto il tipo di controllo


0

È possibile utilizzare in due modi 1) if ( val == null ) 2)if ( val === undefine )

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.