刚看到一行代码:a && b && c
。我认为这应该等同于if(a && b) {c}
。但我真的很好奇,这些代码有任何性能差异,或者将它放在一行中只是很酷吗?
这是实际代码:sourcesPanel && sourcesPanel.tips && sourcesPanel.tips.clearTimers()
sourcesPanel
和sourcesPanel.tips
是程序中的两个对象。
基本上,我认为它检查这两个对象是否存在,它们是否存在,称之为clearTimers
函数。
答案 0 :(得分:1)
这实际上是一次双重检查,而不是像你一样简单的条件检查:if(a && b) {c}
。
等同于a && b && c
的是:
if (a && b){
if(c){
// do something
所有a
,b
和c
都必须真实。
a && b && c
比做
if (a){
if (b){
if(c){
// do something
但是,如果a && b && c
评估b
,则永远不会评估a
false
之类的三重检查。因此节省时间。仅对c
和a
也属实的b
进行评估时也是如此。
答案 1 :(得分:1)
JS中的逻辑运算符有一个非常重要的行为:它们返回第一个确定失败或后续的操作数。如果没有。
if (a) { if (b) { ...
的行为非常简单:如果它们是真实的,请输入该块。
&&
的行为不同:
foo = 1 && 2 && 3; // foo = 3, succeeds all the way through
foo = 1 && 0 && 3; // foo = 0, failed at 0
foo = 1 && null && 3; // foo = null, failed at null
当在 if
内使用逻辑运算符时,行为似乎完全相同。它们单独使用或与作业一起使用时,它们的行为方式相对出乎意料。
使用||
提供默认值:
opt = opt || {foo: bar};
如果opt
是真实的(对于存在的对象),请使用它,否则使用默认值。其他逻辑运算符的行为方式相同。
答案 2 :(得分:0)
在某些情况下,性能会有所改善。
该行从左到右逐步执行,并在失败后立即离开。
因此,如果a为假,则不会评估b和c。
你在bash中看到了很多,其中一条指令依赖于另一条指令成功,但无论如何都必须尝试第一条指令。