我注意到在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中二进制操作的实现吗?这种编码习惯的名称是什么?与传统方式相比,是否有任何性能优势?感谢
答案 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);
你可以用!!运算符以确保它是布尔值