通过json中的键访问值是未定义的

时间:2018-06-13 21:29:17

标签: javascript json node.js typescript

你好我面临一个奇怪的错误,我有一个下面的对象



    let dataFromUrl =  {
      "careerTrackId": 510,
       "country": [],
       "geography": [18],
       "ou2": [51549564],
       "ou3": [],
       "ou4": [],
       "ou5": [],
       "ou6": [],
       "ou7": [],
       "ou8": [],
       "region": []
    } 

console.log(dataFromUrl.geography.length);


// Here in this method iam using this dataFromUrl

   

     function getGeoUnitId(dataFromUrl) {
    console.log("dataFromUrl",dataFromUrl);
  console.log("dataFromUrl.geography",dataFromUrl.geography);
  console.log("dataFromUrl.ou2",dataFromUrl.ou2);
  console.log("dataFromUrl.careerTrackId",dataFromUrl.careerTrackId);
      let geoUnitId = "(" + dataFromUrl.geography + ")";
      let str2 = "geounitid IN " + geoUnitId;
      if (dataFromUrl.geography.length == 0) {
        str2 = "";
      }
      return str2;
    }




但是当我尝试在我的dataFromUrl.geography.length代码中使用nodejs时,我会收到以下错误:

  

[' TypeError:无法读取属性'长度'未定义']

当我将目标更改为es6时,当我的目标是es5 bu时,此代码正在运行,它开始中断。是否有任何人知道为什么会突然发生这种情况。

2 个答案:

答案 0 :(得分:0)

在完成评论之后,我可能的猜测是你在没有参数的情况下调用getGeoUnitId()并使用你可能已经更改过的getGeoUnitId外部。

尝试重命名参数变量名称

function getGeoUnitId(somethingOtherThan_dataFromUrl) {

提示:如果您在理解JS代码时遇到问题,则应使用Chrome(或任何其他浏览器)开发人员工具并添加调试器以查看代码流,如何为变量分配值,将它们放在何处更新等等...

答案 1 :(得分:0)

最后,我能够解决它,我仍然不知道为什么但这有效: JSON.parse()做了这个伎俩。

let dataFromUrl =  {
      "careerTrackId": 510,
       "country": [],
       "geography": [18],
       "ou2": [51549564],
       "ou3": [],
       "ou4": [],
       "ou5": [],
       "ou6": [],
       "ou7": [],
       "ou8": [],
       "region": []
    } 


  function getGeoUnitId(dataFromUrl) {
    console.log("dataFromUrl",dataFromUrl);
  console.log("dataFromUrl.geography",dataFromUrl.geography);
  console.log("dataFromUrl.ou2",dataFromUrl.ou2);
  console.log("dataFromUrl.careerTrackId",dataFromUrl.careerTrackId);
      let geoUnitId = "(" + dataFromUrl.geography + ")";
      let str2 = "geounitid IN " + geoUnitId;
      if (dataFromUrl.geography.length == 0) {
        str2 = "";
      }
      return str2;
    }

 dataFromUrl = JSON.parse(dataFromUrl );
 console.log(dataFromUrl.geography.length); // this started giving me 1