var foo = bar&&的用法bar.getSomething();在javascript中

时间:2017-09-09 21:58:45

标签: javascript

我注意到在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中二进制操作的实现吗?这种编码习惯的名称是什么?与传统方式相比,是否有任何性能优势?感谢

1 个答案:

答案 0 :(得分:0)

我认为你和A&操作员和&&操作员,&运算符将返回按位&,而&&如果所有值都为true,则operator返回最后一个操作数;如果任何值为false,则返回第一个falsy值

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);

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