Javascript 检查对象是否具有属性的最佳方法是什么
我想问一下,检查ajax响应对象是否具有属性的正确方法是什么。 我在谷歌上搜索了一下,我发现有不同的方法来解决这个问题 例如:Javascript 检查对象是否具有属性的最佳方法是什么,javascript,ajax,hasownproperty,Javascript,Ajax,Hasownproperty,我想问一下,检查ajax响应对象是否具有属性的正确方法是什么。 我在谷歌上搜索了一下,我发现有不同的方法来解决这个问题 例如: if(ajaxResponse.hasOwnProperty('someProperty')){ //do blah blah } 但肯定还有其他方法,例如: if(typeof ajaxResponse.someProperty !== 'undefined')){ //do blah blah } 所以
if(ajaxResponse.hasOwnProperty('someProperty')){
//do blah blah
}
但肯定还有其他方法,例如:
if(typeof ajaxResponse.someProperty !== 'undefined')){
//do blah blah
}
所以我猜有一些优点和缺点,你能和我分享一下吗
谢谢imo最简单的方法是:
if (ajaxResponse.someProperty){
//do stuff
}
除非属性是布尔值。那么这就不一定能按需要工作:假设您的A对象与下面显示的对象类似
var person = {
name: "Nicholas"
};
有很多方法可以用来检查这一点
方法1
方法2
不建议使用方法3
如果您只想检查属性的存在,而不一定要检查它们的值,那么您有两个安全的选项:hasOwnProperty和in操作符。如果只想检测自己的属性,则应使用hasOwnProperty方法。如果您想测试属性是否存在,并且不关心它是自己的属性还是对象属性,那么in操作符就是要使用的
假设ajax调用中发生任何错误,响应直接指向错误,则不会成功。若将空数据作为结果传递,则data.d将为。因此,有必要在解析之前检查data.d是否为空。
如果结果是Json,则按如下方式解析Json
var jsonData = $.parseJSON(data.d);
如果jsonData.length==0,则结果没有属性。检查json响应中的属性有多种方法。这是一种简单的方法。
直接检查jsonData.PropertyName!=空或不空。hasOwnProperty更适合我think@chenop是正确的,但您也可以执行以下操作:var check=ajaxResponse.someProperty | | false;@chenop是的,我也这么认为,但现在我在一个现有的项目中工作,他们使用第二种方式,但他们当然是聪明的人,所以一定有一个原因,我现在看不出来。这取决于你检查的是什么财产,目的是什么。有不同的方法可以做到这一点,因为有些方法在某些情况下更合适,而另一些方法在其他情况下更合适。在不知道上下文的情况下,这是不可能的。在一般意义上,typeof check不会检查对象是否具有属性,因为可能是对象确实具有该属性,但属性的值未定义。如果person.name为false,则在person.name{…}.Umm@尼纳斯科尔斯,你是对的。但归根结底,这是他的合同,书写和访问该对象的人知道该属性的类型,如果是bool,则应避免使用方法3。我已经添加了一个类似的注释。如果您专门针对一个名称进行测试,那么方法3可能是可以的,因为即使该属性作为一个空字符串存在,在逻辑上可能等同于根本没有名称。“但由于OP的someProperty更为通用,所以它并不合适。”尼纳斯科尔斯同意。不建议使用方法3。如果属性是一个可能为0的数字,则该方法不起作用。或者可能是空字符串的字符串。或者可能为空。或者可能存在未定义的值。
if ("name" in person){
//property exists
}
//doesn't accurately test for existence
if (person.name){
//yay! property exists!
}
$.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) {
}
});
var jsonData = $.parseJSON(data.d);