【问题标题】:The usage of var foo = bar&& bar.getSomething(); in javascript [duplicate]var foo = bar&& bar.getSomething(); 的用法在javascript中[重复]
【发布时间】: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


【解决方案1】:

我认为您对 & 运算符和 && 运算符感到困惑,& 运算符将返回按位 &,而 && 运算符在所有值都为真时返回最后一个操作数,如果任何值都返回第一个假值是假的

console.log(4 & 5);
console.log(4 && 5);
console.log(!!(4 && 5));
console.log(0 && 5);
console.log(5 && 0);
console.log(null && 5);
console.log(5 && null);

您可以使用 !!运算符以确保它是布尔值

【讨论】:

  • "返回最后一个元素或 false" 不正确。如果它是假的,则返回第一个操作数,或者返回第二个操作数。如果操作数之一是false,它只返回false
  • 是的,我将两者混合。但我有点疑惑,为什么要这样编码,就因为它干净?
  • @FelixKling 表示如果有 1 个元素为假,则返回 false,否则返回最后一个参数
  • 不,那是错误的。 0 && 5 返回 0,而不是 false
  • 更新了答案
猜你喜欢
  • 2017-09-20
  • 1970-01-01
  • 2019-02-08
  • 2022-11-04
  • 1970-01-01
  • 1970-01-01
  • 2013-03-03
相关资源
最近更新 更多