[英]JS try / catch generating jshint errors
关于以下实现为何有效的任何建议,但被视为jshint错误?
try {
map.childNodes.length;
} catch (err) {
console.log(err);
}
我只想看看childNodes在迭代之前是否有长度。
这里类似的东西:
try {
response.errors.length > 0;
deferred.reject(response);
} catch (e) {
deferred.resolve(response);
}
来自JSHint的警告是:
期望一个赋值或函数调用,而是看到一个表达式。
即使未使用try..catch
,也会显示警告。 map.childNodes.length;
让您知道map.childNodes.length;
作为独立的语句可能没有用,并且可能表示编码错误; 即,在大多数情况下,您想对值做一些事情,而不仅仅是将其作为独立的语句来访问。 例如,使用(无用)语句5;
会得到相同的警告5;
。
当然, 有时将属性作为语句中的唯一行为来访问可能会很有用。 例如,如果您在Object.defineProperty
属性上定义了一个getter函数,则访问该属性将触发该getter函数。 但是,仅值语句很可能出现编码错误,因此JSHint会警告您有关可疑的代码。
也就是说,假设您担心response.error
可能是一个false值( undefined
, null
)而不是一个对象,则可以改进您的方法:
if(response.errors && response.errors.length > 0) {
deferred.resolve(response);
} else {
deferred.reject(response);
}
因为您要滥用条件运算符,所以应该处于if
条件中。 JSHint并不意味着您可以使用Javascript进行任何操作。
首先,您可以使用Array类型检查,例如:
if (toString.call(map.childNodes) === '[object Array]') {
//iterator
}
第二,可能是这样的:
if (response.errors && response.errors.length > 0) {
deferred.reject(response);
} else {
deferred.resolve(response);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.