我使用twitter api获取有关推文的信息。我的代码正在使用此信息。有时它会发生,api会提供一个未完成的'我的代码停了。
我的想法是检查参数,只适用于那些没事的人:
if ( typeof data.id_str.user.name === 'undefined' || data.id_str.user.name === null ){
next();
} else{
return data.id_str.user.name;
}
但我的检查并不重要。如果我执行代码,有时会发生TypeError:"无法读取属性' name'未定义"。你知道我能做些什么来处理这个错误并检查下一条推文吗?
数据未定义。但我不知道何时无法定义数据。我需要一种跳过数据并使用下一个定义数据的方法。
我已经实施了您的建议。现在,if条件的else部分出现错误。为什么?它怎么会起作用?
if ( typeof data && data.id_str && data.id_str.user && data.id_str.user.name === 'undefined' || data && data.id_str && data.id_str.user && data.id_str.user.name === null ){
console.log('data.id_str.user.name is undefined. --> Why?');
} else {
console.log('on User : '+data.id_str.user.name);
}
答案 0 :(得分:3)
在这种情况下,任何data
链都可能未定义,例如data.id_str
可能未定义,或data.id_str.user
可能未定义。后一种情况将导致:
无法读取未定义的属性“名称”
有多种方法可以解决此问题,例如检查链data && data.id_str && data.id_str.user
中的每个单独部分或将检索包装在try
/ catch
中。
答案 1 :(得分:1)
你可以使用'守卫'。喜欢:typeof data && data.id_str && data.id_str.user && data.id_str.user.name === "undefined"
简单的解决方案,但有助于不锁定代码。
编辑:在这里,我发现你更多地描述了这种防范未定义的例子:Guarding against undefined parameters