繁体   English   中英

JS try / catch产生jshint错误

[英]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值( undefinednull )而不是一个对象,则可以改进您的方法:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM