Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 检查对象是否具有属性的最佳方法是什么_Javascript_Ajax_Hasownproperty - Fatal编程技术网

Javascript 检查对象是否具有属性的最佳方法是什么

Javascript 检查对象是否具有属性的最佳方法是什么,javascript,ajax,hasownproperty,Javascript,Ajax,Hasownproperty,我想问一下,检查ajax响应对象是否具有属性的正确方法是什么。 我在谷歌上搜索了一下,我发现有不同的方法来解决这个问题 例如: if(ajaxResponse.hasOwnProperty('someProperty')){ //do blah blah } 但肯定还有其他方法,例如: if(typeof ajaxResponse.someProperty !== 'undefined')){ //do blah blah } 所以

我想问一下,检查ajax响应对象是否具有属性的正确方法是什么。 我在谷歌上搜索了一下,我发现有不同的方法来解决这个问题

例如:

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