我似乎经常处理这样的特殊情况.必须有一个更简洁的语法或结构:
var x = solveForX(); /* some slow calculation here */
if (x < 0)
{
x = 0;
}
Run Code Online (Sandbox Code Playgroud)
这是等价的,但感觉不再优雅:
var x;
x = (x = solveForX()) < 0 ? 0 : x;
Run Code Online (Sandbox Code Playgroud)
也许有一点转换技巧?
更新:我运行了一些基准来比较我最喜欢的两个答案 - 我接受的答案和Peter Ajtai的答案.事实证明彼得的速度要快得多!每个运行1,000,000次迭代(我还运行了一个缓存版本Math.max以查看查找贡献了多少时间),表明Peter在Math.max版本的一半时间内运行,即使使用max缓存也是如此.
也就是说,即使是"最慢"的方法仍然很快.
Dav*_*and 29
怎么样
var x = Math.max(solveForX(), 0);
Run Code Online (Sandbox Code Playgroud)
(x < 0) && (x = 0);
Run Code Online (Sandbox Code Playgroud)
编辑:删除了if语句.谢谢Andreas.
这是一行,如果您熟悉布尔短路评估,它很清楚它的作用(在我个人看来).
以上利用布尔短路评估.这在某些情况下非常有用(尤其是C++中的指针运算,但布尔短路评估也适用于Javascript).
x = 0只评估是否x < 0.
这是两个例子:
这警报1:
<script type="text/javascript">
var x = 1;
(x < 0) && (x = 0);
alert(x);
</script>
Run Code Online (Sandbox Code Playgroud)
这提醒0:
<script type="text/javascript">
var x = -1;
(x < 0) && (x = 0);
alert(x);
</script>
Run Code Online (Sandbox Code Playgroud)