关于为什么以下实现有效,但被认为是jshint错误的任何建议?
try {
map.childNodes.length;
} catch (err) {
console.log(err);
}
我只是想在迭代之前看看childNodes是否有长度。
这里类似的事情:
try {
response.errors.length > 0;
deferred.reject(response);
} catch (e) {
deferred.resolve(response);
}
答案 0 :(得分:3)
JSHint的警告是:
期望一个赋值或函数调用,而是看到一个表达式。
即使不使用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);
}
答案 1 :(得分:0)
因为你滥用应该处于if
条件的条件运算符。 JSHint并不打算批准您在
对于第一个,您可以使用数组类型检查,例如:
if (toString.call(map.childNodes) === '[object Array]') {
//iterator
}
对于第二种,也许这样的事情:
if (response.errors && response.errors.length > 0) {
deferred.reject(response);
} else {
deferred.resolve(response);
}