从JSON内变量取值触发TypeError,寻求原因排查与解决
排查StackerFlow函数的TypeError问题
先看你贴出的代码,第一个明显的问题是对象定义的语法错误:在test对象里,caseJSON属性的末尾缺少了逗号,这会直接导致JavaScript解析失败,触发语法错误。先把这个问题修复:
function stackerFlow (d) { var blogspotter = getAllowedIntervals(); var test = { "caseJSON" : {"interval":{"start_month":12,"start_year":2014,"end_month":12,"end_year":2017}}, // 补上属性间的逗号 "caseVAR" : blogspotter }; Logger.log(blogspotter); // 后续逻辑代码... }
如果补完逗号还是报错,那大概率是getAllowedIntervals()返回的不是JSON对象,而是JSON格式的字符串。虽然Logger.log显示内容是有效JSON,但字符串本身没有interval这类属性,直接访问自然会触发TypeError。
这时候你需要把返回的字符串解析成对象,修改获取blogspotter的代码:
var blogspotter = JSON.parse(getAllowedIntervals());
这样blogspotter就会变成和test.caseJSON结构完全一致的对象,再访问test.caseVAR.interval.start_month这类属性就不会报错了。
另外,你可以用Logger.log(typeof blogspotter)确认返回值类型:如果输出是string,就说明确实需要解析;如果是object,可以再排查是否返回的对象嵌套层级和预期不一致(比如少了一层interval包裹)。
内容的提问来源于stack exchange,提问作者Adam Reed
相关产品推荐
相关产品推荐

