【问题标题】:Javascript shortage for (num>0)?num:0(num>0)?num:0 的 Javascript 短缺
【发布时间】:2014-02-25 15:17:38
【问题描述】:

有没有办法在 javascript 中写出更短的(num>0)?num:0

原因是num变量尚未定义,上例需要计算两次。

换个说法,a 和 b 是已知的。我想写(a>b)?(a-b):0 更短。这在javascript中可能吗?谢谢。

【问题讨论】:

  • 必须计算两次是什么意思?
  • 我的选择是添加 var num = a-b (不完美)或使用 a-b 代替 num (计算两次)。
  • Math.max(num, 0) 但请注意,它实际上比原始版本慢。此外,如果 num 不是数字,它的行为与原始表达式不同。除非您参加某种计算源代码大小的竞赛,否则不清楚为什么您需要“更短”的答案。
  • @T.J.克劳德 好的,下次我会的。对不起。

标签: javascript sum formula


【解决方案1】:

编辑后回答:

我可能会继续做减法,然后做测试:

num = a - b;
if (num < 0) {
    num = 0;
}

但是

num = a > b ? a - b : 0;

...看起来也很好。

请记住,在出现问题之前进行优化(“过早优化”)通常是浪费时间。这通常是正确的,但 尤其是在 JavaScript 中是正确的,因为不同的引擎表现不同。

编辑前回答

不,我不认为有更短的方法来写。

原因是num变量还没有定义,上例需要计算两次。

如果你的意思是 num 真的是一个计算,那么将它缓存到一个变量中:

var num = /*...the calculation...*/;
var result = num > 0 ? num : 0;

【讨论】:

  • var num = Math.max(a-b, 0);
  • @epascarello: :-) 更短,但更慢。
  • 好吧,他们并没有要求更快;)
  • @epascarello:确实如此。 :-)
  • 我想他们问了虽然没有提到它:)
【解决方案2】:

这个呢:

Math.max(num, 0)

如果num 小于0,则此表达式将返回0,否则返回num 本身。

【讨论】:

    猜你喜欢
    • 2017-01-27
    • 1970-01-01
    • 2023-01-22
    • 2023-03-28
    • 2021-05-14
    • 1970-01-01
    • 1970-01-01
    • 2016-05-12
    • 1970-01-01
    相关资源
    最近更新 更多