2016-08-18 56 views
0

我想问问哪一个是检查ajax响应对象是否有属性的正确方法。 我GOOGLE了,我发现有不同的方法来解决这个问题。这是检查一个对象是否有属性的最佳方法

例如:

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

但也有其他方式可以肯定,例如:

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

所以我猜有一些优点和缺点你能请与我分享这些。

感谢

+0

hasOwnProperty更可接受我认为 – chenop

+0

@chenop是对的,但你也可以这样做:'var check = ajaxResponse.someProperty ||假;' – Derek

+0

@ chenop是的我也这么认为,但现在我在一个现有的项目中工作,他们使用第二种方式,但他们是聪明的人(当然),所以必须有一个原因,我不能看到此时此刻。 –

回答

-2

海事组织最简单的方法:

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

除属性是一个布尔值。然后,这不一定是想有大量的使用,你可以检查这个方法的工作:)

+1

如果属性是可能为'0'的数字,则不起作用。或者可能是空字符串的字符串。或者可能为空。或者可能存在“未定义”值。 – 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'为falsey,则测试在'if(person.name){...}'上失败。 –

+0

嗯... @NinaScholz你是对的。但是一天结束时,如果它的合同,写作和访问该对象的人知道该属性的类型,那么应该避免其布尔方法“方法3”。我已经为此添加了类似的注释。 – Yasser

+0

如果您正在为*名称*进行专门测试,则方法3可能是可以的,因为即使该属性存在为空字符串,它可能在逻辑上等同于根本没有名称。但是OP的更通用的'someProperty'不适合。 – 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) {   
      } 
     }); 

假设,它不会去成功。如果空数据作为结果传递,那么data.d将是''。因此,在解析之前检查data.d是否为空是必要的。 如果结果是JSON,解析JSON如下

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

如果jsonData.length == 0,没有属性是有结果。在json响应中检查属性的方法有很多。这是简单的一种方式。 直接检查jsonData。 PropertyName!= null或不是。

相关问题