Jak sprawdzić wartość „undefined” w jQuery

Odpowiedzi:

379

Biblioteka JQuery została opracowana specjalnie w celu uproszczenia i ujednolicenia niektórych funkcji JavaScript.

Jeśli jednak chcesz porównać zmienną z undefinedwartością, nie ma potrzeby wymyślania żadnej specjalnej metody, ponieważ JavaScript ma typeofoperator, który jest prosty, szybki i wieloplatformowy:

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

Zwraca ciąg znaków wskazujący typ zmiennej lub inny nieoceniony operand. Główną zaletą tej metody, w porównaniu do if (value === undefined) { ... }, jest to, że typeofnigdy nie zgłosi wyjątku w przypadku, gdy zmienna valuenie istnieje.

Wizja
źródło
12
@nahum jQuery to biblioteka JavaScript. To nie jest inny język programowania.
VisioN
9
lol omg naprawdę to komentujesz? Wiem, że to ten sam człowiek. Ale wydaje mi się, że chciałby wiedzieć, czy istnieje jakaś metoda w jQuery, taka jak $ .isUndefined (Object); i zwraca wartość true lub false. typeof to po prostu javascript bez żadnego frameworka.
ncubica
Jednym z moich problemów było: jeśli robisz coś takiego ("#myId"), upewnij się, czego naprawdę potrzebujesz: a. typeof ("#myId")=== "undefined" b. Lub:typeof ("#myId").val() === "undefined"
Alberici
3
@Alberici ("#myId")to nic innego jak stała łańcuchowa . Zawsze będzie zdefiniowany i będzie miał typ "string". Jeśli masz na myśli rzeczywisty obiekt jQuery utworzony za pomocą $("#myId"), będzie on zawsze zdefiniowany jako "object"(jeśli masz poprawnie połączony jQuery). Istnienie elementu DOM o identyfikatorze myIdmożna ocenić za pomocą if ($("#myId").length > 0) { ... }, natomiast sprawdzić, czy jego wartość nie jest pusta, można zrobić za pomocą if ($("#myId").val()) { ... }. Żadna z tych klauzul tak naprawdę nie odnosi się do tematu tego pytania.
VisioN
1
@ user3284463 Jak wspomniano w odpowiedzi, simple value === undefinedzgłosi wyjątek, jeśli valuezmienna nie istnieje. Więc to całkowicie zależy od Ciebie, czego użyjesz w prawdziwym życiu.
VisioN
26

W takim przypadku możesz użyć === undefinedporównania:if(val === undefined)

To działa, ponieważ valzawsze istnieje (jest to argument funkcji).

Jeśli chcesz przetestować dowolną zmienną, która nie jest argumentem, tj. Może nie być w ogóle zdefiniowana, musisz użyć, if(typeof val === 'undefined')aby uniknąć wyjątku w przypadku, gdy valnie istnieje.

ThiefMaster
źródło
16

Zwróć uwagę, że typeof zawsze zwraca ciąg i nie generuje błędu, jeśli zmienna w ogóle nie istnieje.

function A(val){
  if(typeof(val)  === "undefined") 
    //do this
  else
   //do this
}
Jignesh Rajput
źródło
1
Dla porównania strun, myślę, że powinniśmy użyć ===zamiast==
Sreeram
@Sreeram obaj porównują, tylko na różne sposoby ... to zadziała dobrze
RGB
10

Wiem, że jestem spóźniony, aby odpowiedzieć na tę funkcję, ale jquery ma wbudowaną funkcję do tego

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

Zobacz dokument jquery API jquery.type https://api.jquery.com/jQuery.type/ .

Arpita
źródło
3

Możesz użyć metody skróconej, aby sprawdzić, czy jest ona niezdefiniowana, czy zerowa

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

mam nadzieję, że to ci pomoże

Rohidas Kadam
źródło
2
if (value === undefined) {
    // ...
}
sandeep kumar
źródło
1

kiedy testuję „ typeof obj === undefined”, alert(typeof obj)zwracanie object, mimo że obj jest niezdefiniowane. Ponieważ obj jest typem Objectzwracania Object, nie undefined.

Więc po godzinach testów wybrałem poniższą technikę.

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

Nie jestem pewien, dlaczego pierwsza technika nie zadziałała, ale wykonałem swoją pracę, używając tej.

Sridhar K.
źródło
0

Jeśli masz nazwy elementu, a nie id, możemy uzyskać niezdefiniowane sprawdzenie wszystkich elementów tekstowych (na przykład) jak poniżej i wypełnić je wartością domyślną, powiedzmy 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')
    }
  })
Yoosaf Abdulla
źródło
0

Nie jestem pewien, czy to najlepsze rozwiązanie, ale działa dobrze:

if($someObject['length']!=0){
    //do someting
}
esdu
źródło
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);
    }
}

spróbuj tego ~ sprawdzania wszystkich typów

MGK
źródło
0

Możesz użyć dwóch sposobów 1) if ( val == null ) 2)if ( val === undefine )

Suhag Lapani88
źródło