三元运算符 vs 逻辑运算符

3

如果这是重复的问题,我很抱歉,我只看到了一个or ||比较。

如果我想基于单个条件设置一个变量的值,其中b将始终评估为true(不是0、null、undefined),为什么要使用三元运算符a?b:c而不是逻辑运算符a&&b||c?它们都似乎执行相同的功能,尽管jsperf上的测试显示后者略快。

如果非常类似的操作和语法在相同的任务中表现更好,那么三元运算符的目的是什么呢?更奇怪的是,它做了什么才会使其速度较慢?


3
它们不同。请对比 1 ? 0 : 21 && 0 || 2 - Frédéric Hamidi
没错,也许我应该澄清一下,在更常见的情况下,两个值都评估为true。 - user1948076
1个回答

5

如果您想根据条件将值设置为0或某个非零值,该怎么办?

var x = condition() && 0 || 1;

这样是不行的,因为 0 是假值。

var x = condition() ? 0 : 1;

这将起作用,因为评估不依赖于强制转换的布尔值。


有一个例外,这也引出了我的最后一个问题:如果逻辑运算符检查两次是否为真,那么为什么它会更快呢?难道不是做了两倍的检查工作吗? - user1948076
1
@fay 我不确定;对于像这样基本和简单的模式之一,性能(对我来说)似乎并不重要。这种代码不会导致页面变慢。 - Pointy
1
我喜欢学习,所以应用程序并不太重要。尽管我会说对我来说并不是这样,因为我正在将其用于HTML5游戏的物理部分。在每一帧运行每个实例意味着更快的选项,而为什么它是最快的选项是有用的知识,因为我喜欢学习并且它在我的情况下有真正的应用。 - user1948076

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接