关于为什么以下实现有效但被认为是 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 的警告是:
Expected an assignment or function call and instead saw an expression.
即使不使用try..catch
,警告也会显示。 JSHint 让您知道 map.childNodes.length;
作为独立语句可能没有用,并且可能表明存在编码错误;也就是说,在大多数情况下,您希望对值执行某些操作,而不仅仅是将其作为独立语句进行访问。例如,使用(无用的)语句 5;
会收到相同的警告。
当然,有时将属性作为语句中的唯一行为进行访问可能会很有用。例如,如果您使用 Object.defineProperty
在属性上定义了 getter 函数,则访问该属性将触发该 getter 函数。但是,纯值语句更有可能是编码错误,因此 JSHint 会警告您有关可疑代码的信息。
也就是说,假设您担心 response.error
可能是一个错误值(undefined
,null
),您的方法可以改进>) 而不是对象:
if(response.errors && response.errors.length > 0) {
deferred.resolve(response);
} else {
deferred.reject(response);
}
关于javascript - JS try/catch 生成 jshint 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19643481/