1

Jshint 对这个表达式不满意:

 var amount = $('.some-input').val()
 // Check for NaN or <= 0
 if (!(+amount > 0)) {
    ...
 }

它声称混淆使用!. 有没有办法在不添加太多代码的情况下重写表达式?

4

2 回答 2

6

没有否定的等价物是:

if (amount <= 0 || isNaN(amount)) {

所以,不是说"Is not greater than",而是说"Is less than or equal"。此外,并不是每个人都知道NaN不能真正与数字进行比较(即总是返回false),因此显式测试可以使这个表达式更容易阅读和理解。

显然,人类发现否定更难理解,我不会说它没有道理。

于 2013-06-04T11:09:53.687 回答
2

你可以写

if (amount > 0 === false) {

在此比较中,字符串会自动转换为数字,并且任何无法正确解析为数字的字符串都会转换为NaNis not >0。而 jshint 似乎很高兴看到它=== false代替了 便利!

但真正的解决方案似乎使用 jshint,这在这里不相关。该工具不允许您使用 JavaScript 的强大功能。

如果您决定放弃 jshint,我仍然建议您将测试简化为

if (!(amount > 0)) {

质量方面,我认为这里最重要的是您已经添加的小评论。

于 2013-06-04T11:09:13.720 回答