一尘不染

为什么逻辑运算符(&&和||)不总是返回布尔结果?

javascript

为什么这些逻辑运算符返回一个对象而不是布尔值?

var _ = (obj.fn && obj.fn() ) || obj._ || ( obj._ = {} );

var _ = obj && obj._;

我想了解为什么它返回obj.fn()(如果已定义)OR的obj._结果,而不返回布尔结果。


阅读 360

收藏
2020-04-25

共1个答案

一尘不染

var _ = ((obj.fn && obj.fn() ) || obj._ || ( obj._ == {/* something */}))? true: false

将返回布尔值。

更新

请注意,这是基于我的测试。我不会被完全依赖。

它是一个 赋值true 赋值的表达式false。而是分配计算的值。

让我们看一下这个表达式。

表达式示例:

var a = 1 || 2;
// a = 1

// it's because a will take the value (which is not null) from left
var a = 0 || 2;
// so for this a=2; //its because the closest is 2 (which is not null)

var a = 0 || 2 || 1;    //here also a = 2;

您的表情:

var _ = (obj.fn && obj.fn() ) || obj._ || ( obj._ = {} );

// _ = closest of the expression which is not null
// in your case it must be (obj.fn && obj.fn())
// so you are gettig this

另一个表达:

var a = 1 && 2;
// a = 2

var a = 1 && 2 && 3;
// a = 3 //for && operator it will take the fartest value
// as long as every expression is true

var a = 0 && 2 && 3;
// a = 0

另一个表达:

var _ = obj && obj._;

// _ = obj._
2020-04-25