2016-08-18 4 views
0

Я хочу спросить, что это правильный способ проверить, имеет ли объект ответа ajax свойство. Я googled, и я нашел, что есть разные способы приблизиться к этому.Каков наилучший способ проверить, имеет ли объект свойство

Например:

if(ajaxResponse.hasOwnProperty('someProperty')){ 
     //do blah blah 
    } 

но есть и другие способы убедиться, например:

if(typeof ajaxResponse.someProperty !== 'undefined')){ 
     //do blah blah 
    } 

Так я предполагаю, есть некоторые плюсы и минусы пожалуйста, вы можете поделиться этим со мной.

Благодаря

+0

hasOwnProperty более приемлемо Я думаю, что – chenop

+0

@chenop прав, но вы также можете сделать что-то вроде: 'var check = ajaxResponse.someProperty || false; ' – Derek

+0

@ chenop Да, я тоже так думал, но в настоящее время я работаю в существующем проекте, и они используют второй способ, но они умные люди (конечно), поэтому для этого должна быть причина, которую я не вижу в момент. –

ответ

-2

самый простой способ имо есть:

if (ajaxResponse.someProperty){ 
//do stuff 
} 

Кроме свойства является логическим. Тогда это не обязательно работать как хотелось :)

+1

Не работает, если свойство является числом, которое может быть '0'. Или строка, которая может быть пустой строкой. Или может быть null. Или может существовать со значением 'undefined'. – nnnnnn

0

Допустим, что ваш объект является чем-то вроде один показал ниже ...

var person = { 
    name: "Nicholas" 
}; 

Есть много способов с помощью которых вы можете проверить это .. ..

Метод 1

person.hasOwnProperty("name") 

Способ 2

if ("name" in person){ 
    //property exists 
} 

Метод 3 (НЕ РЕКОМЕНДУЕТСЯ)

//doesn't accurately test for existence 
if (person.name){ 
    //yay! property exists! 
} 

Если вы просто хотите, чтобы проверить наличие свойств, и не обязательно, что может быть их значение, то у вас есть два безопасных вариантов: hasOwnProperty() и оператором in. Метод свойства hasOwnProperty() следует использовать, если вы хотите только определить собственные свойства. Если вы хотите проверить существование свойства и не заботитесь о том, является ли это собственным свойством или свойством объекта, то оператор in используется.

Source

+0

Если 'person.name' является ложным, вы испытываете ошибку на' if (person.name) {...} '. –

+0

Умм ... @NinaScholz вы правы. Но в конце дня, его контракт, человек, который пишет и получает доступ к объекту, знает тип свойства, если его следует избегать «Метод 3». И я уже добавил аналогичную заметку для этого же. – Yasser

+0

Если вы специально тестируете * имя *, то метод 3, вероятно, хорошо, потому что даже если свойство существует как пустая строка, которая * может * быть логически эквивалентна отсутствию имени вообще. Но с более универсальным «someProperty» OP не подходит. – nnnnnn

0
$.ajax({ 
      type: "POST", 
      url: "frmSample.aspx/LoadSample", 
      data: '', 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function (data) {  
       var jsonData = $.parseJSON(data.d);  
      }, 
      error: function OnError(xhr) {   
      } 
     }); 

Предположим, что если какая-либо ошибка возникает в Ajax называют ответом идет непосредственно на ошибки, он не пойдет на успех. Если пустые данные передаются в качестве результата, то data.d будет «. Таким образом, необходимо проверить, является ли data.d пустым или нет до разбора. Если результирующий является JSON, разбор JSON следующим

var jsonData = $.parseJSON(data.d); 

Если jsonData.length == 0, ни одно из свойств не существует для результата. Существует много способов проверки свойства в json-ответе. Это один из способов сделать это простым. Непосредственно проверьте jsonData. PropertyName! = Null или нет.