【发布时间】:2017-09-09 21:58:45
【问题描述】:
我在Javascript中注意到了,我偶尔会看到
var foo = bar && bar.getSomething()
我知道这可能类似于说:
var foo;
if(bar !== undefined) {
foo = bar.getSomething();
}
但这仍然让我感到困惑。因为对我来说,它与二元运算非常相似,例如:
0100 & 0101 == 0100; //true
但是,另一方面却完全不同,因为例如,如果 bar 是一个对象,并且 bar.getSomething() 返回一个整数(在下面的示例中为 5),则代码最终为:
var foo = {baz : qux} && 5;
这显然对我来说毫无意义。
所以我的问题是,为什么在 Javascript 中,人们可以用这种方式编码?这是JS中二进制操作的实现吗?这种编码实践的名称是什么?与传统方式相比,有什么性能优势吗?谢谢
【问题讨论】:
-
&&是逻辑与,而不是按位与。 -
is there any performance benefit compared to the traditional way?很可能不是,如今的 Javascript 引擎非常聪明,像这样的微优化通常不会有任何收获。主要用途只是使代码更短,它基本上是说从左边继续执行,直到某些东西返回 false。您可以将它们链接不止 2 个,例如.. action1 && action2 && action3,如果 action2 返回 false,则 action3 不会被执行。 -
我实际上不确定您想知道什么。人们使用这样的代码是因为他们可以并且因为它比使用
if语句更短。 -
@FelixKling 我知道人们以这种方式使用。但在我知道它是如何工作的以及它为什么工作之前,我没有信心使用它。所以我最终问了这个问题。
-
所以你基本上是在问逻辑运算符是如何工作的?
标签: javascript