【问题标题】:Ternary vs. Logical Operators [closed]三元与逻辑运算符 [关闭]
【发布时间】:2014-03-18 08:52:27
【问题描述】:

抱歉,如果这是一个骗局,我只看到了 or || 的比较。

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

如果一个非常相似的操作和语法在相同的任务中胜过它,那么三元运算符的目的是什么?更奇怪的是,它做什么 让它变慢了?

【问题讨论】:

  • 他们不一样。检查1 ? 0 : 21 && 0 || 2
  • 确实如此,也许我应该澄清一下,在更常见的情况下,两个值都评估为 true。

标签: javascript ternary-operator logical-operators


【解决方案1】:

如果您想有条件地将值设置为0 或某个非零值怎么办?

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

那行不通,因为0 是假的。

var x = condition() ? 0 : 1;

会起作用,因为评估不依赖于强制的布尔值。

【讨论】:

  • 一个例外,虽然这引发了我的最后一个问题:如果逻辑运算符检查两次 true,为什么它更快?它不会做两倍的检查工作吗?
  • @fay 我不确定;对于这些模式中的任何一个这样基本和简单的东西,性能(对我来说)似乎并不相关。这类代码并不是让页面变慢的原因。
  • 我喜欢学习,所以申请无关紧要。虽然我会说它不适合我,因为我将它用于 HTML5 游戏的物理部分。在每帧的每个实例上运行它意味着更快的选项,为什么它是最快的选项是有用的知识,既因为我喜欢学习,也因为它在我的情况下有实际应用。
猜你喜欢
  • 1970-01-01
  • 2020-04-14
  • 1970-01-01
  • 1970-01-01
  • 2018-09-26
  • 2017-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多