Як перевірити значення 'undefined' у jQuery


172

Можливий дублікат:
Визначення невизначеного властивості об'єкта в JavaScript
javascript undefined порівняти

Як ми можемо додати чек для невизначеної змінної, наприклад:

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

Відповіді:


379

Бібліотека JQuery була розроблена спеціально для спрощення та уніфікації певної функціональності JavaScript.

Однак якщо вам потрібно перевірити змінну на undefinedзначення, немає необхідності вигадувати будь-який спеціальний метод, оскільки у JavaScript є typeofоператор, який простий, швидкий і крос-платформний:

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

Він повертає рядок із зазначенням типу змінної чи іншого неоціненого операнда. Основна перевага цього методу порівняно з тим if (value === undefined) { ... }, що typeofніколи не створюватиме виняток у випадку, якщо змінної valueне існує.


12
@nahum jQuery - це бібліотека JavaScript. Це не інша мова програмування.
VisioN

9
lol omg, ти справді коментуєш це ?? Я знаю, це той самий чоловік. Але я думаю, він хоче знати, чи існує такий метод у jQuery, як $ .isUndefined (Object); і повернути значення true або false. typeof - це просто javascript без будь-яких фреймів.
ncubica

Однією з моїх проблем була: якщо ви робите щось подібне ("#myId"), переконайтеся, що вам насправді потрібно: a. typeof ("#myId")=== "undefined" б. Або:typeof ("#myId").val() === "undefined"
Alberici

3
@Alberici ("#myId")- це не що інше, як константа струни . Він завжди буде визначений і матиме тип "string". Якщо ви маєте на увазі фактичний об’єкт jQuery, створений за допомогою $("#myId"), він завжди визначатиметься як "object"(якщо у вас jQuery правильно пов’язаний). Наявність елемента DOM з ідентифікатором myIdможна оцінити за допомогою if ($("#myId").length > 0) { ... }, а перевірити, чи не є його значення порожнім if ($("#myId").val()) { ... }. Жодна з цих статей насправді не стосується теми цього питання.
VisioN

1
@ user3284463 Як зазначено у відповіді, просто value === undefinedстворить виняток, якщо valueзмінної не існує. Тож саме від вас залежить, що використовувати в реальному житті.
VisioN

26

У цьому випадку ви можете використовувати === undefinedпорівняння:if(val === undefined)

Це працює, тому що valзавжди існує (це аргумент функції).

Якщо ви хочете перевірити довільну змінну, яка не є аргументом, тобто не може бути визначена зовсім, вам доведеться використовувати, if(typeof val === 'undefined')щоб уникнути винятку, якщо valїї не було.


16

Зауважте, що typeof завжди повертає рядок і не створює помилки, якщо змінна взагалі не існує.

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

1
Для порівняння рядків, я думаю, нам потрібно використовувати ===замість==
Sreeram

@Sreeram вони обидва порівнюють, просто по-різному ... це буде добре
RGB

10

Я знаю, що я спізнююсь відповісти на функцію, але у jquery є вбудована функція для цього

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

Зверніться до документа jquery API для jquery.type https://api.jquery.com/jQuery.type/ для того ж.


3

Ви можете скористатися технікою скорочення, щоб перевірити, чи не визначено це чи нуль

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

сподіваюся, що це вам допоможе



1

коли я тестую " typeof obj === undefined", alert(typeof obj)повернення object, навіть якщо obj не визначено. Оскільки obj - це тип Objectйого повернення Object, ні undefined.

Тож після години тестування я вибрав техніку нижче.

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

Я не впевнений, чому перша методика не спрацювала.


0

Якщо у вас є імена елемента, а не id, ми можемо досягти невизначеної перевірки всіх текстових елементів (наприклад), як показано нижче, і заповнити їх значенням за замовчуванням, скажімо, 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

Я не впевнений, що це найкраще рішення, але він працює чудово:

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);
    }
}

спробуйте це ~ всі перевірки типу


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.