当前位置: 首页 > 知识库问答 >
问题:

如何检查深度嵌套对象是否未定义?[副本]

田骁
2023-03-14

我想检查一个对象是否未定义

这状态数据值[0]。名称

我尝试了以下操作,这些操作将显示类型错误。状态数据值在控制台中未定义。

if(typeof this.data.value[0].name=== "undefined"){
//do something
}

if(this.data.value[0].name == undefined){
//do something
}

if(!!this.data.value[0].name){
//do something
}

if(!this.data.value[0].name){
//do something
}

if(this.data){
  if(this.data.value){ // It says type error, this.state.value is undefined in the console.
    }
}



我该怎么检查这个物体呢。状态值[0]。名称未定义?

我试图这么做

 if (typeof (this.data) !== undefined) {
      debugger;
      if (typeof (this.data.value) !== undefined) {
        debugger;

        if (typeof (this.data.value[0].name != undefined)) {//cannot read value [0]
          debugger;


        }
      }
    }

我的解决方案,多亏了pranav-c-balan

  if (this.data && this.data.value && this.data.value[0] && this.data.value[0].name) {
      return true;
    } else {
      document.getElementById("myDIV").innerHTML =
        "<b>Custom Error Text</b>";
      return false;

    }

一个有效的例子

   let data={};
    data.value=[{name:123}];

    function checkValue(){
      if(data && data.value && data.value[0] && data.value[0].name){
        return true;
      }else{
         return false;
      }
     }
     let correct=checkValue();
     
       if(correct){
          console.log("This is valid, data.value[0].name Exist");
          }else{
          console.log("This is invalid,data.value[0].name do not Exist");

          }

  function checkValue2(){
      if(data && data.value && data.value[0] && data.value[0].names){
        return true;
      }else{
         return false;
      }
     }

let correct2=checkValue2();
 if(correct2){
          console.log("This is valid, data.value[0].names Exist");
          }else{
          console.log("This is invalid,data.value[0].names do not Exist");

          }
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.6.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/15.6.0/react-dom.min.js"></script>

共有2个答案

谭玄天
2023-03-14

只需使用相同类型的运算符

if(typeof(this.state) != 'undefined'){
  if(typeof(this.state.value) != 'undefined') { 
        // next source
    }
}
欧君之
2023-03-14

您可以使用可选链接(?。)检查对象。

这将检查你链条的每一个部分。假设它是未定义的数据内的状态然后它返回未定义的异常抛出一个错误。

let state = {
  data: {
    value: [
      {name: 'value'}
    ]
  }
}

console.log(typeof state?.data?.value?.[0]?.name);
console.log(typeof state?.data?.value?.[1]?.name);
console.log(typeof state?.datum?.value?.[0]?.name); // In this case it returns 'undefined' for dutum stage.
 类似资料:
  • 我只找到了未定义的变量的解决方案,而不是我目前拥有的用例。 我正在从另一个对象构建一个对象,在这个对象中,我从输入对象分配了一些值,例如。 在一些输入对象中,值被定义在一些不被定义的对象中。在这种情况下,我希望值和单位为空,然而这显然是错误的。 无法读取未定义的属性'0' 在本例中,观察值['obx.5'][0]尚未定义。 我可以尝试/捕捉,但是由于结果对象很长,这将变得非常不可读。 有什么方法可

  • 我有一个对象,我想检查这个对象或嵌套字段是否为空。我想打印这个网状字段,但我应该检查某个级别是否为空,否则我会得到空指针异常。 我知道我可以做到: 但时间太长了。你知道更好的检查方法吗?

  • 设备类型。Java语言 elemetry.java枚举类 我想获取所有DeviceType Id,其DeviceTeletry名称以“System”(字符串)开头。 我做了这样的事情:- 有谁能告诉我如何从中获取DeviceType Id吗?

  • 问题内容: 我试图得到: 在我自己的脚本中,我以前只是使用它,因为我从来不需要作为属性: 因此,对于第二个对象,我想出了以下方法作为一种快速解决方案-大部分都能奏效。;) 问题是,这取决于浏览器是否强制执行只读属性,而并非所有人都这样做。 有没有好的替代品? 问题答案: 这可能很有趣: 它是DOM Level2的一部分。 更新2 :这是我在自己的库中实现它的方式:(以前的代码在Chrome中不起作

  • 问题内容: 说我的课很简单 我希望将此类s 的集合存储在People类的属性中,该属性是类型为Person的数组 也许我做到这一点如下 问题:请问我如何检查people.list是否包含实例alex? 我很想尝试的简单尝试 称一个错误 问题答案: 有两个功能: 编译器在抱怨是因为编译器知道不是,因此需要一个谓词,但不是谓词。 如果阵列中的人员是(不是),则可以使用: 由于它们不相等,因此可以将第二

  • 问题内容: 在Go中,如何检查对象是否响应方法? 例如,在Objective-C中,可以通过执行以下操作来实现: 问题答案: 一个简单的选择是仅使用您要检查的方法声明一个接口,然后针对您的类型进行类型断言;例如: 如果您打算对自己的类型进行任何疯狂的操作,则可能要使用该软件包。http://golang.org/pkg/reflect