Javascript 正在检查NaN或

Javascript 正在检查NaN或,javascript,Javascript,Jshint不满意此表达式: var amount = $('.some-input').val() // Check for NaN or <= 0 if (!(+amount > 0)) { ... } 它声称混淆了!的用法!。有没有办法在不添加太多代码的情况下重写表达式?您可以编写 if (amount > 0 === false) { 在此比较中,字符串将自动转换为数字,任何无法正确解析为数字的字符串将转换为不大于0的NaN。当jshint看到===

Jshint不满意此表达式:

 var amount = $('.some-input').val()
 // Check for NaN or <= 0
 if (!(+amount > 0)) {
    ...
 }
它声称混淆了!的用法!。有没有办法在不添加太多代码的情况下重写表达式?

您可以编写

if (amount > 0 === false) {
在此比较中,字符串将自动转换为数字,任何无法正确解析为数字的字符串将转换为不大于0的NaN。当jshint看到===false代替了便利!时,它似乎很高兴

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

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

if (!(amount > 0)) {
就质量而言,我认为这里最重要的是你已经添加的小评论。

你可以写

if (amount > 0 === false) {
在此比较中,字符串将自动转换为数字,任何无法正确解析为数字的字符串将转换为不大于0的NaN。当jshint看到===false代替了便利!时,它似乎很高兴

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

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

if (!(amount > 0)) {

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

没有否定的等价物是:

if (amount <= 0 || isNaN(amount)) {
所以,不是说不大于,而是说小于或等于。此外,并非所有人都知道NaN实际上无法与数字进行比较,即始终返回false,因此显式测试可以使此表达式更易于阅读和理解


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

没有否定的等价物是:

if (amount <= 0 || isNaN(amount)) {
所以,不是说不大于,而是说小于或等于。此外,并非所有人都知道NaN实际上无法与数字进行比较,即始终返回false,因此显式测试可以使此表达式更易于阅读和理解



显然,人类发现否定更难理解,我不会说否定是不真实的。

如果是NanAmount | |+amount,或者简单地将+移到$之前,就可以简化条件。我觉得这也很自然,因为数量是……的数值,为什么你认为你需要重写这个表达式?Jshint是错误的,它看不到它是正确的注释文档。很好的一点,Jshint看不到注释。我不理解您对代码更少的关注。如果您首先按照Bergi的注释完整地写出它,则不需要任何代码注释,而且它的输入比带有注释的较短版本要少。如果是NanAmount | |+amount,或者简单地将+移到$之前,则可以简化条件语句。我觉得这也很自然,因为数量是……的数值,为什么你认为你需要重写这个表达式?Jshint是错误的,它看不到它是正确的注释文档。很好的一点,Jshint看不到注释。我不理解您对代码更少的关注。如果您首先按照Bergi的注释完整地写出它,那么就不需要代码注释,而且它比带有注释的较短版本更容易键入。no。如果你把NaN放在这里,结果就不同了。逻辑是三元的:-@Bergi:对。。。也许你应该把你的评论作为答案,因为它是唯一正确的。@PaulS:啊,当然。。。我把小的或相等的读作一个块,比看起来更合适。无论如何,改变了顺序:@FelixKling fair reasoning.@Derek:好的,为了一劳永逸地解决这个问题,我只使用了规范中的术语::DNo。如果你把NaN放在这里,结果就不同了。逻辑是三元的:-@Bergi:对。。。也许你应该把你的评论作为答案,因为它是唯一正确的。@PaulS:啊,当然。。。我把小的或相等的读作一个块,比看起来更合适。无论如何,改变了顺序:@FelixKling fair reasoning.@Derek:好吧,为了一劳永逸地解决这个问题,我只使用了规范中的术语::D不确定为什么jshint不知道警告不要与布尔值比较-我发现这个表达式实际上比否定更令人困惑:-@Bergi I。但这不是我第一次遇到这个质量工具,我也不太认真。@Bergi我以前没听说过,比较布尔值有什么不对?@paulS你更喜欢if cond===false而不是if!cond?@PaulS:将布尔值与true进行比较是多余的,将布尔值与false进行比较最好使用NOT运算符编写。不确定为什么jshint不知道警告不要与布尔值进行比较-我发现该表达式实际上比否定更令人困惑:-@Bergi I。但这不是我第一次遇到
这是一个高质量的工具,我不太重视它。@Bergi我以前没听说过,比较布尔值有什么不对?@paulS你更喜欢if cond===false而不是if!cond?@PaulS:将布尔值与true进行比较是多余的,将布尔值与false进行比较最好使用NOT运算符编写。